Уменьшение размера виртуальной машины VMware для гостевой-ОС Linux и освобождение пространства на диске

В 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 основан на проверке пространства нулями, таким образом, после удаления файла в виртуальной машине физически занимаемое пространство на диске не изменится. Для решения этой задачи выполняются две операции, это дефрагментация файловой системы в 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 resize vmdk
Свойства виртуального диска виртуальной машины VMWare

После сжатия размер диска *.vmdk уменьшился до 5,43 Гб, что на 4.24 Гб меньше предыдущего размера.

About the Author: Anton

Programistik