Come riempire una parte inutilizzata dell'immagine del filesystem btrfs con zeri?

Aug 20 2020

Questo è per Linux guest sotto VMware Workstation.

Ho provato vmware-toolbox-cmd disk shrink /su btrfs che montava come compress=zstd,noatime,nodiratime,space_cache,ssd,discard. Tuttavia, l'immagine si è appena espansa fino alla dimensione massima e non può essere ridotta.

Sembra che btrfs compresso non scriverà zero file come zeri.

Trovo che ci siano alcune patch ioctl su riempimento zero a https://lwn.net/ml/linux-btrfs/aed736d257f7e91cf3b0cf4d1fdfc247212d8bf7.1524233244.git.dsterba@suse.com/.

Come posso chiamare BTRFS_CLEAR_OP_ZERO_NOUNMAPda guest Linux?

Risposte

1 damian101 Sep 08 2020 at 21:24

Per quanto ne so non esiste un modo diretto per riempire lo spazio inutilizzato di un filesystem Btrfs con zeri. Tuttavia, è possibile ottenere la stessa cosa, semplicemente compilando il filesystem con zero file pieni e quindi eliminarli, sfill è un modo per farlo: sfill -llz \dev\X. Sfill fa parte del toolkit per l'eliminazione sicura:https://github.com/GIJack/secure_delete.

Ma come hai notato, non funzionerà con la compressione del filesystem abilitata, perché non c'è niente di più facile da comprimere di un mucchio di zeri. Dovresti rimontare il filesystem senza l'opzione di montaggio compress = zstd per farlo funzionare. Oppure imposta il flag di nessuna compressione alla radice del tuo file system Btrfs con btrfs property set <object> compression "", se il tuo sistema è su volumi secondari Btrfs devi prima montare la radice del file system. Quel flag può attualmente essere rimosso solo con chattr -c.

Le immagini VMWare non si riducono automaticamente, ma ci sono modi per ridurle.