Я запускаю сервер виртуализации на основе KVM (а именно, Proxmox), где некоторые машины на базе Debian работают в виртуальных машинах KVM. Proxmox может создавать резервные копии виртуальных машин, а также сжимать образы дисков виртуальных машин.
Как мы понимаем, размеры резервных копий со временем увеличиваются, поскольку больше данных, хранящихся на каждом диске виртуальной машины, и большее количество «чистых» блоков диска виртуальных машин становятся «грязными» (то есть содержит остатки старых файлов). Таким образом, даже если я удалю все файлы на таком виртуальном диске с помощью rm -rf
it, на самом деле резервная копия будет того же размера, так как это выиграет ' t очистить все блоки виртуального диска.
Я могу «очистить» виртуальный диск, выполнив что-то вроде dd if = / dev / zero of = / BIG.txt
, а затем rm - f /BIG.txt
- таким образом я создаю большой файл, полный нулей, который будет использовать все дисковое пространство, и после его удаления его бывшие блоки будут содержать нули. Обратной стороной является то, что на мгновение диск заполняется, что влияет на каждую программу, которая хочет что-либо записать.
Но, может быть, есть другой способ очистить неиспользуемые блоки диска нулями, чтобы резервное копирование сжимало такой диск с большей скоростью? Некоторые программы для Windows предлагают варианты «очистки неиспользуемого дискового пространства» (например, CCleaner), но мне это нужно для Linux.
Последние версии libvirt / kvm поддерживают параметр discard
vdisc (только для типа виртуальных дисков SCSI). Если этот параметр включен, вы можете выполнить fstrim /
в гостевой файловой системе, и неиспользуемые блоки будут немедленно отброшены образом виртуальной машины хоста, сжимая / уменьшая его с помощью перфорации.
См. здесь (раздел драйвера, выполните поиск по запросу 'discard') и здесь для получения дополнительной информации.
Если вы не можете использовать метод обрезки / сброса, вы можете продолжить использовать текущий метод обнуления ( dd
из / dev / zero
), с поворотом: выпустить два dd
проходов, каждый из которых занимает лишь немногим более половины свободного места на диске. с помощью fsync; Команда rm BIG.txt
. Этого должно быть достаточно, чтобы восстановить почти все свободное пространство, не заполняя его сразу.