Короткий ответ
Расширение — два шага: (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-VHDSize ещё 80 ГБ; - после Resize в Disk Management гостя Unallocated справа;
- CSV после роста dynamic файла красный.
Отличия:
| Что видно | Куда |
|---|---|
| Нужно уменьшить | сжать VHDX |
| Файл уже упёрся в том хоста | рост файла |
| Resize падает на lock | подключение |
| CSV не пишется | CSV |
Возможные причины
Вы не в той статье как «поломка», но частые ошибки процедуры:
- Расширили VHDX, не Extended том.
- Справа не unallocated, а recovery/OEM раздел — Extend C: не идёт.
- Есть checkpoint, вы расширили не тот файл цепочки.
- GPT vs MBR лимиты (MBR 2 ТБ).
- 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).SizeMaxSizeMax расширяет на всю 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 с одного хоста «на глаз».