Назад | Перейти на главную страницу

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

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

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

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

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

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

Видеть Вот (раздел драйверов, ищите 'discard') и Вот Чтобы получить больше информации.

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