Короткий ответ

Расширение — два шага: (1) увеличить виртуальный диск Resize-VHD на HV01, (2) расширить раздел ФС внутри гостя. Пропуск второго шага выглядит как «ничего не выросло». Перед первым шагом: запас на CSV C:\ClusterStorage\Volume1, нет аварийной цепочки AVHDX (или понимаете, что растёт текущий overlay), backup.

Online resize VHDX для SCSI обычно можно на Running VM; системный раздел Generation 1 IDE — чаще Off. Не расширяйте, если том хоста меньше нового Size.

Симптомы и как отличить

Типичная картина:

  • в госте C: 0 байт, Get-VHD Size ещё 80 ГБ;
  • после Resize в Disk Management гостя Unallocated справа;
  • CSV после роста dynamic файла красный.

Отличия:

Что видноКуда
Нужно уменьшитьсжать VHDX
Файл уже упёрся в том хостарост файла
Resize падает на lockподключение
CSV не пишетсяCSV

Возможные причины

Вы не в той статье как «поломка», но частые ошибки процедуры:

  1. Расширили VHDX, не Extended том.
  2. Справа не unallocated, а recovery/OEM раздел — Extend C: не идёт.
  3. Есть checkpoint, вы расширили не тот файл цепочки.
  4. GPT vs MBR лимиты (MBR 2 ТБ).
  5. Shared VHDX/гостевой кластер — процедура другая.

Диагностика

Get-VM -Name 'VM-APP01' | Format-List State, Generation
Get-VMHardDiskDrive -VMName 'VM-APP01' | Format-Table ControllerType, ControllerNumber, Path
Get-VHD -Path 'C:\ClusterStorage\Volume1\VM-APP01\VM-APP01.vhdx' | Format-List Path, VhdType, Size, FileSize, MinimumSize, ParentPath, Attached
Get-VMCheckpoint -VMName 'VM-APP01'
Get-Volume | Format-Table DriveLetter, FileSystemLabel, SizeRemaining, Size
Get-ClusterSharedVolume -ErrorAction SilentlyContinue

В госте:

Get-Disk | Format-Table Number, Size, PartitionStyle, OperationalStatus
Get-Partition -DiskNumber 0
Get-Volume

Зафиксируйте DiskNumber тома, который расширяете (не перепутайте data и OS).

Решение

Сценарий A. SCSI VHDX, VM Running, нет снимков

Проверьте свободное место CSV > прирост + запас.

Resize-VHD -Path 'C:\ClusterStorage\Volume1\VM-APP01\VM-APP01.vhdx' -SizeBytes 200GB
Get-VHD -Path 'C:\ClusterStorage\Volume1\VM-APP01\VM-APP01.vhdx' | Format-List Size, FileSize

В госте (Disk Management Refresh или):

Update-HostStorageCache
Get-Disk | Get-Partition
# пример: раздел 2 на диске 0 — подставьте свои номера из Get-Partition
Resize-Partition -DiskNumber 0 -PartitionNumber 2 -Size (Get-PartitionSupportedSize -DiskNumber 0 -PartitionNumber 2).SizeMax

SizeMax расширяет на всю unallocated смежную. Если unallocated не смежна — не двигайте OEM в проде без окна и backup (сторонние partition tools — риск).

Сценарий B. Есть checkpoint

Лучше слить, затем Resize базового сценария. Resize текущего differencing увеличивает overlay; легко запутаться. Если оставляете снимок — расширяйте диск, который сейчас в Get-VMHardDiskDrive (лист), осознавая последствия.

Сценарий C. IDE / нужен Off

Stop-VM -Name 'VM-APP01'
Resize-VHD -Path '...' -SizeBytes 200GB
Start-VM -Name 'VM-APP01'

Затем Extend в госте.

Сценарий D. CSV мало места

Сначала расширьте LUN/том CSV или перенесите VM. Resize-VHD на 2 ТБ при свободных 20 ГБ на Volume1 для dynamic может пройти «успешно» и убить том при заполнении гостя.

Сценарий E. Гость Linux

После Resize: echo 1 > /sys/class/block/sda/device/rescan (имя диска своё), затем growpart/pvresize/lvextend/xfs_growfs или resize2fs по вашей схеме. Не копируйте Windows Resize-Partition в Linux.

После Resize-VHD обновите представление диска в госте. Windows: Disk Management Action → Rescan. Без rescan Unallocated не появится и «Extend» серый — это не сбой Hyper-V. Linux: rescan SCSI sysfs, не reboot «чтобы точно».

Не расширяйте диск и раздел в одном изменении вместе с compact и checkpoint-delete. Один шаг — одно доказательство. Если после Resize VM не стартует, вы будете знать, что виноват Resize, а не соседний merge.

Для dynamic следите за CSV после роста Size: гость может быстро дописать FileSize. Алерт места на Volume1 должен срабатывать до того, как SQL раскидает файл данных. Связка с ростом файла.

GPT на больших дисках обязателен: MBR не переживёт Extend за 2 ТБ. Get-Disk PartitionStyle в госте до Resize, не после сюрприза.

Как проверить, что проблема устранена

Get-VHD -Path 'C:\ClusterStorage\Volume1\VM-APP01\VM-APP01.vhdx' | Format-List Size, FileSize

В госте Get-Volume показывает новый SizeRemaining. Запись тестового файла, удаление. VM Running, приложения живы. CSV не в нуле. На контроллере домена в VM — не трогайте SYSVOL «расширением ради красоты» без нужды, но том C: должен быть здоровый NTFS (chkdsk только если были ошибки, не ритуал после каждого Resize).

Если не помогло

  • Unallocated слева от C: — стандартная ловушка recovery partition. Плановое перемещение recovery, не diskpart вслепую.
  • Resize-VHD «not supported»: differencing без поддержки, или формат VHD (старый). Convert в VHDX в окно.
  • Гость не видит диск: SCSI rescan, не второй Resize.
  • После роста не стартует: статья старта, не shrink обратно сразу.

Профилактика

  • Алерт свободного места в госте и FileSize/CSV.
  • SCSI + Gen2 для дисков, которые будут расти.
  • Не упирать dynamic Size в размер CSV.
  • Процедура: backup → Resize-VHD → Resize-Partition → проверка.
  • Документ DiskNumber/LUN в заявке.

FAQ

Online expand безопасен для SQL?

Обычно диск да; файл БД не вырастет сам — потом рост datafile/autogrow. Согласуйте с DBA. Latency в момент metadata есть.

Expand vs новый диск?

Новый VHDX под данные часто чище, чем бесконечный C:. Extend C: — когда ПО не умеет сменить путь.

Fixed тоже Resize-VHD?

Да, Size растёт, FileSize у fixed сразу тянется — нужно место на CSV сразу. Dynamic растягивает FileSize позже.

Можно ли расширить на 1 ГБ для теста?

Да, процедура та же. Не тестируйте на единственном диске без backup, если не умеете откатить СХД.

Generation 2 Secure Boot мешает?

Нет расширению диска.

Shared VHDX двух узлов гостевого кластера?

Расширение shared диска — по гайду guest cluster / CSV гостя. Не Resize с одного хоста «на глаз».