Cloud Storage FUSE

Cette page présente Cloud Storage FUSE, un adaptateur FUSE qui permet d'installer des buckets Cloud Storage en tant que systèmes de fichiers locaux et d'y accéder. Ainsi les applications peuvent lire et écrire des objets dans votre bucket à l'aide d'une sémantique standard de système de fichiers. Cloud Storage FUSE est un produit Open Source compatible avec Google.

Consultez la documentation suivante pour savoir comment utiliser Cloud Storage FUSE :

Cette documentation reflète toujours la dernière version de Cloud Storage FUSE. Pour en savoir plus sur la dernière version, consultez la page décrivant les versions de Cloud Storage FUSE sur GitHub.

Fonctionnement de Cloud Storage FUSE

Cloud Storage FUSE utilise les API FUSE et Cloud Storage pour exposer de manière transparente les buckets en tant que dossiers installés localement sur votre système de fichiers.

Cloud Storage FUSE convertit les noms de stockage d'objets en un système de fichiers et de répertoires, en interprétant le caractère de barre oblique ("/") dans les noms d'objet comme un séparateur de répertoires. Les objets partageant un préfixe commun sont ainsi traités comme des fichiers du même répertoire. Les applications peuvent interagir avec le bucket installé comme un système de fichiers, offrant ainsi un stockage de fichiers pratiquement illimité dans le cloud. Cloud Storage FUSE peut être exécuté n'importe où du moment que la connectivité à Cloud Storage est assurée, y compris sur Google Kubernetes Engine, sur des VM Compute Engine ou sur des systèmes sur site.

Cloud Storage FUSE est idéal pour les cas d'utilisation où Cloud Storage présente les caractéristiques de performances et d'évolutivité adéquates pour une application nécessitant une sémantique de système de fichiers. Par exemple, Cloud Storage FUSE est utile pour les projets de machine learning (ML), car il permet de stocker des données, des modèles, des points de contrôle et des journaux directement dans Cloud Storage. Pour plus d'informations, consultez la page Cloud Storage FUSE pour les charges de travail de ML.

Cloud Storage FUSE est intégré à d'autres services Google Cloud. Par exemple, le pilote CSI Cloud Storage FUSE vous permet d'utiliser l'API Google Kubernetes Engine (GKE) pour utiliser des buckets en tant que volumes, ce qui vous permet de lire et d'écrire dans Cloud Storage depuis vos pods Kubernetes. Pour en savoir plus sur les autres intégrations, consultez la page Intégrations.

Limites

Bien que Cloud Storage FUSE possède une interface de système de fichiers, il ne ressemble pas à un système de fichiers NFS ou CIFS sur le backend. De plus, Cloud Storage FUSE n'est pas compatible avec POSIX. Si vous utilisez un produit exploitant un système de fichiers POSIX dans Google Cloud, consultez la page Filestore.

Lorsque vous utilisez Cloud Storage FUSE, tenez compte de ses limites et de sa sémantique, qui sont différentes de celles des systèmes de fichiers POSIX. Cloud Storage FUSE ne doit être utilisé que dans les limites de ses capacités.

Limites et différences par rapport aux systèmes de fichiers POSIX

La liste suivante décrit les limites de Cloud Storage FUSE :

  • Métadonnées : Cloud Storage FUSE ne transfère pas les métadonnées d'objets lors de l'importation de fichiers dans Cloud Storage, à l'exception des cibles mtime et symlink. Cela signifie que vous ne pouvez pas définir de métadonnées d'objet lorsque vous importez des fichiers à l'aide de Cloud Storage FUSE. Si vous souhaitez conserver des métadonnées d'objet, envisagez d'importer les fichiers à l'aide de la Google Cloud CLI, de l'API JSON ou de la console Google Cloud.
  • Simultanéité : Cloud Storage FUSE ne permet pas de contrôler la simultanéité pour plusieurs écritures dans un même fichier. Lorsque plusieurs écritures tentent de remplacer un fichier, la dernière écriture l'emporte et toutes les écritures précédentes sont perdues. Il n'y a ni fusion, ni contrôle de version, ni notification de l'utilisateur en cas d'écrasement ultérieur.
  • Liaison : Cloud Storage FUSE n'est pas compatible avec les liens matériels.
  • Verrouillage de fichiers et correction de fichiers : Cloud Storage FUSE n'est pas compatible avec le verrouillage de fichiers ni l'application de correctifs. Par conséquent, vous ne devez pas stocker de dépôts du système de contrôle des versions dans les points d'installation de Cloud Storage FUSE, car les systèmes de contrôle des versions reposent sur le verrouillage de fichiers et l'application de correctifs. En outre, vous ne devez pas utiliser Cloud Storage FUSE comme remplacement de serveur de fichiers.
  • Sémantique : la sémantique dans Cloud Storage FUSE est différente de la sémantique dans un système de fichiers traditionnel. Par exemple, les métadonnées telles que l'heure du dernier accès ne sont pas compatibles, et certaines opérations de métadonnées telles que le changement de nom d'un répertoire ne sont pas atomiques. Pour obtenir la liste des différences entre la sémantique de Cloud Storage FUSE et la sémantique traditionnelle du système de fichiers, consultez la page Sémantique dans la documentation GitHub de Cloud Storage FUSE.
  • Charges de travail qui effectuent l'application de correction de fichiers (ou écrasent des fichiers en place) : Cloud Storage FUSE ne peut écrire que des objets entiers à la fois dans Cloud Storage et ne fournit pas de mécanisme pour appliquer des correctifs. Si vous essayez d'appliquer un correctif à un fichier, Cloud Storage FUSE réimportera l'intégralité du fichier. La seule exception à ce comportement est que vous pouvez ajouter du contenu à la fin d'un fichier de plus de 2 Mo, où Cloud Storage FUSE ne réimportera que le contenu ajouté.
  • Accès : l'accès aux fichiers est régi par les autorisations Cloud Storage. Le contrôle d'accès de style POSIX ne fonctionne pas.
  • Performances : Cloud Storage FUSE a une latence bien supérieure à celle d'un système de fichiers local et ne doit donc pas être utilisé comme backend pour le stockage d'une base de données. Le débit peut être réduit lors de la lecture ou de l'écriture d'un petit fichier à la fois. L'utilisation de fichiers plus volumineux ou le transfert de plusieurs fichiers simultanément contribueront à augmenter le débit.
  • Disponibilité : des erreurs transitoires peuvent parfois se produire lorsque vous utilisez Cloud Storage FUSE pour accéder à Cloud Storage. Il est recommandé d'effectuer de nouvelles tentatives sur les opérations ayant échoué à l'aide de stratégies de nouvelle tentative.
  • Gestion des versions des objets : Cloud Storage FUSE n'est pas officiellement compatible avec l'utilisation des buckets pour lesquels la gestion des versions d'objets est activée. Toute tentative d'utilisation de Cloud Storage FUSE avec des buckets pour lesquels la gestion des versions d'objets est activée peut produire un comportement imprévisible.
  • Transcodage de fichiers : objets avec content-encoding: gzip dans les métadonnées. Tout objet de ce type dans un répertoire installé sur Cloud Storage FUSE ne fait pas l'objet d'un transcodage par décompression. Au lieu de cela, l'objet reste compressé de la même manière qu'il est stocké dans le bucket.
    Par exemple, un fichier de 1 000 octets, importé dans un bucket à l'aide de la commande gcloud storage cp avec l'option --gzip-local, peut devenir 60 octets (la taille réelle compressée dépend du contenu et de la mise en œuvre gzip utilisée par la gcloud CLI) en tant qu'objet Cloud Storage. Si le bucket est installé à l'aide de gcsfuse et que le fichier correspondant est répertorié ou lu dans le répertoire d'installation, sa taille est renvoyée à 60 octets et son contenu est une version compressée du contenu de 1 000 octets d'origine.
    En revanche, ce processus n'a pas lieu dans un téléchargement utilisant gcloud storage cp gs://bucket/path /local/path qui fait l'objet d'un transcodage par décompression : dans la commande gcloud, le contenu est automatiquement décompressé pendant le téléchargement et le contenu d'origine non compressé est diffusé.
    Remarque : Toute tentative d'utilisation de Cloud Storage FUSE pour modifier des objets avec content-encoding: gzip peut produire un comportement imprévisible. En effet, Cloud Storage FUSE importe le contenu de l'objet tel quel (sans le compresser) tout en conservant content-encoding: gzip. Si ce contenu n'est pas correctement compressé au format gzip, il pourrait ne pas être lu depuis le serveur par d'autres clients tels que la gcloud CLI. En effet, d'autres clients utilisent le transcodage par décompression lors de la lecture. Cette opération échoue en cas de contenu gzip incorrect.
  • Règles de conservation : Cloud Storage FUSE n'est pas compatible avec l'écriture de buckets comportant une règle de conservation. Si vous tentez d'écrire des données dans un bucket comportant une règle de conservation, vos écritures échoueront.

    Cloud Storage FUSE accepte la lecture d'objets à partir de buckets comportant une règle de conservation, mais le bucket doit être installé en tant que Read-Only en transmettant l'option -o RO au moment de l'installation.

  • Stockage local : les nouveaux objets, ou les objets modifiés, sont stockés intégralement dans un fichier temporaire local jusqu'à ce qu'ils soient fermés ou synchronisés. Lorsque vous utilisez des fichiers volumineux, assurez-vous que vous disposez d'une capacité de stockage local suffisante pour les copies temporaires des fichiers, en particulier si vous utilisez des instances Compute Engine. Pour en savoir plus, consultez le fichier README de la documentation GitHub de Cloud Storage FUSE.
  • Répertoires : Cloud Storage fonctionne avec un espace de noms plat. Par défaut, seuls les répertoires définis explicitement (c'est-à-dire associés à des objets dans Cloud Storage) peuvent apparaître dans le système de fichiers installé. Les répertoires implicites (à savoir ceux qui ne sont que des parties du chemin d'autres fichiers ou répertoires) n'apparaissent pas par défaut. Si vous avez des fichiers avec un nom de chemin contenant un répertoire implicite, le fichier n'apparaît pas dans l'arborescence globale des répertoires, car le répertoire implicite qui les contient n'apparaît pas. Toutefois, vous pouvez utiliser une option pour modifier ce comportement. Pour en savoir plus, reportez-vous à l'option --implicit-dirs dans la documentation de la CLI Cloud Storage FUSE.

    Cloud Storage FUSE n'est pas compatible avec le changement de nom du répertoire. Il n'est pas possible de renommer un répertoire de manière atomique dans Cloud Storage. À la place, pour renommer un répertoire, il est nécessaire de copier un objet sous un nouveau nom et de supprimer l'objet d'origine.

  • Limites de gestion des fichiers : par défaut, le noyau Linux autorise un maximum de 1 024 commandes d'ouverture de fichier. Cloud Storage FUSE ne doit pas être utilisé comme serveur pour gérer les connexions parallèles simultanées de clients externes, car il peut dépasser le nombre maximal de commandes d'ouverture de fichier. Certains cas d'utilisation courants à éviter sont la diffusion de contenu Web à partir d'une installation Cloud Storage FUSE, l'exposition d'une installation Cloud Storage FUSE en tant que stockage en réseau (NAS) à l'aide de protocoles de partage de fichiers (par exemple, NFS ou SMB), et l'hébergement d'un serveur FTP (File transfer protocol) sauvegardé par une installation Cloud Storage FUSE.

Frameworks, systèmes d'exploitation et architectures

Cloud Storage FUSE a été validé avec les frameworks suivants :

  • TensorFlow V2.x

  • TensorFlow V1.x

  • PyTorch V2.x

  • PyTorch V1.x

  • JAX 0.4.x

Cloud Storage FUSE est compatible avec les systèmes d'exploitation et architectures suivants :

  • Ubuntu 18.04 ou version ultérieure

  • Debian 10 ou version ultérieure

  • CentOS 7.9 ou version ultérieure

  • RHEL 7.9 ou version ultérieure

  • x86_64

  • ARM64

Obtenir de l'aide

Vous pouvez obtenir de l'aide, envoyer des questions d'ordre général et demander de nouvelles fonctionnalités en utilisant l'un des canaux d'assistance officiels de Google Cloud. Vous pouvez également obtenir de l'aide en signalant les problèmes dans GitHub.

Pour obtenir des solutions aux problèmes courants, consultez la page Dépannage de la documentation GitHub de Cloud Storage FUSE.

Tarifs de Cloud Storage FUSE

Cloud Storage FUSE est disponible gratuitement. Toutefois, le stockage, les métadonnées et les E/S réseau qu'il génère vers et depuis Cloud Storage sont facturés comme toute autre interface Cloud Storage. En d'autres termes, l'ensemble des opérations et des transferts de données effectués par Cloud Storage FUSE correspondent à des transferts et des opérations Cloud Storage, et sont facturés en conséquence. Pour en savoir plus sur les opérations Cloud Storage FUSE courantes et leur correspondance avec les opérations Cloud Storage, consultez la section Correspondance des opérations.

Pour éviter les mauvaises surprises, il est recommandé d'estimer les frais Cloud Storage que votre utilisation de Cloud Storage FUSE va entraîner. Par exemple, si vous utilisez Cloud Storage FUSE pour stocker des fichiers journaux, des frais peuvent rapidement vous être facturés si les journaux sont vidés de manière agressive sur des centaines, voire des milliers de machines en même temps.

Pour en savoir plus sur les frais tels que le stockage, l'utilisation du réseau et les opérations, consultez la page Tarifs de Cloud Storage.

Correspondance des opérations Cloud Storage FUSE et Cloud Storage

Lorsque vous effectuez une opération à l'aide de Cloud Storage FUSE, vous effectuez également les opérations Cloud Storage associées à l'opération Cloud Storage FUSE. Le tableau suivant décrit les commandes Cloud Storage FUSE courantes et les opérations de l'API JSON Cloud Storage associées. Vous pouvez afficher des informations sur les opérations Cloud Storage FUSE à l'aide de l'option --debug_gcs.

Commande Opérations de l'API JSON
gcsfuse --debug_gcs example-bucket mp Objects.list (pour vérifier les identifiants)
cd mp n/a
ls mp Objects.list("")
mkdir subdir

Objects.get("subdir")

Objects.get("subdir/")

Objects.insert("subdir/")

cp ~/local.txt subdir/

Objects.get("subdir/local.txt")

Objects.get("subdir/local.txt/")

Objects.insert("subdir/local.txt"), pour créer un objet vide

Objects.insert("subdir/local.txt"), lors de la fermeture une fois l'écriture terminée

rm -rf subdir

Objects.list("subdir")

Objects.list("subdir/")

Objects.delete("subdir/local.txt")

Objects.list("subdir/")

Objects.delete("subdir/")

Problèmes connus

Pour obtenir la liste des problèmes connus dans Cloud Storage FUSE, rendez-vous sur GitHub.

Étapes suivantes