Как очистить неиспользуемое пространство нулями? (Ext3, ext4)
Я ищу что-то умнее, чем
cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero
Например, FSArchiver ищет «использованное пространство» и игнорирует неиспользуемый, но противоположный сайт.
Цель: я бы хотел сжать образы разделов, поэтому настоятельно рекомендуется заполнять неиспользуемое пространство нулями.
Btw. Для btrfs: очистить неиспользуемое пространство с нулями (btrfs)
filesystems
partition
backup
storage
compression
Гжегож Вежовецкий
источник
источник
Ответы:
Такая утилита есть
zerofree
.Из его описания:
ОБНОВЛЕНИЕ № 1
Описание пакета .deb содержит следующий абзац, что подразумевает, что это будет работать и с ext4.
Другое использование
Еще одно приложение этой утилиты для сжатия образов дисков, которые являются резервной копией реального диска. Типичным примером этого является дамп SD-карты в BeagleBone или Raspberry Pi. После обнуления пустых пространств резервные образы можно сжимать более эффективно.
источник
dd
методу в первоначальном вопросе, поскольку он не работает на смонтированных файловых системах.zerofree
на Astralinux (на основе Debian)…Краткое описание методов (как упоминалось в этом и других местах) для очистки неиспользуемого пространства в ext2 / ext3 / ext4:
Обнуление неиспользуемого пространства
Файловая система не смонтирована
e2fsck -E discard src_fs
для удаления неиспользуемого пространства (требуется e2fsprogs) 1.42.2 или выше).zerofree src_fs
) для явной записи нулей в неиспользуемые блоки.e2image -rap src_fs dest_fs
для копирования только используемых блоков (новая файловая система должна находиться на обнуляемом в противном случае «диске», требуется e2fsprogs 1.42.9 или выше).Файловая система смонтирована
fstrim /mnt/fs/
попросить файловую систему выбросить неиспользуемое пространство.cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros
(sfill
из безопасного удаления использует эту технику). Этот метод неэффективен, не рекомендуется Тедом Цо (автором ext4), может не обнулять определенные вещи и может замедлять будущиеfsck
s.Отключение файловой системы даст лучшие результаты, чем ее монтирование. Отбрасывание, как правило, является самым быстрым методом, когда необходимо обнулить много ранее использованного пространства, но использование
zerofree
после процесса сброса может иногда обнулять немного больше (в зависимости от того, как сброс реализован на «диске»).Уменьшение размера файла изображения
Изображение в выделенном формате VM
Вам нужно будет использовать соответствующий инструмент для создания образа диска (например,
qemu-img convert src_image dst_image
), чтобы активировать обнуленное пространство и уменьшить размер файла, представляющего изображение.Изображение является необработанным файлом
Один из следующих методов может быть использован, чтобы сделать файл разреженным (поэтому прогоны с нулевой остановкой занимают место):
cp --sparse=always src_image dst_image
,fallocate -d src_image
(требуется util-linux v2.25 или выше).В наши дни может быть проще использовать такой инструмент, как virt-sparsify, чтобы выполнить эти шаги, и даже больше за один раз.
источники
zerofree
источник
sfill
Из безопасного удаления можно сделать это и несколько других связанных заданий.например
ОБНОВЛЕНИЕ № 1
Существует дерево исходного кода, которое, по-видимому, используется проектом ArchLinux на github и содержит источник, для
sfill
которого есть инструмент, включенный в пакет Secure-Delete.Также копия
sfill
man-страницы здесь:источник
Если у вас e2fsprogs 1.42.9, то вы можете использовать его
e2image
для создания образа раздела без свободного места, поэтому вы можете пропустить шаг обнуления.источник
e2image -ar /dev/foo1 | gzip > fs.img.gz
или какой-то другой вариант. Включите,-f
чтобы использовать его на смонтированном фс.Вы можете использовать
sfill
. Это лучшее решение для тонких объемов.источник
если вы не хотите прибегать к дополнительным инструментам, этот метод должен быть быстрее, чем
cat /dev/zero > /mnt/fs/zeros
:источник
cat
? (Нет, аргумент размера блокаdd
не помогает)dd
быстрее. На самом деле, это, вероятно, делаетcat
быстрее. Размер блока важен только для минимизации накладных расходов на системные вызовы и оптимизации использования кэша ЦП. С системным вызовом вы попадаете в область убывающей отдачи. Кеш начинает болеть выше, скажем, 1MiB. А при работе на реальных дисках, вы I / O связаны так или иначе , и точка в основном спорно. Попробуйте сами сравнить.