Cloud Storage FUSE

En esta página, se proporciona una descripción general de Cloud Storage FUSE, un adaptador FUSE que te permite activar y acceder a los buckets de Cloud Storage como sistemas de archivos locales para que las aplicaciones puedan leer y escribir objetos en tu bucket con la semántica del sistema de archivos estándar. Cloud Storage FUSE es un producto de código abierto compatible con Google.

Consulta la siguiente documentación para obtener instrucciones sobre cómo usar Cloud Storage FUSE:

Esta documentación siempre refleja la versión más reciente de Cloud Storage FUSE. Para obtener más detalles sobre la última versión, consulta Versiones de Cloud Storage FUSE en GitHub.

Cómo funciona Cloud Storage FUSE

Cloud Storage FUSE usa las APIs de FUSE y Cloud Storage para exponer los buckets como carpetas activadas de forma local en tu sistema de archivos.

Cloud Storage FUSE funciona con la traducción de nombres de almacenamiento de objetos en un archivo y sistema de directorio y a través de la interpretación del carácter (“/”) en nombres de objetos como un separador de directorio para que los objetos con el mismo prefijo se traten como archivos en el mismo directorio. Las aplicaciones pueden interactuar con el bucket activado como un sistema de archivo y proporcionar almacenamiento de archivos sin límite y virtual que se ejecute en la nube. Cloud Storage FUSE se puede ejecutar desde cualquier lugar con conectividad a Cloud Storage, como Google Kubernetes Engine, las VM de Compute Engine o los sistemas locales.

Cloud Storage FUSE es ideal para casos de uso en los que Cloud Storage tiene las características de escalabilidad y rendimiento correctas para una aplicación que requiere una semántica del sistema de archivos. Por ejemplo, Cloud Storage FUSE es útil para proyectos de aprendizaje automático (AA), ya que proporciona una forma de almacenar datos, modelos, puntos de control y registros de forma directa en Cloud Storage. Si deseas obtener más información, consulta Cloud Storage FUSE para cargas de trabajo del AA.

Cloud Storage FUSE está integrado en otros servicios de Google Cloud. Por ejemplo, el controlador CSI de Cloud Storage FUSE te permite usar la API de Google Kubernetes Engine (GKE) para consumir buckets como volúmenes, de modo que puedas leer y escribir. Cloud Storage desde tus pods de Kubernetes. Para obtener más información acerca de otras integraciones, consulta Integraciones.

Limitaciones

Aunque Cloud Storage FUSE tenga una interfaz de sistema de archivos, no es como un sistema de archivos NFS o CIFS en el backend. Además, Cloud Storage FUSE no cumple con POSIX. Para obtener un producto del sistema de archivos POSIX en Google Cloud, consulta Filestore.

Cuando uses Cloud Storage FUSE, ten en cuenta sus limitaciones y su semántica, que son diferentes de las de los sistemas de archivos POSIX. Solo se debe usar Cloud Storage FUSE dentro de sus capacidades.

Limitaciones y diferencias con los sistemas de archivos POSIX

En la siguiente lista, se describen las limitaciones de Cloud Storage FUSE:

  • Metadatos: Cloud Storage FUSE no transfiere metadatos de objetos cuando se suben archivos a Cloud Storage, excepto los objetivos de mtime y symlink. Esto significa que no puedes establecer metadatos de objetos cuando subes archivos con Cloud Storage FUSE. Si necesitas conservar metadatos de objetos, considera subir archivos con Google Cloud CLI, la API de JSON o la consola de Google Cloud.
  • Simultaneidad: Cloud Storage FUSE no proporciona control de simultaneidad para escrituras múltiples en el mismo archivo. Cuando varias escrituras intentan reemplazar un archivo, la última escritura gana y todas las escrituras anteriores se pierden. No hay combinación, control de versión ni notificación de usuario del reemplazo posterior.
  • Vínculos: Cloud Storage FUSE no es compatible con vínculos duros.
  • Bloqueo de archivos y aplicación de parches de archivos: Cloud Storage FUSE no es compatible con el bloqueo de archivos ni la aplicación de parches a archivos. Por lo tanto, no debes almacenar repositorios de sistemas de control de versión en los puntos de activación de Cloud Storage FUSE, ya que los sistemas de control de versión dependen del bloqueo y la aplicación de parches de archivos. Además, no debes usar Cloud Storage FUSE como reemplazo de servidores de archivos.
  • Semántica: la semántica en Cloud Storage FUSE es diferente de la semántica en un sistema de archivos tradicional. Por ejemplo, los metadatos, como la hora del último acceso, no son compatibles y algunas operaciones de metadatos, como cambiar el nombre de un directorio, no son atómicas. Para obtener una lista de las diferencias entre la semántica de Cloud Storage FUSE y la semántica tradicional del sistema de archivos, consulta Semántica en la documentación de GitHub de Cloud Storage FUSE.
  • Cargas de trabajo que aplican parches de archivos (o lo reemplazan): Cloud Storage FUSE solo puede escribir objetos completos a la vez en Cloud Storage y no proporciona un mecanismo para la aplicación de parches. Si intentas aplicar un parche a un archivo, Cloud Storage FUSE volverá a subir el archivo completo. La única excepción a este comportamiento es que puedes agregar contenido al final de un archivo de 2 MB o más, en el que Cloud Storage FUSE solo volverá a subir el contenido agregado.
  • Acceso: La autorización de los archivos está regido por los permisos de Cloud Storage. El control de acceso estilo POSIX no funciona.
  • Rendimiento: Cloud Storage FUSE tiene una latencia más alta que un sistema de archivos local y, por lo tanto, no debe usarse como backend para almacenar una base de datos. La capacidad de procesamiento se puede reducir cuando se lee o escribe un archivo pequeño a la vez. El uso de archivos más grandes o la transferencia de muchos archivos a la vez ayudará a aumentar la capacidad de procesamiento.
  • Disponibilidad: Los errores transitorios a veces pueden ocurrir cuando usas Cloud Storage FUSE para acceder a Cloud Storage. Se recomienda que vuelvas a intentar realizar las operaciones con errores a través de las estrategias de reintento.
  • Control de versiones de objetos: Cloud Storage FUSE no es compatible de manera formal con los buckets que tienen habilitado el control de versiones de objetos. Intentar usar Cloud Storage FUSE con depósitos que tienen habilitado el control de versiones de objetos puede producir un comportamiento impredecible.
  • Transcodificación de archivos: Objetos con content-encoding: gzip en metadatos: Cualquier objeto de ese tipo en un directorio activado por Cloud Storage FUSE no se somete a transcodificación descompresiva. En cambio, el objeto permanece comprimido de la misma manera que se almacena en el bucket.
    Por ejemplo, un archivo de 1,000 bytes, que se sube a un bucket a través del comando gcloud storage cp con la marca --gzip-local, podría convertirse en 60 bytes (el tamaño comprimido real depende del contenido y la implementación de gzip que usa gcloud CLI) como un objeto de Cloud Storage. Si el bucket se activa con gcsfuse y el archivo correspondiente aparece en la lista o se lee desde el directorio de activación, su tamaño se muestra como 60 bytes y su contenido es una versión comprimida del contenido original de 1,000 bytes.
    Esto contrasta con una descarga a través de gcloud storage cp gs://bucket/path /local/path, que se somete a una transcodificación descompresiva: en el comando gcloud, el contenido se descomprime de forma automática durante la descarga y se entrega el contenido original sin comprimir.
    Nota: Si intentas usar Cloud Storage FUSE para editar o modificar objetos con content-encoding: gzip, se puede producir un comportamiento impredecible. Esto se debe a que Cloud Storage FUSE sube el contenido del objeto tal como está (sin comprimirlo) mientras lo retiene content-encoding: gzip y, si este contenido no está comprimido en gzip de forma correcta, podría fallar cuando otros clientes, como gcloud CLI, lo lean desde el servidor. Esto se debe a que otros clientes usan la transcodificación descompresiva durante la lectura y falla para el contenido gzip incorrecto.
  • Políticas de retención: Cloud Storage FUSE no admite la escritura en depósitos con una política de retención. Si intentas escribir en un bucket con una política de retención, las operaciones de escritura fallarán.

    Cloud Storage FUSE admite la lectura de objetos de buckets con una política de retención, pero el bucket debe activarse como Read-Only si pasas la marca -o RO durante la activación del bucket.

  • Almacenamiento local: los objetos nuevos o modificados se almacenarán en su totalidad en un archivo temporal local hasta que se cierren o se sincronicen. Cuando trabajes con archivos grandes, asegúrate de que tienes la capacidad suficiente de almacenamiento local para las copias temporales de los archivos, en particular si trabajas con instancias de Google Compute Engine. Para obtener más información, consulta el archivo README en la documentación de GitHub de Cloud Storage FUSE.
  • Directorios: Cloud Storage opera con un espacio de nombres fijo. De forma predeterminada, solo los directorios que están definidos de manera explícita (lo que significa que existen como objetos en Cloud Storage) pueden aparecer en el sistema de archivos activado. Los directorios implícitos (los que son solo parte del nombre de ruta de otros archivos o directorios) no aparecen de forma predeterminada. Si tienes archivos con un nombre de ruta de acceso que contiene un directorio implícito, el archivo no aparece en el árbol de directorios general, ya que no aparece el directorio implícito que los contiene. Sin embargo, puedes usar una marca para cambiar este comportamiento. Si deseas obtener más información, consulta Archivos y directorios en la documentación de GitHub de Cloud Storage FUSE.

    Cloud Storage FUSE no admite el cambio de nombre de directorios. No se puede realizar un cambio de nombre de directorio de forma atómica en Cloud Storage. En su lugar, cambiar el nombre de un directorio implica copiar un objeto con un nombre nuevo y borrar el objeto original.

  • Límites de manejo de archivos: De forma predeterminada, el kernel de Linux permite un máximo de 1,024 manejos de archivos abiertos. No se debe usar Cloud Storage FUSE como un servidor que controle conexiones paralelas simultáneas de clientes externos, ya que esto podría exceder la cantidad máxima de controladores de archivos abiertos. Algunos casos de uso comunes que se deben evitar son el contenido de entrega web de una activación de Cloud Storage FUSE, que expone una activación de Cloud Storage FUSE como almacenamiento conectado a la red (NAS) mediante protocolos de archivos compartidos (por ejemplo, NFS o SMB) y alojar un servidor de protocolo de transferencia de archivos (FTP) respaldado por una activación de Cloud Storage FUSE.

Frameworks, sistemas operativos y arquitecturas

Cloud Storage FUSE se validó con los siguientes frameworks:

  • TensorFlow V2.x

  • TensorFlow V1.x

  • PyTorch V2.x

  • PyTorch V1.x

  • JAX 0.4.x

Cloud Storage FUSE es compatible con los siguientes sistemas operativos y arquitecturas:

  • Ubuntu 18.04 o una versión posterior

  • Debian 10 o una versión posterior

  • CentOS 7.9 o una versión posterior

  • RHEL 7.9 o una versión posterior

  • x86_64

  • ARM64

Obtener asistencia

Puedes obtener asistencia, enviar preguntas generales y solicitar funciones nuevas a través de uno de los canales de asistencia oficiales de Google Cloud. También puedes obtener asistencia si presentas problemas en GitHub.

Para obtener soluciones para problemas comunes, consulta Solución de problemas en la documentación de GitHub de Cloud Storage FUSE.

Precios de Cloud Storage FUSE

Cloud Storage FUSE está disponible de forma gratuita, pero el almacenamiento, los metadatos y la E/S de la red que genera desde Cloud Storage y hacia él tienen cargos como cualquier otra interfaz de Cloud Storage. En otras palabras, todas las operaciones y transferencias de datos realizadas por Cloud Storage FUSE se asignan a las operaciones y transferencias de Cloud Storage y se cobran según eso. Para obtener más información de las operaciones comunes de Cloud Storage FUSE y cómo se asignan a las operaciones de Cloud Storage, consulta la asignación de operaciones.

Para evitar sorpresas, debes estimar cómo se traduce tu uso de Cloud Storage FUSE en cargos de Cloud Storage. Por ejemplo, si usas Cloud Storage FUSE para almacenar archivos de registro, puedes generar cargos muy rápido si los registros se pasan a cientos o miles de máquinas al mismo tiempo.

Consulta los precios de Cloud Storage para obtener información sobre cargos como almacenamiento, uso de red y operaciones.

Asignación de operaciones de Cloud Storage FUSE a operaciones de Cloud Storage

Cuando realizas una operación con Cloud Storage FUSE, también realizas las operaciones de Cloud Storage asociadas con la operación de Cloud Storage FUSE. En la siguiente tabla, se describen los comandos comunes de Cloud Storage FUSE y sus operaciones asociadas de la API de JSON de Cloud Storage. Puedes mostrar información de las operaciones de Cloud Storage FUSE con la marca --debug_gcs.

Comando Operaciones de la API de JSON
gcsfuse --debug_gcs example-bucket mp Lista de objetos (para verificar las credenciales)
cd mp No corresponde
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"), para crear un objeto vacío

Objects.insert("subdir/local.txt"), cuando se cierra después de escribir

rm -rf subdir

Objects.list("subdir")

Objects.list("subdir/")

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

Objects.list("subdir/")

Objects.delete("subdir/")

Problemas conocidos

Para obtener una lista de problemas conocidos en Cloud Storage FUSE, consulta GitHub.

Próximos pasos