Главная / Журнал / Серверы
29.10.2026Серверы8 мин чтения

Раздутый виртуальный диск Hyper-V: как вернуть 279 ГБ

Коротко

  • Динамический VHDX занимал 317,6 ГБ, хотя внутри гостя использовалось 56 ГБ из 498. Файл растёт при записи, но не уменьшается сам при удалении — это его свойство, а не поломка.
  • Проверить свой диск можно двумя командами: Get-VHD на хосте Hyper-V и df -h / в госте.
  • fstrim + Optimize-VHD -Mode Full вернули 89 ГБ (317,6 → 228,9), но дальше файл перестал уменьшаться.
  • Точный результат дал клон на новый образ: 317,6 → 38,5 ГБ, простой около 5 минут, после старта — 71 клиентское подключение 1С.
  • Переезжать на другой сервер не пришлось: всё сделано на том же хосте. Не уверены, что у вас с дисками? Проверим бесплатно за 1 рабочий день.

Что случилось: 317 ГБ при 56 ГБ данных

К нам пришли с типичной картиной: сервер 1С:Предприятие (Debian 12, Hyper-V Gen2) в какой-то момент перестал помещаться в хранилище. В госте использовалось 56 ГБ из 498 — 12%, то есть система была почти пустой. А файл виртуального диска на диске хоста весил 317,6 ГБ.

Между этими двумя числами — вся суть проблемы. Владелец видит в df -h свободные сотни гигабайтов и искренне не понимает, куда хост «тратит» место. Тем временем на физическом диске заканчивается пространство, и по мере его исчерпания виртуальная машина начинает получать ошибки записи — вплоть до аварийной остановки.

При этом бэкапы раздувшегося образа тоже весят сотни гигабайтов, а ежедневная копия всей ВМ занимает вдвое больше нужного.

Что у нас было на входе:

ПоказательЗначение
ГостьDebian 12, Hyper-V Gen2 (UEFI)
Нагрузкасервер 1С, ~60 пользователей на двух базах
Виртуальный диск500 ГБ, динамический VHDX
Занято в госте56 ГБ из 498 ГБ (12%)
Файл VHDX на хосте317,6 ГБ
TRIM/UNMAP пробрасываетсяда, гранулярность 32 МБ

Отдельно проверили главное: данные в госте целые и помещаются в разумный размер. Проблема была исключительно в образе диска, а не в данных.

Диск заканчивается, а данные целы?

Проверим образы ВМ против занятого места и скажем, сколько гигабайтов можно вернуть. Бесплатно, за 1 рабочий день.

Проверить хранилище →

Почему VHDX раздувается и не уменьшается обратно

Динамический виртуальный диск в Hyper-V устроен по принципу «страница за страницей»: в файле образа лежат только блоки, в которые когда-то писали. Гостевая система выделила блок — гипервизор приписал его в файл. Файл вырос.

Обратного автоматического хода нет. Гость удалил файлы, освободил сотни гигабайтов — но хост об этом не знает, пока ему явно не сообщат. Сообщить можно двумя путями:

  • TRIM/UNMAP — гость сам говорит «эти блоки мне больше не нужны»;
  • Optimize-VHD — хост сам просканировал файл и выбросил нулевые блоки.

Если не делать ни того, ни другое, файл будет только расти: каждая запись в лог 1С, каждый временный файл, каждое обновление пакета оставляют след. Через пару лет эксплуатации 500-гигабайтный диск, на котором реально занято 50 ГБ, закономерно весит 300+.

Важно: это не вирус и не повреждение. Данные в порядке, гость работает. Проблема — в месте на хранилище, и её надо решать до того, как диск закончится.

Для вашего администратора: как это выглядит в цифрах

Признак раздутого образа — расхождение трёх чисел: FileSize в Get-VHD, занятое по df -h в госте и свободное место на физическом диске хоста. Если первое в разы больше второго, виноваты не данные, а неотданные блоки: проверьте, включён ли UNMAP на контроллере (fsutil behavior query DisableDeleteNotify в госте) и запускается ли fstrim по расписанию (systemctl status fstrim.timer).

Как проверить свой диск за минуту

На хосте Hyper-V (PowerShell):

Для вашего администратора: проверка размера

Get-VHD -Path 'D:\VM\Debi\Debi.vhdx' |
    Select-Object VhdType, FileSize, Size

VhdType = Dynamic, FileSize = 317,6 ГБ, Size = 500 ГБ — это и есть раздутый диск: логический размер против реального файла.

В госте:

Для вашего администратора: проверка в госте

df -h /
sudo fstrim -v /

df показывает занято внутри системы, fstrim -v — сколько блоков гость готов отдать обратно. Если вторая команда отчитывается о сотнях гигабайтов, мусор накопился именно в образе.

Дальше сверяем просто: FileSize на хосте должен быть примерно равен занятому в госте плюс служебный запас в 5–10%. Разрыв в разы говорит о том, что пришло время разбираться.

Что пробовали и что это дало

Честно, по шагам — потому что половина статей в интернете заканчивается словами «просто запустите Optimize-VHD», а реальность интереснее.

Шаг 1. Уборка в госте и fstrim

Удалили оставшийся бэкап реестра 1С (17 ГБ, живой реестр на месте), запустили fstrim -v /:

ОперацияРезультат
fstrim -v / (первый прогон)освобождено 254,5 GiB за ~1 секунду
удаление старого бэкапазанято 56 → 39 ГБ
fstrim -v / (второй прогон)освобождено ещё 15,1 GiB

Итого гость отдал хосту около 270 GiB блоков. Дальше файл должен был уменьшиться — но сам он, разумеется, не уменьшился: для этого нужен второй шаг.

Шаг 2. Optimize-VHD -Mode Full

Первые попытки на работающей ВМ не давали эффекта — это ожидаемо: оптимизация требует выключенной ВМ или отсоединённого диска. Отсоединили диск от контроллера, запустили полное сканирование:

Для вашего администратора: лог компактизации

OPTIMIZE_START (detached, Mode Full) -> OPTIMIZE_DONE seconds=357
SIZE_BEFORE_GB=228.941   SIZE_AFTER_GB=228.941   SAVED_GB=0

357 секунд сканирования, экономия — ноль. Файл уже ужался до 228,9 ГБ и дальше упорно не двигался: гипервизор считал оставшиеся блоки занятыми, и ни один штатный приём их не отдавал.

Вывод из практики: на месте, штатными средствами, мы вернули 89 ГБ из 279 возможных. Дальше файл не шёл. Искать причины в сотнях параметров стало бессмысленно — начали с чистого листа.

Неясно, почему хранилище заканчивается?

Разберёмся: проверим образы ВМ, TRIM, место на дисках и покажем, что с этим делать. Бесплатно за 1 рабочий день.

Оставить заявку →

Как решить правильно: клон на новый образ

Самый предсказуемый способ получить диск нужного размера — не чинить старый файл, а собрать новый и перенести на него систему. Это не миграция на другой сервер: тот же хост, та же ВМ, другой файл диска.

Порядок такой:

  1. Создать новый dynamic VHDX того же размера (500 ГБ) и подключить его к ВМ вторым диском — гость увидит пустой /dev/sdb, работа не прерывается.
  2. Разметить и отформатировать с новыми GUID: GPT, EFI, /boot, LVM. Копировать старую разметку с идентификаторами нельзя — PARTUUID совпадут, и systemd начнёт путаться при загрузке.
  3. Скопировать данные живой системой через rsync — с исключением виртуальных файлов (/dev, /proc, /sys, /run), без которых монтирование в chroot не поднимется.
  4. Переписать fstab, пересобрать initramfs и GRUB на новые UUID — самый ответственный шаг: пропущенный здесь пункт даёт систему, которая не загружается.
  5. Дельта-синхронизация в окно простоя: останавливаем 1С, догоняем изменения, выключаем ВМ.
  6. Меняем диск местами в настройках ВМ (старый отключаем, новый ставим на тот же контроллер), включаем и проверяем.

В нашем случае итог был таким:

ДоПосле
Файл VHDX317,6 ГБ38,5 ГБ
Занято в госте39 ГБ39 ГБ
Простой—около 5 минут
Сессий после старта—71 подключение 1С

Старый образ не удаляли — он остался как бэкап на случай, если в течение нескольких дней проявится что-то непредвиденное. После стабильной работы его удаляют, и экономия становится окончательной: 279 ГБ.

Для вашего администратора: ключевые команды

# хост: размер и тип диска
Get-VHD -Path 'D:\VM\Debi\Debi.vhdx' | Select VhdType, FileSize, Size

# хост: компактизация (ВМ выключена или диск отсоединён)
Optimize-VHD -Path 'D:\VM\Debi\Debi.vhdx' -Mode Full

# хост: подключение нового образа вторым диском
New-VHD -Path 'D:\VM\Debi\Debi_new.vhdx' -SizeBytes 500GB -Dynamic
Add-VMHardDiskDrive -VMName Debi -Path 'D:\VM\Debi\Debi_new.vhdx'
# гость: проверка и освобождение блоков
df -h /
sudo fstrim -v /

# гость: клон (новый диск уже смонтирован в /mnt/new)
sudo rsync -aHAX --numeric-ids --delete \
  --exclude=/dev --exclude=/proc --exclude=/sys --exclude=/run \
  / /mnt/new/

После клона обязательно: новые UUID в /etc/fstab, update-initramfs -u, update-grub, grub-install — в chroot к новой системе, с примонтированными /dev, /proc, /sys.

Как проверить после переключения

Список короткий, но пропускать пункты нельзя:

  • findmnt / показывает новый UUID — система реально загрузилась с нового диска;
  • journalctl -b -p err пуст — ошибок монтирования и инициализации нет;
  • systemctl status srv1cv8…, nginx, apache2 — все в состоянии active;
  • клиентские сессии 1С поднимаются, соединения с СУБД уходят на нужные адреса;
  • Get-VHD на хосте показывает ожидаемый FileSize.

Если что-то пошло не так — откат делается за минуты: выключить ВМ, вернуть старый диск на тот же контроллер, включить. Именно поэтому старый образ не удаляют сразу. Про саму процедуру восстановления читайте в правиле 3-2-1 для бэкапов.

Сколько стоит

Ориентировочные цены на октябрь 2026 года. Точную стоимость называем после бесплатной оценки: размер хранилища, количество ВМ, что именно раздулось.

РаботаОриентир цены
Диагностика хранилища и виртуальных машинбесплатно, 1 рабочий день
Компактизация VHDX в согласованное окно (1 ВМ)от 150 до 400 BYN
Перенос ВМ на новый диск с клонированиемот 350 до 900 BYN
Перенос ВМ на новый хост под ключот 650 до 2 500 BYN
Абонентское обслуживание: мониторинг, бэкапы, обновленияот 400 до 800 BYN/мес

FAQ

Это опасно? Можно ли потерять данные?

Само по себе раздувание файла диска не портит данные — гость работает как обычно, пока хосту хватает места. Опасны неосторожные действия: оптимизация без бэкапа, удаление «ненужных» файлов в госте, мгновенное удаление старого образа после переключения. Мы работаем только после бэкапа и оставляем старый диск как откат.

Почему нельзя просто нажать «Уменьшить диск»?

Потому что Hyper-V не умеет уменьшать динамический VHDX на лету: диск расширяется автоматически, а сжимается только вручную через Optimize-VHD при выключенной ВМ или отсоединённом носителе. И даже тогда результат непредсказуем — как в нашем случае: 89 ГБ вместо ожидаемых 270.

Сколько раз можно это делать?

Сколько угодно — операция не меняет данные гостя. Но каждый раз это лечение симптома. Если после компактизации не настроены регулярный fstrim и контроль места, диск раздуется снова за несколько месяцев. Профилактика: включённый fstrim.timer, мониторинг занятого места и редкий, но обязательный Optimize-VHD.

Поможет ли переезд на другой сервер?

Нет. Проблема не в сервере, а в файле образа — на новом хосте он таким же останется. Миграция оправдана по другим причинам: нехватка процессорной мощности, памяти, дисковая подсистема, замена устаревшего оборудования. А если сервер 1С просто медленный, смотрите 7 причин, почему тормозит сервер 1С.

Что делать, если места почти не осталось?

Сначала — срочная копия важных данных (обычно реестр 1С и базы), затем fstrim и Optimize-VHD, и параллельно подготовка нового образа. Не откладывайте: когда хранилище заканчивается, ВМ может встать на запись в любой момент, а восстановление с бэкапа — это уже часы, а не минуты.

Восстановим место на хранилище

Проверим образы ВМ, ужмём что можно и перенесём данные на чистый диск — с бэкапом и окном простоя под ваш график.

Оставить заявку →

Что мы сделаем

  1. Проверим бесплатно — размер образов против занятого в госте, TRIM, место на хранилище. 1 рабочий день.
  2. Составим план — что ужимать, что клонировать, когда можно выключать ВМ. Цена фиксируется до старта.
  3. Сделаем в согласованное окно — с бэкапом и старым диском на случай отката.
  4. Останемся на связи — по желанию: мониторинг, бэкапы и обновления по абонементу.

Если диск заканчивается регулярно — стоит посмотреть на всю инфраструктуру целиком: администрирование серверов. Напишите: info@itseo.by · Telegram

Связаться

Напишите.
Мы на смене.

Быстрая заявка

Коротко: «упал сайт», «нужен админ», «хотим аудит» — остальное спросит инженер.

Тема
Написать инженеру →