Sup*_*pel 9 windows bootloader mbr grub
当我将带有 Windows 的可引导 NTFS 分区移动到不同的块偏移时,需要更新什么才能使其再次可引导?
背景: 我计划编写一个执行必要操作的程序,这就是为什么我不寻求如何通过从 Windows DVD 启动来使用 Microsoft 工具的指南。相反,我需要如何自己修改这些东西,以便我可以编写一个对普通 PC 用户来说更容易的解决方案,当他想将他的 Windows 系统移动到更大的硬盘时。
特别是,这是我尝试过的:
我有一个包含多个分区的磁盘,其中一个是带有 Windows 的 NTFS 分区,并且该磁盘使用普通的旧 MBR 块 0 进行分区布局(不超过 4 个分区)。
现在我格式化和分区一个新的、更大的磁盘。在那里我为 NTFS 分区腾出空间,并将旧磁盘的 NTFS Windows 分区中的内容复制到其中。我使分区“活动”。
但是,当我尝试从该磁盘启动时,我立即收到“读取错误”消息并且启动停止,确切的文本是:
A disk read error occurred
Press Ctrl+Alt+Del to restart
Run Code Online (Sandbox Code Playgroud)
我验证了两个磁盘在块 0 中具有相同的引导扇区代码。
在我看来,其他东西可能需要更新。我猜想某处有一个绝对块引用需要更新,可能指向下一级加载器或 NT 内核。
更新:我发现这篇文章深入探讨了我想知道的内容。但是,它说要修改 boot.ini,但我在这里安装了 Windows 7,这些东西似乎发生了变化:没有 boot.ini,而是一个名为System Volume Information的文件夹,其中包含 GUID 和其他听起来与我的问题相关的数据. 打算继续挖...
更新 2:多亏了starman看起来很糟糕但信息量很大的网站,我能够弄清楚第一步:NTFS 引导扇区有一个用于“隐藏”扇区的字段。该字段必须包含引导扇区的扇区号。这解决了“读取错误”消息。但是,现在我收到了“BOOTMGR 丢失”错误。看起来还有另一个地方需要调整块号,但我在代码清单中找不到任何关于此的内容。
我确实发现很多帮助站点都建议使用 Windows 工具来解决这个“BOOTMGR 丢失”问题,但似乎没有人知道幕后发生了什么。有点像建议在出现小问题时重新安装 Windows。至少,这些修复似乎有效,主要涉及 Bcdedit 和 Bootrec 工具。现在,谁知道他们在移动分区方面做了什么,尤其是后者?
更新 3:经过多次反复试验,我相信现在解决方案在于BCD-Template注册表文件,它通常位于 \Windows\System32\config 中。如果我使用“bcdboot”命令更新它,Windows 将从它启动。我现在正在弄清楚该注册表包含哪些与上述问题相关的信息。欢迎任何指向此注册表内容的指针。
更新 4:事实证明,虽然 BCD-Template 文件被重写并具有与其前身不同的二进制内容,但其中的值并没有改变。所以它一定是 bcdboot.exe 写入的其他东西。我之前已经检查过它是否更改了分区的前 32 个引导块,但它们似乎保持不变。Parititon 地图也不会改变。那么bcdboot除了BCD注册表修改的是什么呢?关于如何追踪它的任何提示?是否有低级工具可以显示程序写入哪些文件?
更新 5:答案似乎是:c:\Boot\BCD 也发生了变化,这似乎是引导管理器进程的关键文件。我稍后会调查这个...
更新 6:这似乎是一个重要的细节,我在安装 Windows 7 时最初创建了两个分区:一个 204800 个扇区的小分区,它似乎是一个引导分区,然后是包含 Windows 系统的实际大分区(驱动器 C:)。当我尝试将这个安装转移到一个新的、更大的磁盘时,我在新驱动器上保持了相同的两个分区完好无损,尽管它们最终处于不同的偏移量。仅此一项就导致了“BOOTMGR 丢失”消息。从那以后,我只在 Windows 分区上使用了 bcdboot.exe,它添加了该分区上的 \Boot\BCD 文件。该文件(和文件夹)最初只存在于较小的分区上。因此,在我的情况下,这个问题可能更复杂,因为一个分区(引导程序)引用了另一个分区(包含操作系统的分区),而其他人可能只需要处理一个包含两者的分区,也许有解决方案更简单。
更新 7:发现更多细节:\Boot\BCD 文件记录了 MBR 的序列号。如果该数字不匹配,系统将无法启动。接下来我将测试是否还有一个绝对块引用存储在那里。
小智 1
更简单的方法?
将 Windows Vista 或 Windows 7 安装光盘放入光驱中,然后启动计算机。
出现提示时按一个键。
选择语言、时间、货币、键盘或输入法,然后单击“下一步”。
单击修复您的计算机。
单击要修复的操作系统,然后单击“下一步”。
在“系统恢复选项”对话框中,单击“命令提示符”。
键入 Bootrec.exe,然后按 Enter。
Bootrec.exe 选项
Bootrec.exe 工具支持以下选项。使用适合您情况的选项。
注意 如果重建 BCD 无法解决启动问题,您可以导出并删除 BCD,然后再次运行此选项。通过这样做,您可以确保 BCD 已完全重建。
为此,请在 Windows RE 命令提示符下键入以下命令:
bcdedit /export C:\BCD_Backup
c:
cd boot
attrib bcd -s -h -r
ren c:\boot\bcd bcd.old
bootrec /RebuildBcd
或 /FixMbr 或 /FixBoot 或 /ScanOs 或 /RebuildBcd,具体视情况而定。
请参阅:Support.Microsoft.com了解更多详细信息。
| 归档时间: |
|
| 查看次数: |
3593 次 |
| 最近记录: |