Ubunta в виртуалке с «резиновым» VHDX разрослась до размера диска и перестала стартовать.
Да, у «сисадминов от бога» и такое рано или поздно всегда иногда случается )))
Ubuntu Live CD идёт с GUI по умолчанию и надо править загрузчик, чтобы загрузить её только с терминалом. Даже постоянно «тыкая» кнопку «возобновить» не полчается нормально добраться до окончания загрузки версии с GUI. Mini.iso — официальные мини-образы от Ubuntu — вообще Live-загрузку не поддерживают.
Итак, после часа метаний и установки всяких странных, но маленьких образов системы, я нашёл то, что реально сработало! Образ называется grml64. Приведу цитату из Wiki:
Grml — дистрибутив Linux, основанный на Debian запускающийся в режиме LiveCD.Дистрибутив запускается в режиме LiveCD или LiveUSB с набором инструментов для системного администрирования.
Короче, вещь просто отличная! После загрузки желает нам Счастливого хакинга )) Скачать можно прямо с официального сайта: https://grml.org/download/
Первой задачей стало удаление «свободного, но несвободного» места. Дело в том, что когда из файловой системы удаляется файл, то фактически он не удаляется, а просто помечается «удалённым». Из-за этого начинает «распухать» образ виртуальной машины.
Тут надо обязятельно загрузиться с Live CD версии системы, чтобы можно было размонтировать раздел, который будем «занулять».
Если в систему можно загрузиться нормально — можно также почистить систему руками — поудалять, например, старые логи, почистить кэш. Ещё можно использовать следующие команды:
sudoapt clean
sudo apt autoclean
sudo apt autoremove
Далее останавливаем машину и подкидываем для загрузки образ grml. Грузимся.
Кстати, утилита zerofree уже установления в этом образе по умолчанию. Дальше надо понять, какой раздел мы чистим. Тут нам поможет следующая команда (у меня команду sudo можно было не использовать):
sudo fdisk -l
Находим нужный нам, например как в моём случае, /dev/sda2 b запускаем в работу zerofree
zerofree -v /dev/sda2
После длительного ожидания и постоянного возобновления виртуальной машины дожидаемся окончания работы утилиты. Завершаем работу виртуалки.
Далее нам надо перейти на хостовую машину, на которой крутится Hyper-v.
Открываем свойства машины, выбираем диск, нажимаем Edit и дальше протыкиваем Compact.
Однако, в моём случае это не помогло. Совсем. Ни мегабайта не освободилось. «Косяк», — подумал я и погрузился в гуглинг. И через некоторое время я нашёл решение.
На хостовой машине запускаем cmd с повышенными правами и используем diskpart следующим образом:
diskpart
select vdisk file="c:\vhdx\yourdisk.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
И это сработало!
Затем, я загрузился с live cd gparted и обрезал раздел.
К сожалению, Сделать vhdx’у Shrink не вышло — система начала валиться в initramfs. Ну, не везде же нам побеждать )))
Пока искал информацию, наткнулся на способ уменьшить VHDX через PowerShell.
Нужно запустить PowerShell от администратора с повышенными правами и произвести следующие манипуляции:
#Замаунтить виртульный диск только для чтения
Mount-VHD -Path "c:\vhdx\yourdisk.vhdx" -ReadOnly
# Ужать
Optimize-VHD -Path "c:\vhdx\yourdisk.vhdx" -Mode Full
# Размаунтить =)
Dismount-VHD -Path "c:\vhdx\yourdisk.vhdx"
В следующий раз обязательно проверю…