Вы зашли как: Гость
23.07.2012 11:37 | Dazila

Клонирование дисков получило большое распространение с тех пор, как ИТ-профессионалы для виртуализации физических серверов стали использовать такие инструменты, как Disk2vhd от Sysinternals, создавая на основе образа главного виртуального жесткого диска его копии для клонов виртуальных машин. В большинстве случаев вы можете работать с клонированным образом диска, не подозревая, что подпись этого диска дублируется. Однако, есть вероятность, что подключив клонированный диск в систему Windows, в которой уже есть диск с такой же подписью, вы тем самым вызовете конфликт подписей дисков, что сделает невозможным загрузку любой из установок Windows Vista или новее, находящихся на этом диске. Целью такого подключения диска может быть добавление на него файлов в оффлайн-режиме, проверка на наличие вредоносных программ и, что несколько иронично, восстановление системы, которая не может загрузиться. Риск появления конфликта - эта та причина, по которой в документацию к Disk2vhd я добавил рекомендацию, согласно которой не стоит подключать VHD-диск, созданный с помощью Disk2vhd, в систему, которая генерирует VHD, используя поддержку VHD, встроенную в Windows 7 и Windows Server 2008 R2.

Я получил несколько электронных писем от людей, которые столкнулись с проблемой конфликта подписей дисков, и, после небольших поисков в сети, я нашел очень мало информации о том, как можно решить эту проблему. Поэтому в этой статье я опишу для вас несколько простых шагов, которые вы можете проделать, если ваша система не загружается из-за возникшего конфликта дисков. Я также объясню, где хранится подпись диска, как Windows ее использует, и почему такие коллизии делают невозможной загрузку Windows.


Подписи дисков
Подпись диска - это четырехбайтный идентификатор смещения 0x1B8 в главной загрузочной записи диска (MBR), записанное в первом секторе диска. На этом скриншоте из редактора диска видно, что подпись диска в моей системе для разработки - 0xE9EB3AA5 (это значение хранится в формате "от младшего байта к старшему", потому в редакторе байты представлены в обратном порядке):


Windows использует подписи дисков для отображения таких объектов, как тома, на их диски-источники, а также, начиная с Windows Vista, подписи дисков используются Windows в ее базе данных Boot Configuration Database (BCD), в которой хранится информация, используемая процессом загрузки для нахождения загрузочных файлов и настроек. Если вы посмотрите на содержимое BCD с помощью встроенной утилиты Bcdedit, вы увидите три элемента, которые ссылаются на подпись диска:


Фактически в BCD есть дополнительные ссылки на подпись диска в альтернативных конфигурациях загрузки, таких как Windows Recovery Environment, возвращение из режима гибернации и загрузки Windows Memory Diagnostic, которые не отображаются в основном выводе утилиты Bcdedit. Исправление конфликта подписей требует некоторых знаний о структуре BCD, которая фактически является файлом куста реестра, который загружается Windows в HKEY_LOCAL_MACHINE\BCD00000:


Дисковые подписи появляются в смещении в значении реестра Element в ключах под названием 0x11000001 (загрузочное устройство Windows) и 0x2100001 (загрузочное устройство ОС):


Вот элемент, соответствующий одной из этих записей в выходе команды Bcdedit, где вы можете видеть такую же подпись диска, как и та, что хранится в MBR моего диска:



Конфликт подписей дисков
Windows требует, чтобы подписи были уникальны, так что, когда вы подключаете диск, имеющий подпись, идентичную таковой у уже подключенного диска, Windows переводит этот диск в режим "offline" и не считывает его таблицу разделов и не монтирует его тома. На следующем скриншоте показано, как утилита администрирования Windows Disk Management представляет диск, находящийся в режиме "offline", что произошло после того, как я подключил VHD, созданный с помощью Disk2vhd на моей системе для разработки, в данную систему:


Если вы щелкните правой кнопкой мыши на диске, утилиты предложит вам команду "Online", которая укажет Windows проанализировать таблицу разделов диска и смонтировать его тома:


После того, как вы выберете опцию Online, Windows без предупреждения сгенерирует новую случайную подпись диска и назначит ее этому диску, записав ее в MBR. После этого система сможет обработать MBR и смонтировать присутствующие на диске тома, однако, когда Windows обновляет подпись диска, записи BCD становятся некорректными, указывая на предыдущую подпись диска, а не на новую. При загрузке с этого диска, загрузчик не сможет найти указанный диск и загрузить файлы, в результате чего будет показана следующая ошибка:



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

Для начала вам нужно определить первоначальную подпись, и в этом вам могут пригодиться небольшие знания о BCD. Подключите восстанавливаемый диск к запущенной системе Windows. Он будет работать в режиме online и Windows назначит буквы дисков для томов этого диска, поскольку не будет никаких коллизий подписей дисков. Загрузите BCD с этого диска, запустив Regedit, выбрав HKEY_LOCAL_MACHINE и нажав Load Hive в меню File:


В диалоговом окне выбора файла перейдите к скрытой директории диска \Boot, которая находится в корневой директории одного из томов диска, и выберите файл с именем "BCD". Если на диске есть несколько томов, найдите директорию Boot, введя x:\boot\bcd, где вместо "x:" нужно подставить букву диска каждого тома по очереди. Когда вы найдете BCD, выберите имя ключа, в который она загружается, и найдите "Windows Boot Manager". Вы найдете эту строчку в ключе с именем "12000004", как на этом скриншоте:


Выберите ключ с именем 11000001 в том же родительском ключе Elements и выпишите четырехбайтную подпись ключа, расположенную в смещении 0x38 (не забудьте об обратном порядке байтов).

С подписью диска под рукой, откройте командную строку с правами администратора и запустите Diskpart, утилиту управления дисками. Введите "select disk 2", заменив "2" на идентификатор диска, который утилита Disk Management показывает для нашего диска. Теперь вы готовы к заключительному шагу - установке подписи диска в ее первоначальное значение с помощью команды "uniqueid disk id=e9eb3aa5", заменив ID на тот, что вы посмотрели в BCD:


Когда вы запускаете эту команду, Windows немедленно переводит диск и все соответствующие тома в режим offline, чтобы избежать конфликта подписей. Не переводите диск снова в режим online, или вы испортите всю свою работу. Теперь вы можете отключить ваш диск и, поскольку его подпись снова соответствует BCD, установки Windows на этом диске будут успешно загружаться. Вы можете оказаться в ситуации, когда у вас не будет другого выбора, кроме как вызвать конфликт и дать Windows обновить подпись диска, но теперь вы, по крайней мере, знаете, как ее можно восстановить.

Дополнительную информацию о Disk2vhd вы можете получить из книги Windows Sysinternals Administrator’s Reference, которую я написал вместе с Аароном Маргозисом (Aaron Margosis).


Источник: http://blogs.technet.com/markrussinovich
Перевод: Dazila

Комментарии

Комментариев нет...
Для возможности комментировать войдите в 1 клик через

По теме

Акции MSFT
74.41 0.00
Акции торгуются с 17:30 до 00:00 по Москве
Мы на Facebook
Мы ВКонтакте
Все права принадлежат © MSInsider.ru (ex TheVista.ru), 2017
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.044 секунд (Общее время SQL: 0.009 секунд - SQL запросов: 31 - Среднее время SQL: 0.00029 секунд))