Todos los productos
Search
Centro de documentos

Object Storage Service:Configurar un directorio temporal local para admitir escrituras aleatorias

Última actualización: Sep 03, 2026

A partir de la versión 2.0.9, ossfs admite escrituras aleatorias mediante un directorio temporal local. Al configurar la opción de montaje --temp_dir, ossfs 2.0 almacena temporalmente los datos escritos en un disco local. Esto otorga al punto de montaje semántica completa de escritura aleatoria POSIX, que incluye escrituras en posiciones arbitrarias, truncamiento a cualquier tamaño y lectura durante la escritura. Este tema describe los principios de funcionamiento, los métodos de configuración, las restricciones de uso y las recomendaciones para las escrituras aleatorias.

Contexto

Una vez creado un objeto en OSS, no es posible modificarlo parcialmente; cualquier cambio de contenido requiere sobrescribir el objeto completo. En el modo predeterminado de ossfs 2.0, la ruta de escritura utiliza carga por streaming: los datos se cargan a OSS en partes secuenciales conforme se escriben, lo cual presenta las siguientes limitaciones:

  • Solo se admiten escrituras secuenciales. No se admiten llamadas a pwrite en posiciones más allá del final del archivo.

  • truncate solo admite truncar a 0. Truncar a cualquier otro tamaño distinto de cero devuelve ENOTSUP.

  • No es posible leer un archivo mientras se escribe (antes de cerrarlo). Intentarlo devuelve EBUSY.

Escenarios como la ejecución de código de agentes de IA, la edición de scripts en el mismo lugar y los resultados intermedios de cómputo científico suelen depender de la semántica de escritura aleatoria. La función de escritura aleatoria de ossfs 2.0 almacena temporalmente los datos escritos en un directorio temporal local y, combinada con la gestión de fragmentos y la carga incremental, implementa escrituras aleatorias sobre object storage.

El modo de escritura aleatoria de ossfs 2.0 tiene las siguientes características:

  • Semántica completa de escritura aleatoria POSIX: Admite pwrite en posiciones arbitrarias, O_APPEND y truncate a cualquier tamaño (aumento o reducción).

  • Lectura durante la escritura: Es posible leer un archivo mientras se escribe. Las partes modificadas se leen desde el área de almacenamiento temporal local, y las partes no modificadas se leen directamente desde OSS.

  • Carga incremental: Al vaciar el búfer o cerrar el archivo, solo se cargan desde el disco local los bloques de datos modificados. Las partes no modificadas se gestionan mediante copia del lado del servidor en OSS, sin consumo de E/S local ni ancho de banda de carga.

  • Protección del espacio en disco: Un presupuesto global integrado de espacio en disco devuelve ENOSPC para las escrituras cuando queda poco espacio en el disco de almacenamiento temporal. Puede reservar un umbral de espacio libre al montar para evitar que se llene el disco del sistema.

Nota

El directorio temporal local sirve únicamente para la ruta de escritura. Es independiente de la caché de datos local (--disk_data_cache_dir, que es una caché de lectura). Puede habilitar ambas funciones simultáneamente (usando directorios diferentes) sin que exista interferencia entre ellas.

De forma predeterminada, ossfs 1.0 usa el directorio /tmp como directorio temporal local. Para mantener la ruta consistente con la predeterminada de ossfs 1.0, configure --temp_dir=/tmp.

Importante

Tras habilitar las escrituras aleatorias, el rendimiento de escritura queda limitado por el rendimiento de lectura y escritura del disco donde reside el directorio temporal local. En escenarios que implican escrituras secuenciales masivas, como la copia de archivos grandes, el rendimiento es muy inferior al del modo predeterminado. Habilite esta función solo cuando su carga de trabajo requiera realmente semántica de escritura aleatoria.

Principios de funcionamiento

Almacenamiento temporal local y carga combinada

Al habilitar las escrituras aleatorias, ossfs 2.0 crea un archivo de almacenamiento temporal en el directorio temporal local para cada archivo sujeto a escritura aleatoria. Esto guarda las modificaciones más recientes de forma local con una granularidad fija de bloque de datos (fragmento):

  • Los datos escritos se depositan directamente en el archivo de almacenamiento temporal local. Si una escritura solo se superpone parcialmente a un bloque de datos que ya existe en la nube, ossfs primero recupera ese bloque desde OSS para garantizar que los datos almacenados temporalmente estén completos.

  • Al ejecutar fsync o close, las modificaciones almacenadas temporalmente se combinan automáticamente y se cargan junto con los datos en la nube: las partes modificadas se cargan desde el disco local, y las partes no modificadas se gestionan mediante copia del lado del servidor en OSS, sin retransmitir todo el archivo ni consumir ancho de banda de lectura del disco local.

  • Tras una carga correcta, el espacio en disco de almacenamiento temporal se libera automáticamente.

Lectura durante la escritura

También es posible leer un archivo mientras se escribe: las partes modificadas se leen desde el área de almacenamiento temporal local, y las partes no modificadas se leen directamente desde OSS.

Protección del espacio en disco

Al montar, ossfs comprueba si el espacio libre en el disco donde reside el directorio temporal cumple con el requisito reservado y rechaza el montaje si no es así. Si el espacio de disco reservado es insuficiente, las escrituras devuelven ENOSPC en lugar de que el proceso falle debido a un disco lleno.

Métodos de configuración

Elemento de configuración

Obligatorio

Descripción

Valor predeterminado

temp_dir

No

Ruta del directorio temporal local. Debe ser una ruta absoluta. Establecer un valor no vacío habilita las escrituras aleatorias. Déjelo vacío para deshabilitar esta función.

Vacío

temp_dir_free_bytes

No

Espacio mínimo libre reservado en el disco donde reside el directorio temporal, en bytes (admite unidades como K, M y G). ossfs2 no usará este espacio reservado para datos temporales: cuando el espacio libre cae por debajo de este umbral, las nuevas escrituras devuelven ENOSPC, dejando un margen de seguridad para otras cargas de trabajo en el mismo disco. Si el espacio libre ya está por debajo de este valor al momento del montaje, este fallará. Valor mínimo: 64 MiB.

1 GiB

random_write_max_file_size

No

Tamaño lógico máximo de un solo archivo en modo de escritura aleatoria, en bytes (admite unidades como K, M y G). Las escrituras o truncamientos que excedan este límite devuelven EFBIG. El límite físico superior es la capacidad de carga multiparte de OSS (10,000 partes × 5 GiB, aproximadamente 48.8 TiB).

100 GiB

Restricciones:

  • Si el directorio al que apunta --temp_dir no existe, se crea automáticamente. Se recomienda usar una partición o disco independiente para evitar competir por espacio con el disco del sistema u otras cargas de trabajo.

  • Los datos de los archivos en escritura se almacenan en el directorio temporal local. Si el disco carece de capacidad, las escrituras devuelven ENOSPC. El espacio libre restante menos el espacio reservado por temp_dir_free_bytes se denomina espacio de disco escribible. ossfs2 solo usa esta porción de espacio para almacenar los datos que se están escribiendo. El espacio de disco escribible debe ser mayor que el tamaño total de todos los archivos que se escriben simultáneamente (en el peor de los casos, un archivo completo podría escribirse localmente).

  • Cuando varias instancias de ossfs2 se montan en la misma máquina, pueden compartir el mismo directorio temporal, ya que los nombres de los archivos temporales no entran en conflicto. Sin embargo, dado que múltiples instancias competirán por el espacio y la E/S del disco, se recomienda usar directorios independientes.

  • --temp_dir y --enable_appendable_object son mutuamente excluyentes y no pueden habilitarse al mismo tiempo.

Ejemplo de comando de montaje:

ossfs2 mount /mnt/oss/ \
  --oss_bucket <your-bucket> \
  --oss_endpoint <your-endpoint> \
  --oss_access_key_id <ak> \
  --oss_access_key_secret <sk> \
  --temp_dir /mnt/disk/ossfs2/temp \
  --temp_dir_free_bytes 1G

Requisitos del entorno

Parámetro

Requisito

Tipo de disco del directorio temporal

Se recomienda disco efímero elástico, NVMe local o ESSD. El throughput de escritura del disco afecta directamente la latencia de escritura aleatoria y la velocidad de carga.

Espacio disponible en disco

No menor que temp_dir_free_bytes. Además, el espacio de disco escribible (consulte las restricciones anteriores) debe poder alojar los datos de los archivos que se escriben simultáneamente.

Efectos de la función

Comparación de las capacidades de escritura antes y después de habilitar --temp_dir:

Operación

Modo predeterminado

Modo de escritura aleatoria

Escritura por anexión secuencial

Compatible

Compatible

pwrite en una posición arbitraria (más allá del final del archivo)

No compatible

Compatible

truncate a 0

Compatible

Compatible

truncate a cualquier tamaño (aumento o reducción)

No compatible (ENOTSUP)

Compatible

Escritura O_APPEND en un archivo existente

Compatible

Compatible

Lectura de un archivo mientras se escribe

No compatible (EBUSY)

Compatible

Varios identificadores escribiendo en el mismo archivo simultáneamente

No compatible

Compatible

Semántica de durabilidad:

  • De forma predeterminada, el modo de escritura aleatoria sigue la semántica de fsync: fsync desencadena una carga combinada de las modificaciones locales con los datos en la nube. Una devolución exitosa significa que los datos se han persistido en OSS. Los datos restantes también se cargan al cerrar el archivo.

  • Un fallo de carga se devuelve a la aplicación como un error, y la aplicación puede reintentar mediante fsync. Si la carga falla definitivamente y se cierra el archivo, los datos no persistidos se pierden, y el contenido del archivo revierte a la última versión cargada correctamente en el extremo remoto.

  • Si el proceso termina de forma anómala, los datos temporales no cargados se pierden, pero el objeto en OSS permanece en el estado de su última carga exitosa. No se genera ningún objeto dañado.

Recomendaciones de uso

Las escrituras aleatorias basadas en un directorio temporal local son adecuadas para escenarios que requieren semántica de escritura similar a la de un sistema de archivos local en un punto de montaje de OSS.

Escenarios adecuados para habilitar escrituras aleatorias:

Escenario

Recomendación de uso

Ejecución de código de agentes de IA / entornos sandbox (los agentes e intérpretes de código realizan lecturas y escrituras arbitrarias, así como ediciones en el mismo lugar, sobre archivos)

Habilite las escrituras aleatorias. Se recomienda usar un disco independiente de alto rendimiento para el directorio temporal y reservar espacio de disco escribible según el tamaño total de los archivos que se escriben simultáneamente.

Archivos de resultados intermedios de aplicaciones de cómputo científico o simulación

Habilite las escrituras aleatorias. Planifique el espacio de disco escribible según el tamaño total de los archivos que se escriben simultáneamente.

Escenarios donde no se recomienda habilitar escrituras aleatorias:

Escenario

Recomendación de uso

Copia de archivos grandes (escrituras masivas al punto de montaje usando cp, rsync y herramientas similares)

En este escenario, el rendimiento de escritura está limitado por el disco local y es muy inferior al del modo predeterminado. Use el modo de carga por streaming predeterminado.

Escrituras por anexión puramente secuenciales (escritura de registros por streaming)

La ruta de carga por streaming predeterminada tiene menor sobrecarga, por lo que habilitar escrituras aleatorias es innecesario. Si requiere lectura durante la escritura, considere usar --enable_appendable_object en su lugar.

Recomendaciones de presupuesto de disco:

  • Mantenga el directorio temporal separado del disco del sistema para evitar que los datos temporales llenen el disco del sistema y afecten la estabilidad del host. Si la máquina tiene un solo disco, se recomienda establecer temp_dir_free_bytes en un valor mayor (por ejemplo, 10G) para reservar suficiente espacio libre para el sistema.

  • El espacio de disco escribible (consulte las restricciones anteriores) debe ser mayor que el tamaño total de los archivos que se escriben simultáneamente.

  • Para un solo archivo mayor a 100 GiB, además de aumentar explícitamente --random_write_max_file_size (por ejemplo, --random_write_max_file_size=500G), debe asegurarse de que el espacio de disco escribible supere el tamaño de dicho archivo.