Ошибка "There is not enough space available on the disk(s) to complete this operation" при попытке выполнить сжатие дискового тома NTFS на хосте виртуализации Hyper-V с Windows Server 2012 R2

Shrink NTFS Volume - There is not enough space available on the diskРабота с операционной системой Windows Server не бывает скучной, так как, порой, можно получить сюрприз с загадкой в самом неожиданном месте. Казалось бы, что можно ожидать от привычной функции, которую уже приходилось использовать десятки раз. С таким, абсолютно невозмутимым настроем, на одном из хостов виртуализации Hyper-V на базе Windows Server 2012 R2 я решил выполнить сжатие дискового тома NTFS (Shrink Volume) с ОС, чтобы освободить немного места на конце диска.

Стандартным способом, используя консоль Disk Management, я попытался выполнить сжатие выбранного NTFS тома.

Disk Management Shrink Volume

Свободного места на томе было более чем достаточно, и было решено отрезать 10GB.

Disk Management Shrink Volume - Select size

Однако, к моему удивлению, возникла ошибка, говорящая о нехватке доступного места для проведения операции "There is not enough space available on the disk(s) to complete this operation"

There is not enough space available on the disks to complete this operation

Повторная попытка провести операцию сжатия привела к той же ошибке.

Обратившись к консоли Event Viewer, было обнаружено, что в логе Windows Logs\Application в момент попытки сжатия фиксируется предупреждение с кодом 260 из источника Defrag с сообщением "Error: during volume shrink initiated on volume C: we failed to move a movable file extent". В этом событии в деталях диагностической информации  фигурирует отсылка на некий файл last unmovable file, который, как я понял, и препятствует перемещению дискового кластера.

Error during volume shrink initiated on volume C we failed to move a movable file extent

Возникло подозрение, что удаление указанного файла, возможно решило бы проблему с невозможностью сжатия диска. Но что это за tmp-файл такой, да ещё и в системном каталоге, понимания пока не было. Попытка вручную удалить файл завершилась ошибкой "Access is denied".

Try to delete vmg tmp file

Стало понятно, что либо файл удерживается каким-то процессом, либо имеет какие-то хитрые разрешения. Прежде чем погружаться в дальнейшее изучение вопроса с проверкой прав доступа и вычислением процесса, блокирующего доступ к файлу, сделал быстрый заход в поисковую систему по маске имени файла vmg.tmp и тут же нашёл одну интересную ветку обсуждения. Намёк в сторону управляющего процесса Hyper-V, порождающего временные файлы типа vmg.tmp при работе с ISО-образом компонент интеграции, привёл меня в лог Microsoft\Windows\Hyper-V-VMMS\Storage, который оказался переполнен ошибками типа:

Log Name:      Microsoft-Windows-Hyper-V-VMMS-Storage
Source:        Microsoft-Windows-Hyper-V-VMMS
Event ID:      27000
Level:         Error
User:          SYSTEM
Computer:      KOM-VM02.holding.com
Description:   Failed to open attachment 'C:\Windows\system32\vmguest.iso'. Error: 'One or more arguments are invalid'.

Это напомнило мне ранее описанную ситуацию с невозможностью обновления ISO-образа компонент интеграции из-за того, что файл образа %windir%\system32\vmguest.iso был занят запущенной виртуальной машиной.

И действительно, просмотрев свойства виртуальных машин, запущенных на хосте, было обнаружено, что в одной из ВМ был подключен ISO-образ компонент интеграции.

vmguest iso in Hyper-V VM

Отключение данного ISO-образа из свойств виртуальной машины привело к исчезновению недоступного для удаления временного файла.

vmg tmp deleted

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

The storage optimizer successfully completed shrink on C

В ходе выполнения операций сжатия в Application-логе событие из источника Defrag оповестило об успешной оптимизации перед непосредственным процессом усечения тома.

Log Name:      Application
Source:        Microsoft-Windows-Defrag
Event ID:      258
Level:         Information
Keywords:      Classic
Computer:      KOM-VM02.holding.com
Description:   The storage optimizer successfully completed shrink on SYSTEM (C:)

На этом дело о неработающем сжатии можно было считать закрытым, но при этом остался осадок изумления от самой возможности появления причинно-следственной связи между, казалось бы, несвязанными обстоятельствами – установленным в свойствах виртуальной машины образом компонент интеграции и неработающим сжатием системного тома NTFS.

Комичность всей описанной ситуации дополняет то, что в самом начале, когда я получил ошибку невозможности сжатия, в качестве профилактического мероприятия была выполнена дефрагментация тома и утилита дефрагментации с честными глазами сказала мне, что теперь на томе всё красиво.

Всего комментариев: 6 Комментировать

  1. Константин Максимов /

    Получается образ был подключен даже не к этой же виртуальной машине?

    1. Алексей Максимов / Автор записи

      Не имеет значения к какой ВМ был подключён образ. Имеет значение то, насколько в момент подключения образа был заполнен системный диск хоста. Например, сначала системный диск хоста заполнен на 65GB из 70GB общего доступного объема. В этот момент подключаем образ компонент интеграции на любую ВМ, которая работает на этом хосте. После этого освобождаем место на диске хоста, например до уровня 30GB из 70GB и пытаемся выполнить сжатие диска хоста, например на 10GB... в этот момент получаем ошибку невозможности сжатия. Проблема возникает по той причине, что созданный в процессе монтирования ISO-образа временный файл на системном диске хоста фактически записан в конец диска, то есть где-то в диапазоне от 65 до 70GB.

      1. Сергей /

        Интересная логика работы Hyper-V. То есть это даже не баг а фича получается?

  2. Алгыз /

    с первой версии hyper-v я не мог понять, ну к чему такие зависимости от какого-то образа, подключенного к виртуалке?! vmware молодцы, а MS - гребаные индусы.

    1. Алексей Максимов / Автор записи

      Зачем же так об индусах. А в VMware, полагаю, есть свои не менее интересные проблемы.

  3. Non /

    @Алгыз, зачем холиваришь? В Варе своих косяков хватает тоже. И вообще нормальная практика отключать ISO от VM когда он больше не требуется - что в варе, что в hyper-v.

Добавить комментарий