Очистити невикористаний простір з нулями (ext3, ext4)


73

Як очистити невикористаний простір нулями? (ext3, ext4)

Я шукаю щось розумніше

cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero

Як і FSArchiver шукає "використаний простір" і ігнорує невикористаний, але протилежний сайт.

Мета: Я хотів би стиснути зображення розділів, тому наповнювати невикористаний простір нулями настійно рекомендується.

Btw. Для btrfs: очищення невикористаного простору з нулями (btrfs)


4
Перевірте це: superuser.com/questions/19326 / ...
Mat

1
Можливі два варіанти відповіді. Чого ви намагаєтесь досягти? Або 1) безпека, забороняючи комусь читати ці дані, або 2) оптимізуючи стиснення всього розділу або [SSD-продуктивність] ( en.wikipedia.org/wiki/Trim_(computing) ?
Тотор

Відповіді:


77

Така утиліта є zerofree.

З його опису:

Zerofree знаходить нерозподілені, ненульові блоки в файловій системі ext2 або ext3 і заповнює їх нулями. Це корисно, якщо на пристрої, на якому знаходиться ця файлова система, є зображення диска. У цьому випадку, залежно від типу зображення диска, вторинна утиліта може мати змогу зменшити розмір зображення диска після запуску zerofree. Zerofree вимагає відключення файлової системи або встановлення лише для читання.

Звичайний спосіб досягти того ж результату (обнулення невикористаних блоків) - запустити "dd", створити файл, заповнений нулями, який займає весь вільний простір на диску, а потім видалити цей файл. Це має багато недоліків, які полегшує нуль:

  • це повільно
  • це змушує образ диска (тимчасово) зростати до максимальної міри
  • він (тимчасово) використовує весь вільний простір на диску, тому інші паралельні дії запису можуть не виконати.

Zerofree написано для запуску із систем GNU / Linux, встановлених як гостьові ОС у віртуальній машині. Якщо це не ваш випадок, вам майже точно не потрібен цей пакет.

ОНОВЛЕННЯ №1

Опис пакету .deb містить наступний параграф, який би означав, що це буде добре працювати і з ext4.

Опис: нульові вільні блоки з файлових систем ext2, ext3 та ext4 Zerofree знаходить неподілені блоки з вмістом ненульового значення у файловій системі ext2, ext3 або ext4 і заповнює їх нулями ...

Інші види використання

Інша програма, яка використовується у цій програмі, - стискати образи диска, які є резервною копією реального диска. Типовим прикладом цього є скидання SD-карти в BeagleBone або Raspberry Pi. Після того, як порожні пробіли будуть нульові, резервні зображення можна стиснути ефективніше.


1
Це офіційна сторінка інструменту intgat.tigress.co.uk/rmy/uml/index.html ? Ви вважаєте, що це безпечно у використанні з ext4?
Grzegorz Wierzowiecki

2
@GrzegorzWierzowiecki: так, це сторінка, але для debian та друзів вона вже знаходиться в репості. Я використовував на розділі ext4 на віртуальному диску, щоб послідовно зменшити зображення файлу диска, і не виникло проблем.
enzotib

1
Це не еквівалентно грубому ddметоду в початковому питанні, оскільки він не працює на змонтованих файлових системах.
jlh

сторінка zerofree розповідає про виправлення, яке дозволяє робити "файлову систему, встановлену з опцією zerofree", щоб вона завжди нульово видаляла видалені файли. для цього потрібна перекомпіляція ядра? чи є простіший спосіб здійснити те саме?
ендоліт

2
Будьте уважні - я втратив файлову систему ext4, використовуючи zerofreeAstralinux (на основі Debian)…
Hubbitus

33

Короткий огляд методів (як зазначено в цьому питанні та в інших місцях) для очищення невикористаного простору на ext2 / ext3 / ext4:

Нульовий невикористаний простір

Файлова система не змонтована

  • Якщо "диск" у вашій файловій системі увімкнено (наприклад, сучасний SSD, що підтримує TRIM, файл VM, формат якого підтримує розрідженість тощо), а ваше ядро ​​каже, що блоковий пристрій це розуміє, ви можете використовувати e2fsck -E discard src_fsдля викидання невикористаного простору (потрібні e2fsprogs 1.42.2 або вище).
  • Використання zerofree (наприклад zerofree src_fs) для явного запису нулів у невикористані блоки.
  • Використовуючи e2image -rap src_fs dest_fsлише для копіювання використовуваних блоків (нова файлова система повинна бути на іншому нульовому «диску», потрібні e2fsprogs 1,42,9 або новіші).

Файлова система змонтована

  • Якщо "диск" на вашій файловій системі увімкнено (наприклад, сучасний SSD, що підтримує TRIM, файл VM, формат якого підтримує розрідженість тощо), ваше ядро ​​говорить, що блоковий пристрій це розуміє, і нарешті, драйвер файлової системи ext підтримує його, яким ви можете користуватися. fstrim /mnt/fs/попросити файлову систему відкинути невикористаний простір.
  • Використання cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros( sfillіз захисту-видалення використовує цю техніку). Цей метод є неефективним, не рекомендується Тедом Ц'о (автор ext4), може не нульовувати певні речі і може сповільнити майбутні fsckс.

Відключення файлової системи дасть кращі результати, ніж її встановлення. Відмова, як правило, є найшвидшим методом, коли багато раніше використовуваного простору потрібно занулювати, але використання 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, щоб зробити ці кроки та інше за один раз.

 Джерела


15

sfillfrom safe-delete може виконати це та кілька інших пов'язаних з цим завдань.

напр

sfill -l -l -z /mnt/X

ОНОВЛЕННЯ №1

Існує дерево джерела, яке, схоже, використовується проектом ArchLinux на github, яке містить джерело, для sfillякого є інструмент, включений до пакету Secure-Delete.

Також є копія sfillчоловічої сторінки тут:


ця URL-адреса застаріла. поняття не має, де зараз знаходиться його домашня сторінка (або навіть якщо вона все ще є), але вона упакована для debian і ubuntu. ймовірно, інші дистрибутиви теж. якщо вам потрібен вихідний код, його можна знайти в архівах debian, якщо ви не можете його знайти більше ніде.
cas

Застаріла URL-адреса сторінки сторінки виправлена ​​зараз. Схоже, "Digipedia" - це вже не річ.
mwfearnley

8

Якщо у вас є e2fsprogs 1.42.9, тоді ви можете використовувати e2imageдля створення зображення розділу без вільного місця в першу чергу, щоб ви могли пропустити нульовий крок.


Я не зміг (легко) знайти будь-яку інформацію в Інтернеті про ці параметри, але вони дійсно наведені в примітках до випуску 1.42.9: e2fsprogs.sf.net/e2fsprogs-release.html#1.42.9
mwfearnley

1
Це цінний інструмент! Однак ваша відповідь буде краще, якби вона також пояснила, як її використовувати. Це e2image -ar /dev/foo1 | gzip > fs.img.gzабо якась його варіація. Включити, -fщоб використовувати його на встановленому фс.
marcelm

0

Можна використовувати sfill. Це краще рішення для тонких об'ємів.


Якщо ви хочете прокоментувати відповідь cas, зачекайте, поки у вас буде достатньо репутації для цього.
Антон

1
Я думаю, що відповідь має на увазі manpages.ubuntu.com/manpages/lucid/man1/sfill.1.html ... що є принаймні спробою відповіді. ("в Інтернеті" в цьому випадку означає "із встановленою файловою системою", а не "в Інтернеті").
дероберт

0

якщо ви не хочете вдаватися до додаткових інструментів, цей спосіб повинен бути швидшим, ніж cat /dev/zero > /mnt/fs/zeros:

dd if=/dev/zero of="/mnt/fs/filler" bs=10485760
dd if=/dev/zero of="/mnt/fs/filler1" bs=1
rm /mnt/fs/filler
rm /mnt/fs/filler1

Чому це було б швидше, ніж cat? (Ні, аргумент розміру блоку ddне допомагає)
marcelm


2
Так, але це не ddшвидко. Насправді це, мабуть, catшвидше. Розмір блоку важливий лише для мінімізації накладних витрат системних викликів та оптимізації використання кешу CPU. За допомогою накладних системних викликів ви входите в область зменшення віддачі. Кеш починає боліти вище, скажімо, 1MiB. А під час роботи на реальних дисках ви все одно пов'язані з входом / виводом, і справа в основному суперечлива. Спробуйте самостійно його порівняльний аналіз.
marcelm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.