Я размещаю несколько виртуальных машин на хосте с Hyper-V Server 2008 R2. Изначально диски были подготовлены на другом сервере (2008, а не R2) около 16 месяцев назад и были перенесены на этот сервер год назад. Большинство гостей работают под управлением Windows 7.
Недавно я сравнивал размер VHD с используемым пространством, указанным гостем, и заметил, что на нескольких машинах файлы VHD были на 50–100% больше, чем было необходимо. Поэтому я решил попробовать сжать файлы VHD, чтобы освободить место на хосте. Я выполнил инструкции, которые нашел в Интернете, примерно так:
В первый раз, когда я попробовал это, он работал безупречно и уменьшил размер моего VHD примерно на 50%. Но для дисков всех остальных гостей я получаю это сообщение об ошибке:
The server encountered an error trying to edit the virtual disk.
'The system failed to compact 'C:\example.vhd'. Error Code: The requested
operation could not be completed due to a file system limitation
Ни у одного гостя не включено сжатие NTFS. Снимков этих дисков нет. Что еще могло вызвать эту ошибку?
редактировать: Бонусные баллы для всех, кто описывает решение для автоматического контроля динамических размеров VHD.
Удалите теневые копии с гостя. Вот и все!
vssadmin delete shadows /all
В интересах консолидации поиска в Интернете: в конце концов нашел эту ссылку, это подход, который работал, когда HyperV compact не работал: https://fiddley.wordpress.com/2014/01/27/dynamically-expanding-vhd-not-compacting-in-hyper-v/
В административной командной строке запустите DISKPART
В командной строке DISKPART
select vdisk File=”I:\path\to\your.vhd”
attach vdisk readonly
compact vdisk
detach vdisk
Помимо предложения удаления теневых копий вы должны использовать SDelete
для обнуления пустого пространства перед уплотнением, так как иногда это позволяет уплотнить гораздо больше неиспользуемого пространства. Например, для обнуления пустого места в C: вы должны запустить это изнутри виртуальная машина:
sdelete -z c:
В моем случае у меня был файл виртуального диска общим размером 80 ГБ, первое сжатие уменьшило его только до 78 ГБ, удаление теневых копий и повторное сжатие уменьшило его до 72 ГБ, но после запуска sdelete
следующее сжатие уменьшило размер файла до 56 ГБ.