Как заполнить неиспользуемую часть образа файловой системы btrfs нулями?
Это для гостевой Linux под VMware Workstation.
Я пробовал использовать vmware-toolbox-cmd disk shrink /
btrfs, который монтируется как compress=zstd,noatime,nodiratime,space_cache,ssd,discard
. Однако изображение просто увеличено до максимального размера и не может быть уменьшено.
Кажется, что сжатый btrfs не будет записывать нулевой файл как нули.
Я обнаружил, что есть несколько патчей ioctl для нулевого заполнения в https://lwn.net/ml/linux-btrfs/aed736d257f7e91cf3b0cf4d1fdfc247212d8bf7.1524233244.git.dsterba@suse.com/.
Как я могу позвонить BTRFS_CLEAR_OP_ZERO_NOUNMAP
из гостевого Linux?
Ответы
Насколько мне известно, нет прямого способа заполнить неиспользуемое пространство файловой системы Btrfs нулями. Тем не менее, вы можете достичь того же, просто заполнив файловую систему с нуля , заполненными файлы , а затем удалить их, sfill это один из способов сделать это: sfill -llz \dev\X
. Sfill является частью инструментария безопасного удаления:https://github.com/GIJack/secure_delete.
Но, как вы заметили, это не будет работать с включенным сжатием файловой системы, потому что нет ничего проще, чем сжать кучу нулей. Чтобы заставить ее работать, вам придется перемонтировать файловую систему без опции монтирования compress = zstd. Или установите флаг отсутствия сжатия для корня вашей файловой системы Btrfs с помощью btrfs property set <object> compression ""
, если ваша система находится в подтомах Btrfs, вам сначала нужно смонтировать корень файловой системы. В настоящее время этот флаг можно удалить только с помощью chattr -c
.
Образы VMWare не сжимаются автоматически, но есть способы уменьшить их.