Как работает Windows Vista / 7/2008 bootmgr за кулисами?

981
edgar.holleis

Раньше всегда можно было перенести установку Windows (NT / 2000 / XP / 2003) на новый загрузочный носитель с помощью:

  • Воссоздание таблицы разделов и MBR
  • Копирование разделов с использованием ntfsclone
  • Сложная часть: геометрия диска должна была оставаться прежней, а раздел, в котором находился ntldr, должен был начинаться в том же секторе LBA, что и раньше

Это все еще возможно с Windows (Vista / 7/2008)? Будет ли такая процедура работать?

  • Скопировать таблицу разделов, с подписью диска (!) И MBR
  • Возможно изменить размер разделов, чтобы соответствовать жесткому диску
  • Ntfsclone «Системный зарезервированный раздел» и «Загрузочный раздел».
  • Нужно ли начинать один или оба в одном и том же секторе на старом и новом жестком диске?

Можете ли вы объяснить, как bootmgr и bcd действительно работают под капотом, в отличие, например, от grub или ntldr? Есть ли первый и второй этап? Хранит ли он где-нибудь черные списки?

Обновление: Моя первоначальная проблема оказалась связана с аппаратным обеспечением. Вопрос перефразирован для решения более широкой проблемы.

4
На самом деле я сделал. Ничего не нашел, почему это не работает. 10 лет назад 0

1 ответ на вопрос

3
Chris S

bootmgr не знает о «буквах дисков», это то, что Windows делает с опозданием в процессе загрузки (и настраивается в реестре, абсолютно безразлично к конфигурации физического диска).

Использование Linux для клонирования системы не поддерживается Microsoft. Короче говоря, официальный ответ - не делай этого . Вы должны использовать Windows PE. DISM может создавать и применять файлы изображений WIM, который является предпочтительным форматом Microsoft (тот же, который используется программой установки Windows).

Клонирование машины обычно происходит следующим образом:

  1. Настройка эталонного аппарата. Беги sysprep.
  2. Загрузочный WinPE. Используйте, dismчтобы захватить диск. Что-то вроде этого командного файла:

    @ECHO OFF IF %1 == "" GOTO DIE: CHKDSK /X C: CHKDSK /X D: IF NOT ERRORLEVEL 0 GOTO DIE: DISM /Capture-Image /ImageFile:Z:\Path\To\Images\%1.wim /Name:Boot /CaptureDir:C:\ /Compress:fast DISM /Append-Image /ImageFile:Z:\Path\To\Images\%1.wim /Name:Windows /CaptureDir:D:\ :DIE 

    Это может потребоваться изменить, если у вас нестандартная разметка разделов.

  3. Загрузите конечный компьютер с WinPE. Используйте diskpartи, dismчтобы применить изображение:

    Стандартный diskpartскрипт для настройки разделов:

    SEL DISK 0 CLEAN CREATE PART PRI SIZE=350 ACT FORMAT QUICK ASSIGN LETTER=M CREATE PART PRI FORMAT QUICK ASSIGN LETTER=O EXIT 

    Стандартный dismпакетный файл для записи изображения:

    @ECHO OFF IF %1 == "" GOTO DIE: DISKPART /s Diskpart-Standard.script IF NOT ERRORLEVEL 0 GOTO DIE: DISM /Apply-Image /ImageFile:%1 /Index:1 /ApplyDir:M:\ DISM /Apply-Image /ImageFile:%1 /Index:2 /ApplyDir:O:\ IF NOT ERRORLEVEL 0 GOTO DIE: BCDEDIT -STORE M:\BOOT\BCD -set device partition=M: BCDEDIT -STORE M:\BOOT\BCD -set device partition=M: BCDEDIT -STORE M:\BOOT\BCD -set device partition=O: BCDEDIT -STORE M:\BOOT\BCD -set osdevice partition=O: :DIE ECHO Script ended... 

Ваш процесс может работать, но вы, вероятно, пропускаете эти последние четыре bcdeditстроки из сценария.

Обратите внимание, что это не настраивает WinRE, но вам это не нужно, если у вас есть WinPE в любом случае.

Спасибо за ваш подробный ответ. Когда-нибудь я мог бы даже потратить время на изучение нативных инструментов Microsoft. Вы не включили какие-либо подробности о внутренней работе bootmgr. edgar.holleis 10 лет назад 0
Извините, этот ответ довольно не по теме для [SU]. На [SF] мы считаем, что ответы типа «не делай этого» иногда * Правильный ответ *. Я оставлю это здесь для справки, но вы правы, что этот вопрос здесь не подходит. Chris S 10 лет назад 0