Windows Vista/7/2008 bootmgr 在后台如何工作?

Windows Vista/7/2008 bootmgr 在后台如何工作?

总是可以通过以下方式将 Windows 安装 (NT/2000/XP/2003) 传输到新的启动介质:

  • 重新创建分区表和 MBR
  • 使用 ntfsclone 复制分区
  • 棘手的部分:磁盘几何形状必须保持不变,并且 ntldr 所在的分区必须从与之前相同的 LBA 扇区开始

在 Windows (Vista/7/2008) 上是否仍可行?这样的程序可行吗?

  • 复制分区表,带有磁盘签名(!)和 MBR
  • 可能需要调整分区大小以适合硬盘
  • Ntfsclone“系统保留分区”和“启动分区”。
  • 在新旧硬盘上,一个或两个硬盘是否仍必须从同一扇区开始?

您能解释一下 bootmgr 和 bcd 的底层工作原理吗,与 grub 或 ntldr 不同?是否有第一阶段和第二阶段?它是否在某处保存了阻止列表?

更新:我原来的问题原来与硬件有关。问题已重新表述以解决更广泛的问题。

答案1

bootmgr 不知道“驱动器号”,这是 Windows 在启动过程后期所做的事情(并且在注册表中配置,与物理磁盘配置完全无关)。

微软不支持使用 Linux 克隆系统。简而言之,官方的答案是不要这样做。您应该使用 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。使用diskpartdism应用映像:

    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 {bootmgr} device partition=M:
    BCDEDIT -STORE M:\BOOT\BCD -set {memdiag} device partition=M:
    BCDEDIT -STORE M:\BOOT\BCD -set {default} device partition=O:
    BCDEDIT -STORE M:\BOOT\BCD -set {default} osdevice partition=O:
    :DIE
    ECHO Script ended...
    

您的流程可能有效,但您可能缺少bcdedit脚本的最后四行。

请注意,这不会配置 WinRE,但如果您有 WinPE,则不需要它。

相关内容