Исправление поврежденного виртуального жесткого диска

Опубликовано: 17 Апреля, 2023
Исправление поврежденного виртуального жесткого диска

Еще во времена Windows XP у Microsoft были амбициозные планы относительно технологий, которые они хотели внедрить в свою следующую новую операционную систему для настольных компьютеров, которой оказалась Vista. Среди вещей, которые рассматривала Microsoft, была совершенно новая файловая система, в которой все файлы будут инкапсулированы внутри какой-то структуры, похожей на базу данных. В конечном счете, эта конкретная функция так и не вошла в Windows, но в то время я написал несколько редакционных заметок, в которых сказал, что считаю новую файловую систему плохой идеей, потому что уровень инкапсуляции может легко стать единой точкой отказа. Если инкапсуляция будет повреждена, то в результате может быть потеряна вся файловая структура.

Перенесемся на пару десятилетий вперед и увидим, что идея инкапсуляции доказала свою надежность. Библиотеки документов SharePoint, например, хранят файлы в хранилище BLOB-объектов SQL Server. Точно так же виртуальные машины Hyper-V хранят файлы на виртуальных жестких дисках, которые по сути представляют собой инкапсулированную файловую систему. Несмотря на использование инкапсуляции, виртуальные жесткие диски Hyper-V настолько надежны, что используются в бесчисленном количестве производственных систем. Тем не менее, иногда что-то может пойти не так. Я видел несколько случаев повреждения виртуального жесткого диска на протяжении многих лет, особенно на виртуальных машинах, которые полагаются на цепочки контрольных точек. Когда это произойдет, вы можете восстановить резервную копию, если она у вас есть, но иногда вы можете так же легко исправить поврежденный виртуальный жесткий диск, и вот как.

Почему возникает коррупция?

Прежде чем я покажу вам, как исправить поврежденный виртуальный жесткий диск, вам может быть интересно, как вообще происходит повреждение. Иногда повреждение может быть вызвано неисправным оборудованием. Однажды у меня было внешнее устройство RAID, которое испортило довольно много данных из-за плохого кабеля. Однако в случае виртуальных жестких дисков Hyper-V повреждение часто происходит в результате разрыва цепочки дисков.

Если виртуальная машина не экранирована и не запущена, операционная система Windows позволит вам смонтировать виртуальный жесткий диск и получить доступ к его содержимому из родительской операционной системы. Я постоянно использую эту технику при настройке лабораторных сред. Однако если для виртуального жесткого диска существуют контрольные точки, то подключение виртуального жесткого диска из-за пределов Hyper-V приведет к разрыву цепочки контрольных точек. Это справедливо даже в том случае, если вы не вносите никаких изменений в содержимое виртуального жесткого диска. В следующий раз, когда вы попытаетесь запустить виртуальную машину, вы получите сообщение об ошибке, подобное показанному ниже.

Исправление поврежденного виртуального жесткого диска

Когда дело доходит до тестирования виртуальных жестких дисков, общепринятое мнение часто диктует использование командлета Test-VHD в PowerShell. Однако на собственном опыте я обнаружил, что командлет Test-VHD на самом деле не так уж полезен. Командлет возвращает значение True, если виртуальный жесткий диск считается исправным, и false, если виртуальный жесткий диск неисправен. Проблема заключается в том, что когда цепочка контрольных точек виртуального жесткого диска разрывается в результате подключения виртуального жесткого диска, содержащего контрольные точки, командлет Test-VHD сообщает о состоянии True, даже если цепочка виртуальных жестких дисков повреждена. Чтобы понять, что я имею в виду, посмотрите на рисунок ниже. Командлет Test-VHD возвращает состояние True, хотя в сообщении об ошибке конкретно говорится, что «цепочка виртуальных жестких дисков повреждена».

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

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

Продолжая смотреть на рисунок выше, вы заметите, что панель «Действия» содержит параметр «Проверить диск». Нажатие на Inspect Disk приводит к тому, что Windows отображает диалоговое окно, предлагающее вам выбрать виртуальный жесткий диск, который вы хотите проверить. Если бы я выбрал файл Client.VHDX, то в появившемся окне, которое вы можете видеть ниже, создается впечатление, что виртуальный жесткий диск полностью исправен. В самом деле, если бы я смонтировал виртуальный жесткий диск на уровне хост-ОС, я мог бы без проблем просматривать его содержимое.

Корневой виртуальный жесткий диск в этом случае кажется исправным, и проблема, очевидно, связана со связью между корневым виртуальным жестким диском и первой контрольной точкой. Поскольку корневой виртуальный жесткий диск, по-видимому, не знает о дереве контрольных точек, давайте посмотрим, что произойдет, если вы еще раз щелкните параметр «Проверить диск» диспетчера Hyper-V и на этот раз выберите файл AVHDX (разностный диск, связанный с с контрольной точкой) в отличие от корневого файла VHDX.

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

Нажатие кнопки Reconnect запускает мастер редактирования виртуального жесткого диска, который предлагает вам выбрать родительский файл виртуального жесткого диска. В зависимости от того, как произошло повреждение, вам, возможно, придется установить флажок «Игнорировать несоответствие идентификатора», как показано на рисунке ниже. В моем случае в сообщении об ошибке конкретно упоминалось о несоответствии идентификатора, поэтому было необходимо установить флажок. После этого виртуальная машина запустилась без проблем, и наша проблема с поврежденным виртуальным жестким диском была устранена.

Очевидно, что лучше попытаться предотвратить повреждение диска в средах Hyper-V, но если что-то пойдет не так, вы сможете исправить поврежденный виртуальный жесткий диск с помощью собственных инструментов. Однако рекомендуется избегать прямого монтирования любого виртуального жесткого диска, для которого существуют контрольные точки.