Невозможно прочитать смонтированный каталог GCSFuse после добавления опции --implicit-dirs

Я смонтировал корзину GCS с помощью gcsfuse. После обновления моего сценария запуска, включив --implicit-dirs, я больше не могу читать из смонтированного каталога /gcs/my-bucket. Я получаю сообщение «Ошибка ввода/вывода» при попытке вывести список файлов (ls) или получить доступ к каталогу. Однако, хотя я не могу получить прямой доступ к каталогу /gcs/my-bucket, я могу получить доступ к файлам в его подкаталогах. Разрешения кажутся правильными, и у меня есть полный доступ к хранилищу.

Я добавил флаг --implicit-dirs, чтобы решить проблемы, связанные с доступом к файлам, загруженным с помощью GCP SDK. Иногда виртуальная машина не может получить к ним доступ, хотя файлы, загруженные через gcsfuse, доступны.

Области доступа к Cloud API (РАЗРЕШЕНИЯ ВМ)

Allow custom access
BigQuery Disabled
Bigtable Admin Disabled
Bigtable Data Disabled
Cloud Datastore Disabled
Cloud Debugger Disabled
Cloud Platform Disabled
Cloud Pub/Sub Disabled
Cloud Source Repositories Full
Cloud SQL Disabled
Compute Engine Disabled
Service Control Enabled
Service Management Read Only
Stackdriver Logging API Write Only
Stackdriver Monitoring API Write Only
Stackdriver Trace Write Only
Storage Full
Task queue Disabled
User info Disabled

Разрешения учетной записи службы: Средство просмотра тестовой лаборатории Firebase Автор журналов Администратор хранилища Администратор объекта хранения Создатель объектов хранения

Сценарий запуска виртуальной машины:

#! /bin/bash
gcsfuse --implicit-dirs --foreground --debug_gcs -o rw,allow_other my-bucket /gcs/my-bucket
chmod 777 /gcs/my-bucket

журналы gcsfuse:

"startup-script: {"timestamp":{"seconds":1718604762,"nanos":135066298},"severity":"INFO","message":"Start gcsfuse/2.1.0 (Go version go1.22.3) for app \"\" using mount point: /gcs/my-bucket\n"}"
startup-script: {"timestamp":{"seconds":1718604762,"nanos":135769488},"severity":"INFO","message":"GCSFuse mount command flags: {\"AppName\":\"\",\"Foreground\":true,\"ConfigFile\":\"\",\"MountOptions\":{\"allow_other\":\"\",\"ro\":\"\"},\"DirMode\":493,\"FileMode\":420,\"Uid\":-1,\"Gid\":-1,\"ImplicitDirs\":true,\"OnlyDir\":\"\",\"RenameDirLimit\":0,\"IgnoreInterrupts\":false,\"CustomEndpoint\":null,\"BillingProject\":\"\",\"KeyFile\":\"\",\"TokenUrl\":\"\",\"ReuseTokenFromUrl\":true,\"EgressBandwidthLimitBytesPerSecond\":-1,\"OpRateLimitHz\":-1,\"SequentialReadSizeMb\":200,\"AnonymousAccess\":false,\"MaxRetrySleep\":30000000000,\"StatCacheCapacity\":20460,\"StatCacheTTL\":60000000000,\"TypeCacheTTL\":60000000000,\"HttpClientTimeout\":0,\"MaxRetryDuration\":-1000000000,\"RetryMultiplier\":2,\"LocalFileCache\":false,\"TempDir\":\"\",\"ClientProtocol\":\"http1\",\"MaxConnsPerHost\":0,\"MaxIdleConnsPerHost\":100,\"EnableNonexistentTypeCache\":false,\"StackdriverExportInterval\":0,\"OtelCollectorAddress\":\"\",\"LogFile\":\"\",\"LogFormat\":\"json\",\"ExperimentalEnableJsonRead\":false,\"DebugFuseErrors\":true,\"DebugFuse\":false,\"DebugFS\":false,\"DebugGCS\":true,\"DebugHTTP\":false,\"DebugInvariants\":false,\"DebugMutex\":false}"}
startup-script: {"timestamp":{"seconds":1718604762,"nanos":135881882},"severity":"INFO","message":"GCSFuse mount config flags: {\"CreateEmptyFile\":false,\"Severity\":\"TRACE\",\"Format\":\"json\",\"FilePath\":\"\",\"LogRotateConfig\":{\"MaxFileSizeMB\":512,\"BackupFileCount\":10,\"Compress\":true},\"MaxSizeMB\":-1,\"CacheFileForRangeRead\":false,\"CacheDir\":\"\",\"TtlInSeconds\":-9223372036854775808,\"TypeCacheMaxSizeMB\":4,\"StatCacheMaxSizeMB\":-9223372036854775808,\"EnableEmptyManagedFolders\":false,\"ConnPoolSize\":1,\"AnonymousAccess\":false,\"EnableHNS\":false,\"IgnoreInterrupts\":false}"}
$ mount
my-bucket on /gcs/my-bucket type fuse.gcsfuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
my-bucket      1.0P     0  1.0P   0% /gcs/my-bucket
/gcs$ ls -al my-bucket/
ls: reading directory 'my-bucket/': Input/output error
total 0
/gcs$ $ ls -al my-bucket/prod
total 0
drwxr-xr-x 1 root root 0 Jun 17 07:25 folder1
drwxr-xr-x 1 root root 0 Jun 17 07:25 folder2


Steps Already Tried:
- Checking permissions on the Google Cloud Console.
- Remounting the bucket without the --implicit-dirs option (which resolves the reading issue but doesn't work for my use case).
- Verifying the service account has adequate permissions.


I'm looking for any advice on what might be causing this and how to resolve it so that I can use --implicit-dirs without losing read access. Thanks in advance for your help!
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
0
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть ли в сегменте каталог с пустым именем (в облачной консоли он отображается как «/»)? GCSFuse не поддерживает каталоги с пустым именем в пути (т. е. объекты с двойной косой чертой). Например:

gsutil cp <file-name>  gs://<bucket-name>//<file-name>

создаст пустой каталог в ведре, и это приведет к ошибке ввода/вывода этого типа при выполнении ls в смонтированном каталоге gcsfuse.

Удаление этого пустого каталога из корзины должно решить проблему.

Чтобы решить эту проблему, я переключился на прямой доступ к файлам с помощью пакета google-cloud-storage. Оказывается, в ведре был каталог с именем «/». Спасибо вам за вашу помощь.

user25600604 26.06.2024 08:47

Другие вопросы по теме

Как использовать минимальное количество веб-действий для отправки уведомлений в конвейере ADF?
Как обрабатывать CSV-файл с тем же именем столбца в Фабрике данных Azure?
Весенние облачные ворота. использование + (плюс) в значении параметра запроса
Развертывание облачной службы Azure (расширенная поддержка) с использованием AzureResourceGroupDeployment overrideParameters дает ошибку JSON
Функциональная платформа Google не может запускать функции структурированного облака локально
Добавьте виртуальные приложения и каталоги в мое веб-приложение Azure
Как ИСПОЛЬЗОВАТЬ ПРОСТРАНСТВО ИМЕН СЕТКИ СОБЫТИЙ MQTT HOSTNAME НА ESP32 ИЛИ ESP32 ОНЛАЙН, КАК WOKWI, для отправки таких данных, как температура или влажность, с помощью датчика DHT22
Облачная функция в Google Cloud работает при тестировании, но не после развертывания
Публикация Vue.js + ASP.NET Core в Azure
Разделение хранилища и вычислений в Snowflake