Как я могу создать сценарий для тестирования Zerofree?

Что я делаю

Я изучаю инструмент разрежения изображений файловой системы: Zerofree .

Я предполагаю, что шаги по созданию сценария должны быть следующими:

  1. создать образ файловой системы.
  2. используйте какой-нибудь способ заполнить его.
  3. очистите его, но фактическое использование пространства не изменится, что означает, что в этой файловой системе существует нераспределенное или неиспользуемое пространство.
  4. при работе с нулевым режимом фактическое использование пространства уменьшается.

Но после запуска Zerofree в fs фактическое использование пространства не уменьшается.

Есть ли что-то, что я неправильно понимаю? Как я могу сделать это правильно?

Любое предложение полезно!

Запись того, что я пробовал

      # root❯❯❯ dd if=/dev/zero of=fs.image bs=1M seek=1024 count=0
0+0 records in
0+0 records out
0 bytes copied, 4.8167e-05 s, 0.0 kB/s
# root❯❯❯ du -h fs.image
0 fs.image
# root❯❯❯ mkdir /mnt/test
# root❯❯❯ mkfs.ext3 fs.image
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: d65a10e7-4620-433b-a135-386d65acf414
Superblock backups stored on blocks:
  32768, 98304, 163840, 229376

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

# root❯❯❯ du -h fs.image
33M     fs.image
# root❯❯❯ mount fs.image /mnt/test/
# root❯❯❯ yes abcdefghijklmnopqrstuvwxyz0123456789 > /mnt/test/largefile
yes: standard output: No space left on device
# root❯❯❯ du -h fs.image
1005M   fs.image
# root❯❯❯ df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/loop0                  976M  976M     0 100% /mnt/test
# root❯❯❯ rm /mnt/test/largefile
rm: remove regular file '/mnt/test/largefile'? y
# root@oe ~/../project-zerofree ❯❯❯ du -h fs.image
1007M   fs.image
# root❯❯❯ df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/loop0                  976M  1.3M  924M   1% /mnt/test
# root❯❯❯ umount /mnt/test
# root❯❯❯ du -h fs.image
1007M   fs.image
# root❯❯❯ zerofree -v fs.image
249255/249500/262144
# root❯❯❯ du -h fs.image
1007M   fs.image

2 ответа

Спасибо за ответ Мокубая , который помог мне найти правильный способ тестирования Zerofree.

1. Сделать образ файловой системы

      # root❯❯❯ dd if=/dev/zero of=test.img bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.49236 s, 2.2 GB/s
# root❯❯❯ mkfs.ext4 test.img
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: 4423921e-cb7c-4850-b29f-45625ce8e86f
Superblock backups stored on blocks:
  32768, 98304, 163840, 229376

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
# root❯❯❯ du -h test.img
33M     test.img

2. Заполните его

      # root❯❯❯ mount test.img /mnt/test/
# root❯❯❯ yes abcdefghijklmnopqrstuvwxyz0123456789 > /mnt/test/largefile
yes: standard output: No space left on device
# root❯❯❯ du -h test.img
990M    test.img

3. Создайте неиспользуемое пространство

      # root❯❯ rm -f /mnt/test/largefile
# root❯❯❯ umount /mnt/test
# root❯❯❯ du -h test.img
990M    test.img

4. Копирование с разреженной опцией

      # root❯❯❯ cp --sparse=always test.img sparsed.img
# root❯❯❯ du -h *
959M    sparsed.img
990M    test.img

Есть небольшой эффект.

5. Запуск без нуля

      # root❯❯❯ zerofree -v test.img
245055/249189/262144
# root❯❯❯ cp --sparse=always test.img zerofreed_and_sparsed.img
# root❯❯❯ du -h *
959M    sparsed.img
990M    test.img
1.1M    zerofreed_and_sparsed.img

Очевидный эффект!

Zerofreeделает не что иное, как запись нулей в свободные области изображения. Само по себе это никак не повлияет на размер изображения на диске.

Со страницы руководства Zerofree

Zerofree находит нераспределенные блоки с содержимым, отличным от нуля, в файловой системе ext2, ext3 или ext4 (например, /dev/hda1) и заполняет их нулями (или другим октетом по вашему выбору).

И

В зависимости от типа образа диска дополнительная утилита может уменьшить размер образа диска после запуска Zerofree.

zerofreeсама по себе не является командой для преобразования изображений в разреженные; в лучшем случае она может облегчить преобразование таких изображений путем эффективного стирания зон, не содержащих реальных данных, но она не может сделать это сама по себе.

Одним из способов его использования является стирание области диска перед сжатием с помощью инструментов виртуальной машины аналогично sdeleteинструмент для Windows

Другие вопросы по тегам