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

В 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 Гб.

Сжатие диска ВМ можно выполнить путем запуска одной команды при условии установленных драйверов и утилит Open-VM Tools (OVT). Для установки OVT необходимо выполнить команды:

$ sudo apt-get update
$ sudo apt-get install -y open-vm-tools
$ sudo reboot now

Затем выполнить команду сжатия диска:

$ sudo vmware-toolbox-cmd disk shrink /

Выполнение команды заблокирует взаимодействие с ВМ из-за показа диалогового модального окна.

Этот вариант выполняется быстрее, чем представленная инструкция ниже. Но у команды сжатия есть два нюанса:

  • Запуск возможен только при наличие утилит Open-VM Tools;
  • Для сжатия диска необходимо наличие свободного места в Host системе где размещается диск ВМ. Если для сжатия диска не будет хватать места, то VMWare сообщит об этом только фактически когда возникнет проблема. При использование инструкции ниже, при выполнение действия  Defragment (дефрагментация), VMWare сразу сообщит о нехватке дискового пространства.

Шаг 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