¿Cómo borrar el espacio no utilizado con ceros? (ext3, ext4)
Estoy buscando algo más inteligente que
cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero
Al igual que FSArchiver está buscando "espacio usado" e ignora el sitio no utilizado, pero opuesto.
Propósito: Me gustaría comprimir las imágenes de partición, por lo que se recomienda llenar el espacio no utilizado con ceros.
Por cierto. Para btrfs: borre el espacio no utilizado con ceros (btrfs)
filesystems
partition
backup
storage
compression
Grzegorz Wierzowiecki
fuente
fuente
Respuestas:
Tal utilidad es
zerofree
.De su descripción:
ACTUALIZACIÓN # 1
La descripción del paquete .deb contiene el siguiente párrafo ahora, lo que implicaría que esto también funcionará bien con ext4.
Otros usos
Otra aplicación de esta utilidad es comprimir imágenes de disco que son una copia de seguridad de un disco real. Un ejemplo típico de esto es el volcado de la tarjeta SD en un BeagleBone o un Raspberry Pi. Una vez que los espacios vacíos se han puesto a cero, las imágenes de respaldo se pueden comprimir de manera más eficiente.
fuente
dd
método crudo en la pregunta original, ya que no funciona en sistemas de archivos montados.zerofree
Astralinux (basado en Debian) ...Resumen de los métodos (como se menciona en esta pregunta y en otras partes) para limpiar el espacio no utilizado en ext2 / ext3 / ext4:
Poner a cero el espacio no utilizado
El sistema de archivos no está montado
e2fsck -E discard src_fs
para descartar el espacio no utilizado (requiere e2fsprogs 1.42.2 o superior).zerofree src_fs
. Ej. ) Para escribir explícitamente ceros sobre bloques no utilizados.e2image -rap src_fs dest_fs
solo para copiar bloques en uso (el nuevo sistema de archivos debe estar en un "disco" puesto a cero, requiere e2fsprogs 1.42.9 o superior).El sistema de archivos está montado
fstrim /mnt/fs/
pedirle al sistema de archivos que descarte el espacio no utilizado.cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros
(sfill
desde secure-delete usa esta técnica). Este método es ineficiente, no recomendado por Ted Ts'o (autor de ext4), puede no poner a cero ciertas cosas y puede ralentizar el futurofsck
.Tener el sistema de archivos desmontado dará mejores resultados que tenerlo montado. El descarte tiende a ser el método más rápido cuando se necesita poner a cero una gran cantidad de espacio utilizado anteriormente, pero usarlo
zerofree
después del proceso de descarte a veces puede poner un poco más a cero (dependiendo de cómo se implemente el descarte en el "disco").Hacer el archivo de imagen más pequeño
La imagen está en un formato VM dedicado
Necesitará usar una herramienta de imagen de disco adecuada (como
qemu-img convert src_image dst_image
) para permitir que se recupere el espacio a cero y para que el archivo que representa la imagen se vuelva más pequeño.La imagen es un archivo sin procesar
Se puede usar una de las siguientes técnicas para hacer que el archivo sea escaso (por lo que las ejecuciones de cero dejan de ocupar espacio):
cp --sparse=always src_image dst_image
.fallocate -d src_image
(requiere util-linux v2.25 o superior).En estos días, podría ser más fácil usar una herramienta como virt-sparsify para realizar estos pasos y más de una vez.
Fuentes
zerofree
fuente
sfill
from secure-delete puede hacer esto y muchos otros trabajos relacionados.p.ej
ACTUALIZACIÓN # 1
Hay un árbol fuente que parece ser usado por el proyecto ArchLinux en github que contiene la fuente para la
sfill
cual se incluye una herramienta en el paquete Secure-Delete.También hay una copia de
sfill
la página de manual de 's aquí:fuente
Si tiene e2fsprogs 1.42.9, puede usar
e2image
para crear la imagen de partición sin el espacio libre en primer lugar, para que pueda omitir el paso a cero.fuente
e2image -ar /dev/foo1 | gzip > fs.img.gz
, o alguna variación de los mismos. Incluye-f
para usarlo en un fs montado.Puedes usar
sfill
. Es una mejor solución para volúmenes delgados.fuente
Si no desea recurrir a herramientas adicionales, este método debería ser más rápido que
cat /dev/zero > /mnt/fs/zeros
:fuente
cat
? (No, el argumento de tamaño de bloque dedd
no ayuda)dd
más rápido. De hecho, probablemente hacecat
más rápido. El tamaño del bloque solo es importante para minimizar la sobrecarga de las llamadas al sistema y optimizar el uso de la memoria caché de la CPU. Con la sobrecarga de syscall, ingresa al área de rendimientos decrecientes. La caché comienza a doler arriba, digamos, 1MiB. Y cuando se opera en discos reales, está vinculado a E / S de todos modos y el punto es principalmente discutible. Intenta compararlo tú mismo.