¿Cómo cambiar el tamaño de un archivo sin desasignar bloques en Linux?

¿Cómo cambiar el tamaño de un archivo sin desasignar bloques en Linux?

Soy consciente de que fallocate --keep-sizese puede utilizar para ampliar un archivo sin tocar su tamaño lógico. ¿Hay alguna manera de hacer lo contrario, es decir, reducir el tamaño lógico de un archivo sin tocar sus bloques?

Respuesta1

Si no desea eliminar bloques pero desea cambiar el tamaño lógico del archivo, probablemente desee eliminar un agujero al final del archivo.

truncate / ftruncate puede hacer esto, pero no reconoce los agujeros, por lo que tendría que detectar por separado el agujero al final del archivo y luego usar ftruncate para reducir el archivo.

Tenga en cuenta que ftruncate es solo la mitad de una solución y, si bien la mayoría de los Unix modernos admiten la detección de agujeros en los archivos, no existe una forma portátil de hacerlo, ya que todos lo hacen de manera ligeramente diferente.

Además, asegúrese de comprender qué está haciendo fallocate. Rellena huecos y les asigna bloques de datos. Entonces, una vez que haya ejecutado fallocate en un archivo, todo su tamaño lógico estará representado por bloques de datos físicos y no podrá cambiar su tamaño sin liberar algunos de esos bloques de datos.

información relacionada