¿Cómo llenar la parte no utilizada de la imagen del sistema de archivos btrfs con ceros?
Esto es para Linux invitado en VMware Workstation.
Probé vmware-toolbox-cmd disk shrink /
en la que btrfs montar como compress=zstd,noatime,nodiratime,space_cache,ssd,discard
. Sin embargo, la imagen acaba de expandirse al tamaño máximo y no se puede encoger.
Parece que los btrfs comprimidos no escriben el archivo cero como ceros.
Encuentro que hay algunos parches ioctl en relleno cero en https://lwn.net/ml/linux-btrfs/aed736d257f7e91cf3b0cf4d1fdfc247212d8bf7.1524233244.git.dsterba@suse.com/.
¿Cómo puedo llamar BTRFS_CLEAR_OP_ZERO_NOUNMAP
desde Linux invitado?
Respuestas
Hasta donde yo sé, no hay una forma directa de llenar con ceros el espacio no utilizado de un sistema de archivos Btrfs. Sin embargo, se puede lograr lo mismo con sólo rellenar el sistema de archivos con cero archivos llenos y luego borrarlos, sfill es una manera de hacerlo: sfill -llz \dev\X
. Sfill es parte del kit de herramientas de eliminación segura:https://github.com/GIJack/secure_delete.
Pero como notó, eso no funcionará con la compresión del sistema de archivos habilitada, porque no hay nada más fácil de comprimir que un montón de ceros. Tendría que volver a montar el sistema de archivos sin la opción de montaje compress = zstd para que funcione. O configure el indicador de no compresión en la raíz de su sistema de archivos Btrfs con btrfs property set <object> compression ""
, si su sistema está en subvolúmenes Btrfs, primero debe montar la raíz del sistema de archivos. Actualmente, esa bandera solo se puede eliminar con chattr -c
.
Las imágenes de VMWare no se encogen automáticamente, pero hay formas de hacerlo.