В VMware виртуальные диски (vmdk) бывают двух типов это pre-allocated и growable. Тип диска growable занимает объем физического диска по мере заполнения виртуального диска, т.е. виртуальный диск на 120 Гб, занято 10 Гб, размер файла *.vmdk соответственно 10 Гб. В случае освобождения пространства на виртуальном диске, физический размер диска *.vmdk не уменьшается. Для уменьшения диска необходимо выполнить операцию Defragment (дефрагментация) затем и Compact (сжатие). После этого размер диска *.vmdk будет соответствовать занимаемому пространству в виртуальном диске, но это так работает, если установлена гостевая-ОС Windows. В публикации рассматривается уменьшение размера виртуальной машины VMware в случае гостевой-ОС Linux и освобождение пространства на диске.
Постановка задачи
Уменьшить физический размер виртуального диска (vmdk) типа growable путем выполнения процедур соответствия фактическому занятому пространству в виртуальном диске. Для примера используется виртуальная машина VMWare VM-SoftEther-VPN-router работающая под ОС Ubuntu 22.04.2 LTS (Jammy Jellyfish), полученная в ходе создания VPN-маршрутизатора.
- Виртуальная машина соответствует версии VMware Workstation 17 Pro.
Заполнение свободного пространства виртуального диска нулями
При удалении информации с диска не происходит ее физическое удаление. На диске сектора данных, в которых размещался файл помечаются как свободные. Алгоритм сжатия диска VMware основан на проверке пространства нулями, таким образом, после удаления файла в виртуальной машине физически занимаемое пространство на диске не изменится. Для решения этой задачи выполняются две операции, это дефрагментация файловой системы в Ubuntu и заполнение оставшегося пространства на диске нулями. До выполнения процедуры сжатия физический размер диска *.vmdk ВМ VM-SoftEther-VPN-router равен 9,67 Гб при фактически занятом пространстве 6,8 Гб. Таким образом можно освободить 2,87 Гб.
Шаг 1 — Установка утилиты дефрагментации
Для дефрагментации диска используется утилита e4defrag входящая в пакет e2fsprogs , установим данный пакет:
$ sudo apt update $ sudo apt install -y e2fsprogs
Шаг 2 — Удаление временных и второстепенных файлов
Дальнейшая работа с ВМ VM-SoftEther-VPN-router не предусматривается, поэтому справочные файлы, кэш пакетов, и т.д. можно удалить. Для этого необходимо выполнить команду:
$ sudo apt-get clean autoclean -y \ && sudo apt-get autoremove -y \ && sudo rm -rf /var/lib/{apt,cache,log}/ \ && sudo rm -rf /var/log/* \ && sudo rm -rf /tmp/* /var/tmp/* \ && sudo rm -rf /usr/share/doc/ \ && sudo rm -rf /usr/share/man/ \ && sudo rm /var/lib/apt/lists/* -vf
Шаг 3 — Дефрагментация диска
Для дефрагментации диска воспользуемся утилитой e4defrag. Определим блочные устройства хранения данных командами:
$ sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL $ df -h
Результат выполнения:
root@ubuntu:~# sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL NAME FSTYPE SIZE MOUNTPOINT LABEL sda 120G ├─sda1 1M ├─sda2 ext4 2G /boot └─sda3 LVM2_member 118G └─ubuntu--vg-ubuntu--lv ext4 118G / sr0 1024M root@ubuntu:~# df -h Filesystem Size Used Avail Use% Mounted on tmpfs 193M 3.4M 190M 2% /run /dev/mapper/ubuntu--vg-ubuntu--lv 116G 6.3G 104G 6% / tmpfs 965M 0 965M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda2 2.0G 252M 1.6G 14% /boot overlay 116G 6.3G 104G 6% /var/lib/docker/overlay2/f932c60a4a27972023dbf3b6f0b23afcb802db8f7a989adc926f271e7996c981/merged tmpfs 193M 4.0K 193M 1% /run/user/0
Из полученного результата определим список устройств:
- /dev/sda1
- /dev/sda2
- /dev/sda3
- /dev/mapper/ubuntu—vg-ubuntu—lv
Где основные устройства представлены с префиксом /dev/sda*. Для дефрагментации доступны только те устройства, которые имеют точку монтирования, заголовок MOUNTPOINT и Mounted on. Основной диск в 118 Гб это устройство /dev/sda3 , для обращения к нему будем использовать путь /dev/mapper/ubuntu—vg-ubuntu—lv . Таким образом, получим итоговые блочные устройства для дефрагментации:
- /dev/sda2
- /dev/mapper/ubuntu—vg-ubuntu—lv
Выполним команду дефрагментации для каждого устройства:
$ sudo e4defrag /dev/sda2 $ sudo e4defrag /dev/mapper/ubuntu--vg-ubuntu--lv
Необходимо обратить внимание на то, что некоторые используемые файлы не будут дефрагментированы.
Шаг 4 — Заполнение диска нулями
Для заполнения диска нулями выполним команду:
$ dd if=/dev/zero of=wipefile bs=1024x1024 status=progress; rm wipefile
Если после выполнения команды на диске остался файл с названием wipefile, то удалите его командой rm wipefile .
Теперь необходимо выключить ВМ командой:
$ sudo shutdown now
Шаг 5 — Выполнение операции Defragment (дефрагментация) и Compact над диском
После выключения ВМ необходимо открыть настройки ВМ, меню VM > Settings…, среди устройств выбрать виртуальный диск Hard Disk и выполнить над ним последовательно операции Defragment (дефрагментация) и Compact (сжатие).
Свойства виртуального диска виртуальной машины VMWare
После сжатия размер диска *.vmdk уменьшился до 5,43 Гб, что на 4.24 Гб меньше предыдущего размера.