Cloud Storage FUSE

Questa pagina fornisce una panoramica di Cloud Storage FUSE, un adattatore FUSE che consente di montare e accedere ai bucket Cloud Storage come file system locali, in modo che le applicazioni possano leggere e scrivere oggetti nel bucket utilizzando la semantica standard del file system. Cloud Storage FUSE è un prodotto open source supportato da Google.

Consulta la documentazione seguente per istruzioni su come utilizzare Cloud Storage FUSE:

Questa documentazione riflette sempre la versione più recente di Cloud Storage FUSE. Per maggiori dettagli sulla versione più recente, consulta Release di Cloud Storage FUSE su GitHub.

Come funziona Cloud Storage FUSE

Cloud Storage FUSE utilizza le API di FUSE e Cloud Storage per esporre in modo trasparente i bucket come cartelle montate localmente sul file system.

Cloud Storage FUSE traduce i nomi di archiviazione degli oggetti in un file e un sistema di directory, interpretando il carattere della barra ("/") nei nomi degli oggetti come un separatore di directory, in modo che gli oggetti con lo stesso prefisso comune vengano trattati come file nella stessa directory. Le applicazioni possono interagire con il bucket montato come un file system, offrendo uno spazio di archiviazione dei file praticamente illimitato in esecuzione nel cloud. Cloud Storage FUSE può essere eseguito ovunque con connettività a Cloud Storage, compresi Google Kubernetes Engine, VM di Compute Engine o sistemi on-premise.

Cloud Storage FUSE è ideale per i casi d'uso in cui Cloud Storage ha le giuste caratteristiche di prestazioni e scalabilità per un'applicazione che richiede la semantica del file system. Ad esempio, Cloud Storage FUSE è utile per i progetti di machine learning (ML) perché consente di archiviare dati, modelli, checkpoint e log direttamente in Cloud Storage. Per ulteriori informazioni, consulta Cloud Storage FUSE per carichi di lavoro ML.

Cloud Storage FUSE è integrato con altri servizi Google Cloud. Ad esempio, il driver CSI di Cloud Storage FUSE consente di utilizzare l'API Google Kubernetes Engine (GKE) per consumare i bucket come volumi, in modo da poter leggere e scrivere in Cloud Storage dall'interno dei pod Kubernetes. Per saperne di più su altre integrazioni, consulta Integrazioni.

Limitazioni

Sebbene Cloud Storage FUSE abbia un'interfaccia per il file system, non è come un file system NFS o CIFS nel backend. Inoltre, Cloud Storage FUSE non è conforme a POSIX. Per un prodotto file system POSIX in Google Cloud, consulta Filestore.

Quando utilizzi Cloud Storage FUSE, presta attenzione alle sue limitazioni e alla sua semantica, che sono diverse da quelle dei file system POSIX. Cloud Storage FUSE deve essere usato solo entro le sue funzionalità.

Limitazioni e differenze rispetto ai file system POSIX

Nell'elenco seguente sono descritte le limitazioni di Cloud Storage FUSE:

  • Metadati: Cloud Storage FUSE non trasferisce i metadati degli oggetti durante il caricamento dei file su Cloud Storage, ad eccezione delle destinazioni Mtime e per i link simbolici. Ciò significa che non puoi impostare metadati degli oggetti quando carichi i file utilizzando Cloud Storage FUSE. Se devi conservare i metadati degli oggetti, valuta la possibilità di caricare i file utilizzando Google Cloud CLI, l'API JSON o la console Google Cloud.
  • Contemporaneità: Cloud Storage FUSE non fornisce il controllo della contemporaneità per più scritture nello stesso file. Quando più scritture tentano di sostituire un file, l'ultima vince e tutte le scritture precedenti vanno perse. Non sono previsti unione, controllo della versione o notifica all'utente relativa alla sovrascrittura successiva.
  • Collegamento: Cloud Storage FUSE non supporta i link reali.
  • Blocco dei file e applicazione di patch ai file: Cloud Storage FUSE non supporta il blocco o l'applicazione di patch ai file. Pertanto, non devi archiviare i repository di sistema per il controllo della versione nei punti di montaggio di Cloud Storage FUSE, poiché i sistemi di controllo della versione si basano sul blocco e sull'applicazione di patch dei file. Inoltre, non dovresti utilizzare Cloud Storage FUSE in sostituzione del filer.
  • Semantica: la semantica in Cloud Storage FUSE è diversa dalla semantica in un file system convenzionale. Ad esempio, metadati come l'ora dell'ultimo accesso non sono supportati e alcune operazioni sui metadati, come la ridenominazione delle directory, non sono atomiche. Per un elenco delle differenze tra la semantica di Cloud Storage FUSE e la semantica convenzionale del file system, consulta la sezione Semantica nella documentazione GitHub di Cloud Storage FUSE.
  • Carichi di lavoro che eseguono l'applicazione di patch ai file (o la sovrascrittura): Cloud Storage FUSE può scrivere interi oggetti alla volta in Cloud Storage e non fornisce un meccanismo per l'applicazione di patch. Se provi ad applicare la patch a un file, Cloud Storage FUSE ricaricherà l'intero file. L'unica eccezione a questo comportamento è che puoi aggiungere contenuti alla fine di un file di dimensioni superiori a 2 MB, dove Cloud Storage FUSE ricaricherà solo i contenuti aggiunti.
  • Accesso: l'autorizzazione per i file è regolata dalle autorizzazioni di Cloud Storage. Controllo dell'accesso di tipo POSIX non funziona.
  • Prestazioni: Cloud Storage FUSE ha una latenza molto più elevata rispetto a un file system locale e, di conseguenza, non deve essere utilizzato come backend per l'archiviazione di un database. La velocità effettiva potrebbe essere ridotta durante la lettura o la scrittura di un file di piccole dimensioni alla volta. L'utilizzo di file più grandi o il trasferimento di più file contemporaneamente consente di aumentare la velocità effettiva.
  • Disponibilità: a volte possono verificarsi errori temporanei quando utilizzi Cloud Storage FUSE per accedere a Cloud Storage. Ti consigliamo di riprovare a eseguire le operazioni non riuscite utilizzando le strategie di nuovo tentativo.
  • Controllo delle versioni degli oggetti: Cloud Storage FUSE non supporta formalmente l'utilizzo con bucket in cui è abilitato il controllo delle versioni degli oggetti. Il tentativo di utilizzare Cloud Storage FUSE con bucket in cui è abilitato il controllo delle versioni degli oggetti può produrre comportamenti imprevedibili.
  • Transcodifica dei file: oggetti con content-encoding: gzip nei metadati. Gli oggetti di questo tipo in una directory montata su Cloud Storage FUSE non vengono sottoposti a transcodifica decompressiva. Invece, l'oggetto rimane compresso nello stesso modo in cui viene archiviato nel bucket.
    Ad esempio, un file di 1000 byte, caricato in un bucket utilizzando il comando gcloud storage cp con il flag --gzip-local, potrebbe diventare di 60 byte (le dimensioni compresse effettive dipendono dai contenuti e dall'implementazione di gzip utilizzata da gcloud CLI) come oggetto Cloud Storage. Se il bucket viene montato utilizzando gcsfuse e il file corrispondente viene elencato o letto dalla directory di montaggio, le sue dimensioni vengono restituite come 60 byte e i contenuti sono una versione compressa del contenuto originale di 1000 byte.
    A differenza di un download con gcloud storage cp gs://bucket/path /local/path che viene sottoposto a transcodifica decompressa, nel comando gcloud i contenuti vengono decompressi automaticamente durante il download e vengono pubblicati i contenuti originali non compressi.
    Nota: il tentativo di utilizzare Cloud Storage FUSE per modificare o modificare gli oggetti con content-encoding: gzip può produrre comportamenti imprevedibili. Questo perché Cloud Storage FUSE carica il contenuto dell'oggetto così com'è (senza comprimerlo) conservando content-encoding: gzip e, se il contenuto non è compresso con gzip correttamente, altri client potrebbe non riuscire a leggerlo dal server da parte di altri client, ad esempio gcloud CLI. Questo perché altri client utilizzano la transcodifica decompressa durante la lettura e l'operazione non riesce a causa di contenuti gzip errati.
  • Criteri di conservazione: Cloud Storage FUSE non supporta la scrittura nei bucket con un criterio di conservazione. Se tenti di scrivere in un bucket con un criterio di conservazione, le scritture non andranno a buon fine.

    Cloud Storage FUSE supporta la lettura di oggetti dai bucket con un criterio di conservazione, ma il bucket deve essere montato come Read-Only passando il flag -o RO durante il montaggio del bucket.

  • Archiviazione locale: gli oggetti nuovi o modificati vengono archiviati nella loro interezza in un file temporaneo locale finché non vengono chiusi o sincronizzati. Quando lavori con file di grandi dimensioni, assicurati di disporre di una capacità di archiviazione locale sufficiente per le copie temporanee dei file, in particolare se stai lavorando con istanze di Compute Engine. Per ulteriori informazioni, consulta il documento README nella documentazione di GitHub di Cloud Storage FUSE.
  • Directory: Cloud Storage opera con uno spazio dei nomi flat. Per impostazione predefinita, solo le directory definite in modo esplicito (ovvero che esistono come oggetti in Cloud Storage) possono essere visualizzate nel file system montato. Le directory implicite (ovvero che sono solo parti del percorso di altri file o directory) non vengono visualizzate per impostazione predefinita. Se hai file con un percorso che contiene una directory implicita, il file non viene visualizzato nella struttura generale delle directory, poiché la directory implicita che li contiene non viene visualizzata. Tuttavia, puoi utilizzare un flag per modificare questo comportamento. Per ulteriori informazioni, consulta il flag --implicit-dirs nella documentazione relativa all'interfaccia a riga di comando di Cloud Storage FUSE.

    Cloud Storage FUSE non supporta la ridenominazione delle directory. Non è possibile eseguire la ridenominazione di una directory a livello atomico in Cloud Storage. La ridenominazione di una directory comporta invece la copia di un oggetto con un nuovo nome e l'eliminazione dell'oggetto originale.

  • Limiti per gli handle dei file: per impostazione predefinita, il kernel Linux consente un massimo di 1024 handle di file aperti. Cloud Storage FUSE non deve essere utilizzato come server che gestisce connessioni parallele simultanee da client esterni, poiché ciò potrebbe superare il numero massimo di handle di file aperti. Alcuni casi d'uso comuni per evitare sono i contenuti della pubblicazione web da un montaggio di Cloud Storage FUSE, l'esposizione di un montaggio di Cloud Storage FUSE come spazio di Network Attached Storage (NAS) tramite protocolli di condivisione file (ad esempio NFS o SMB) e l'hosting di un server FTP (File Transfer Protocol) supportato da un montaggio di Cloud Storage FUSE.

Framework, sistemi operativi e architetture

Cloud Storage FUSE è stato convalidato con i seguenti framework:

  • TensorFlow V2.x

  • TensorFlow V1.x

  • PyTorch V2.x

  • PyTorch V1.x

  • JAX 0.4.x

Cloud Storage FUSE supporta le architetture e i sistemi operativi seguenti:

  • Ubuntu 18.04 o versioni successive

  • Debian 10 o versioni successive

  • CentOS 7.9 o versioni successive

  • RHEL 7.9 o versioni successive

  • x86_64

  • ARM64

Richiedere assistenza

Puoi ricevere assistenza, inviare domande generali e richiedere nuove funzionalità utilizzando uno dei canali di assistenza ufficiali di Google Cloud. Puoi anche ricevere assistenza inviando una segnalazione in GitHub.

Per soluzioni a problemi comuni, consulta la sezione Risoluzione dei problemi nella documentazione di GitHub di Cloud Storage FUSE.

Prezzi di Cloud Storage FUSE

Cloud Storage FUSE è disponibile senza costi, ma l'archiviazione, i metadati e l'I/O di rete che genera da e verso Cloud Storage vengono addebitati come qualsiasi altra interfaccia di Cloud Storage. In altre parole, tutti i trasferimenti di dati e le operazioni eseguite da Cloud Storage FUSE vengono mappati ai trasferimenti e alle operazioni di Cloud Storage e vengono addebitati di conseguenza. Per ulteriori informazioni sulle operazioni comuni di Cloud Storage FUSE e sulla loro mappatura alle operazioni di Cloud Storage, consulta la mappatura delle operazioni.

Per evitare sorprese, devi stimare come l'utilizzo di Cloud Storage FUSE si traduce in addebiti di Cloud Storage. Ad esempio, se utilizzi Cloud Storage FUSE per archiviare i file di log, puoi incorrere in addebiti rapidi se i log vengono eliminati in modo aggressivo su centinaia o migliaia di macchine contemporaneamente.

Consulta i prezzi di Cloud Storage per informazioni su addebiti come archiviazione, utilizzo della rete e operazioni.

Mappa delle operazioni di Cloud Storage FUSE alle operazioni di Cloud Storage

Quando esegui un'operazione utilizzando Cloud Storage FUSE, esegui anche le operazioni di Cloud Storage associate all'operazione Cloud Storage FUSE. La seguente tabella descrive i comandi comuni di Cloud Storage FUSE e le relative operazioni dell'API JSON Cloud Storage associate. Puoi visualizzare le informazioni sulle operazioni di Cloud Storage FUSE utilizzando il flag --debug_gcs.

Comando Operazioni delle API JSON
gcsfuse --debug_gcs example-bucket mp Objects.list (per verificare le credenziali)
cd mp n/d
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"), per creare un oggetto vuoto

Objects.insert("subdir/local.txt"), alla chiusura dopo la scrittura

rm -rf subdir

Objects.list("subdir")

Objects.list("subdir/")

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

Objects.list("subdir/")

Objects.delete("subdir/")

Problemi noti

Per un elenco dei problemi noti di Cloud Storage FUSE, consulta GitHub.

Passaggi successivi