Как я диск уменьшил в виртуалке под Hyper-V 2019

Появилась задача - уменьшить диск у виртуалки. Виртуалка - видеорегистратор на ubuntu 18 по управлением Hyper-V 2019, с очень большим выделенным диском. Часть нагрузки с нее ушла, поэтому диск хотелось бы уменьшить, чтобы освобожденное дисковое пространство передать другим виртуалкам. Не все пошло по плану, хочу рассказать.
Появилась задача - уменьшить диск у виртуалки. Виртуалка - видеорегистратор на ubuntu 18 по управлением Hyper-V 2019, с очень большим выделенным диском. Часть нагрузки с нее ушла, поэтому диск хотелось бы уменьшить, чтобы освобожденное дисковое пространство передать другим виртуалкам. Не все пошло по плану, хочу рассказать.
Итак дано. Виртуалка на ubuntu. Диск на 9Tb, занято примерно 3.5. Диск один раз уже уменьшался, до этого был 13Tb но процесс до конца доведен не был, файл vhdx так и остался занимать 13Tb - сейчас уже не вспомню, но вроде в процессе прошлого обрезания тоже все пошло не гладко, кстати именно поэтому хочу записать этот процесс, чтобы в следующий раз вспомнить. Сразу предупреждаю - поскольку диски большие процесс занял очень много времени.
План вкратце такой.
1. Уменьшаем размер файловой системы внутри операционки
2. Уменьшаем размер партиций внутри операционки.
3. Уменьшаем размер диска в Hyper-V.
4. Уменьшаем размер файла vhdx в Hyper-V
Работоспособностью сервера было решено пренебречь :). Могу сказать что в итоге он не работал больше суток. Поэтому смело грузимся с live-cd (я подсунул установщик ubuntu 18.04, и когда он предложил выбрать язык нажал alt+F2 чтобы переключится в другую консоль и манипуляции проводил там).
У меня диск был разбит на два раздела, sda1=/boot/efi и sda2=/, уменьшать будем соответственно только sda2.
ОБЯЗАТЕЛЬНО! Соберите и сохраните всю информацию о партициях, мне она пригодилась :) запускаем fdisk и даем команду p чтобы получить информацию о партициях и диске, затем команды i для каждого раздела
Command (m for help): p
Disk /dev/sda: 8.8 TiB, 9663676416000 bytes, 18874368000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 63A76DC1-85D9-3E40-936B-54362F2150A4

Device       Start         End     Sectors  Size Type
/dev/sda1     2048     1050623     1048576  512M Microsoft basic data
/dev/sda2  1050624 18874367966 18873317343  8.8T Linux filesystem

Command (m for help): i
Partition number (1,2, default 2): 1

         Device: /dev/sda1
          Start: 2048
            End: 1050623
        Sectors: 1048576
           Size: 512M
           Type: Microsoft basic data
      Type-UUID: EBD0A0A2-B9E5-4433-87C0-68B6B72699C7
           UUID: F751756E-5E67-4E26-A8B3-66550F08D938

Command (m for help): i
Partition number (1,2, default 2): 2

         Device: /dev/sda2
          Start: 1050624
            End: 18874367966
        Sectors: 18873317343
           Size: 8.8T
           Type: Linux filesystem
      Type-UUID: 0FC63DAF-8483-4772-8E79-3D69D8477DE4
           UUID: C32B4C20-A8C4-9C45-BEEF-12814AF24AFD

Command (m for help):
Первым делом проверяем файловую систему:
e2fsck -f /dev/sda2
Именно так, а не как я попытался на скрине :)
далее даем команду на изменение размера файловой системы
resize2fs /dev/sda2 4100G Мне не хотелось высчитывать точные значения и/или столкнутся с тем что у resize2fs и fdisk разные представления о том сколько в килобайте байтов ;) поэтому решил файловую систему отрезать на 4100G (занято было, повторюсь, около 3.5Тб) а раздел потом обрезать на 4500G, потом соответственно все выровнять
Процедура очень долгая. После успешного завершения будем резать раздел. Для этого его сначала удаляем (даем в fdisk'е команду d, и указываем 2-й раздел) затем создаем на его месте меньший по размеру - даем команду n, указываем что это 2-й раздел, указываем начальный сектор - у меня по умолчанию, указываем размер +4500G.
Затем сохраняем инфу на диск командой w при этом fdisk увидит, что там есть файловая система и когда он спросит удалить ли ее - говорим чтобы не удалял! пишем N
Теперь начинаем работать в Hyper-v (я через powershell)
У меня виртуалка называется UNIFY-G3 поэтому даю такую команду
   Get-VM -VMName UNIFY-G3 | Select-Object VMId | Get-VHD
   
Берем оттуда путь к vhdx диску
Видим - Hyper-V понимает что диск размечен только на 4.5Тб (MinimumSize) пользуемся этим и даем такую команду
   Resize-VHD -Path 'C:\CM\UNIFY-G3\Virtual Hard Disks\UNIFY-G3-1.vhdx' -ToMinimumSize
   
После завершения вижу что размер уменьшился, но физически файл занимает те же 13Tb
Даем команду.
   Optimize-VHD -Path "C:\CM\UNIFY-G3\Virtual Hard Disks\UNIFY-G3-1.vhdx"
   
Обламываемся. Выключаем виртуалку полностью. Запускаем команду снова. Долго ждем пока