当我将Windows上的可引导NTFS分区移动到另一个块偏移时,需要进行哪些更新才能使其再次可引导?
背景: 我计划编写一个执行必要操作的程序,这就是为什么我不寻求从Windows DVD引导如何使用Microsoft工具的指南的原因。相反,我需要自己修改这些内容,以便为普通PC用户编写一个解决方案,使普通PC用户在将Windows系统移动到更大的硬盘时更加轻松。
特别是,这是我尝试的方法:
我有一个带有多个分区的磁盘,其中一个是上面装有Windows的NTFS分区,并且该磁盘使用普通的旧MBR块0进行分区布局(不超过4个分区)。
现在,我格式化并分区一个更大的新磁盘。我在那里为NTFS分区腾出空间,并将内容从旧磁盘的NTFS Windows分区复制到其中。然后我将分区设为“活动”。
但是,当我尝试从该磁盘启动时,我立即收到“读取错误”消息,并且启动停止,确切的文本是:
A disk read error occurred
Press Ctrl+Alt+Del to restart
我验证了两个磁盘在块0中具有相同的引导扇区代码。
在我看来,可能还需要更新其他内容。我猜想某个地方有一个我需要更新的绝对块引用,可能指向下一级加载程序或NT内核。
更新:我发现这篇文章深入了我想知道的内容。但是,它说要修改boot.ini,但是我在这里安装了Windows 7,这些东西似乎已经改变了:没有boot.ini,而是一个名为GUI的系统卷信息文件夹以及其他与我的问题有关的数据。要继续挖掘...
更新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的序列号。如果该数字不匹配,则系统将无法启动。接下来,我将测试其中是否还存储有绝对块引用。
\BCD\Boot
,最重要的东西肯定存储在其中,通常,您可以使用bcdedit.exe
而不是对其进行编辑bcdboot
。是的,用于引导引导的单独分区(仅当使用全盘加密功能时才需要,因为解密代码随后必须存储在主Windows分区之外,因此需要)来控制引导过程(如果存在)。