當我將帶有 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
我驗證了兩個磁碟在區塊 0 中具有相同的引導磁區代碼。
在我看來,其他東西可能需要更新。我想某個地方有一個絕對我需要更新的區塊引用,可能指向下一層載入器或 NT 核心。
更新:我發現這文章深入探討了我想知道的內容。但是,它說要修改 boot.ini,但我在這裡安裝了 Windows 7,其中這些內容似乎已更改: 沒有 boot.ini,但有一個名為系統容量資訊其中包含 GUID 和其他數據,聽起來與我的問題有關。打算繼續挖...
更新2:感謝看起來很糟糕但資訊非常豐富網站由星人,我能夠弄清楚第一步:NTFS 引導磁區有一個「隱藏」磁區欄位。此欄位必須包含引導磁區的磁區號。這解決了“讀取錯誤”訊息。然而現在,我收到了“BOOTMGR 丟失”錯誤。看起來還有另一個地方需要調整區塊號,但我在程式碼清單中找不到任何與此相關的內容。
我確實找到了很多幫助網站建議使用 Windows 工具來修復「BOOTMGR 遺失」問題,但似乎沒有人知道幕後發生的事情。有點像當 Windows 出現小問題時建議重新安裝它。至少,這些修復似乎有效,主要涉及 Bcdedit 和 Bootrec 工具。現在,誰知道他們會做什麼,尤其是後者,對於移動的分區?
更新3:經過多次嘗試和錯誤嘗試,我現在相信解決方案在於BCD-模板登錄文件,通常位於\Windows\System32\config 內。如果我使用「bcdboot」命令更新此內容,Windows 將從它啟動。我現在正在弄清楚該註冊表包含與上述問題相關的哪些資訊。歡迎任何指向此註冊表內容的指標。
更新4:事實證明,雖然 BCD 範本檔案被重寫並且具有與其前身不同的二進位內容,但其中的值不會改變。所以它一定是 bcdboot.exe 寫入的其他內容。我之前已經檢查過它是否更改了分區的前 32 個引導區塊,但它們似乎保持不變。分區圖也不會改變。那麼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,視情況而定。
看:支援.Microsoft.com更多細節。