Автоматическая очистка неиспользуемого пространства на дисках в виртуальной машине

Я запускаю сервер виртуализации на основе KVM (а именно, Proxmox), где некоторые машины на базе Debian работают в виртуальных машинах KVM. Proxmox может создавать резервные копии виртуальных машин, а также сжимать образы дисков виртуальных машин.

Как мы понимаем, размеры резервных копий со временем увеличиваются, поскольку больше данных, хранящихся на каждом диске виртуальной машины, и большее количество «чистых» блоков диска виртуальных машин становятся «грязными» (то есть содержит остатки старых файлов). Таким образом, даже если я удалю все файлы на таком виртуальном диске с помощью rm -rf it, на самом деле резервная копия будет того же размера, так как это выиграет ' t очистить все блоки виртуального диска.

Я могу «очистить» виртуальный диск, выполнив что-то вроде dd if = / dev / zero of = / BIG.txt , а затем rm - f /BIG.txt - таким образом я создаю большой файл, полный нулей, который будет использовать все дисковое пространство, и после его удаления его бывшие блоки будут содержать нули. Обратной стороной является то, что на мгновение диск заполняется, что влияет на каждую программу, которая хочет что-либо записать.

Но, может быть, есть другой способ очистить неиспользуемые блоки диска нулями, чтобы резервное копирование сжимало такой диск с большей скоростью? Некоторые программы для Windows предлагают варианты «очистки неиспользуемого дискового пространства» (например, CCleaner), но мне это нужно для Linux.

2
задан 30 June 2016 в 13:23
1 ответ

Последние версии libvirt / kvm поддерживают параметр discard vdisc (только для типа виртуальных дисков SCSI). Если этот параметр включен, вы можете выполнить fstrim / в гостевой файловой системе, и неиспользуемые блоки будут немедленно отброшены образом виртуальной машины хоста, сжимая / уменьшая его с помощью перфорации.

См. здесь (раздел драйвера, выполните поиск по запросу 'discard') и здесь для получения дополнительной информации.

Если вы не можете использовать метод обрезки / сброса, вы можете продолжить использовать текущий метод обнуления ( dd из / dev / zero ), с поворотом: выпустить два dd проходов, каждый из которых занимает лишь немногим более половины свободного места на диске. с помощью fsync; Команда rm BIG.txt . Этого должно быть достаточно, чтобы восстановить почти все свободное пространство, не заполняя его сразу.

2
ответ дан 3 December 2019 в 11:32

Теги

Похожие вопросы