สิ่งที่ต้องมีการอัพเดตเมื่อย้ายพาร์ติชัน Windows 7 (หรือ Vista) ที่สามารถบู๊ตได้


9

เมื่อฉันย้ายพาร์ติชัน NTFS ที่สามารถบู๊ตได้ด้วย Windows บนพาร์ติชั่นบล็อกอื่น ๆ จำเป็นต้องมีการอัพเดตเพื่อให้สามารถบู๊ตได้อีกครั้ง

ความเป็นมา: ฉันวางแผนที่จะเขียนโปรแกรมที่ดำเนินการตามที่จำเป็นนั่นคือสาเหตุที่ฉันไม่ต้องการคำแนะนำวิธีใช้เครื่องมือของ Microsoft โดยการบูตจาก Windows DVD แต่ฉันต้องการวิธีแก้ไขสิ่งเหล่านี้ด้วยตัวเองเพื่อให้ฉันสามารถเขียนวิธีแก้ปัญหาที่ง่ายขึ้นสำหรับผู้ใช้พีซีทั่วไปเมื่อเขาต้องการย้ายระบบ Windows ของเขาไปยังฮาร์ดดิสก์ที่ใหญ่กว่า

โดยเฉพาะอย่างยิ่งนี่คือสิ่งที่ฉันได้ลอง:

ฉันมีดิสก์ที่มีหลายพาร์ติชันหนึ่งในนั้นคือพาร์ติชัน NTFS ที่มี Windows อยู่และดิสก์นั้นใช้ MBR block 0 แบบธรรมดาสำหรับการออกแบบพาร์ติชั่น (ไม่เกิน 4 พาร์ติชั่น)

ตอนนี้ฉันจัดรูปแบบและพาร์ติชันดิสก์ใหม่ที่ใหญ่กว่า ที่นั่นฉันสร้างพื้นที่สำหรับพาร์ติชัน NTFS และคัดลอกเนื้อหาจากพาร์ติชัน Windows NTFS ของดิสก์เก่าเข้าไป และฉันทำให้พาร์ทิชัน "ใช้งาน"

อย่างไรก็ตามเมื่อฉันพยายามบูตจากดิสก์นี้ฉันได้รับข้อความ "read error" ทันทีและการบูตหยุดลงข้อความที่ถูกต้องคือ:

  A disk read error occurred
  Press Ctrl+Alt+Del to restart

ฉันตรวจสอบว่าดิสก์ทั้งสองมีรหัสเซกเตอร์สำหรับบูตเหมือนกันในบล็อก 0

ดูเหมือนว่าฉันจะต้องมีการปรับปรุงอย่างอื่น ฉันเดาว่าที่ใดที่หนึ่งมีการอ้างอิงบล็อกแบบสัมบูรณ์ที่ฉันต้องการอัปเดตอาจชี้ไปที่ตัวโหลดระดับถัดไปหรือเคอร์เนล NT

ปรับปรุง:ฉันพบนี้บทความไปค่อนข้างลึกของสิ่งที่ฉันต้องการที่จะรู้ว่า อย่างไรก็ตามมันบอกว่าจะแก้ไข boot.ini แต่ฉันติดตั้ง Windows 7 ที่นี่ซึ่งสิ่งต่าง ๆ ดูเหมือนจะมีการเปลี่ยนแปลง: ไม่มี boot.ini แต่โฟลเดอร์ที่เรียกว่าSystem Volume Informationพร้อม GUID และข้อมูลอื่น ๆ ที่เกี่ยวข้องกับปัญหาของฉัน . จะขุดต่อไป ...

อัปเดต 2:ขอบคุณเว็บไซต์starman ที่ดูดี แต่ให้ข้อมูลมากฉันสามารถหาขั้นตอนแรกได้: บูตเซกเตอร์ NTFS มีช่องสำหรับภาค "ซ่อน" Feld นี้จะต้องมีหมายเลขเซกเตอร์ของบูตเซกเตอร์ วิธีนี้จะแก้ไขข้อความ "อ่านผิดพลาด" อย่างไรก็ตามตอนนี้ฉันได้รับข้อผิดพลาด "BOOTMGR is missing" แทน ดูเหมือนว่ามีสถานที่อื่นที่ต้องทำการปรับหมายเลขบล็อก แต่ฉันไม่พบสิ่งใดในรายการรหัสเกี่ยวกับสิ่งนี้

ฉันพบไซต์ช่วยเหลือจำนวนมากที่แนะนำเครื่องมือ Windows สำหรับแก้ไขปัญหา "BOOTMGR is missing" แต่ดูเหมือนไม่มีใครรู้ว่ามีอะไรเกิดขึ้นเบื้องหลัง ชนิดของการแนะนำให้ติดตั้ง Windows ใหม่เมื่อมีปัญหาเล็กน้อยกับมัน อย่างน้อยการแก้ไขเหล่านั้นดูเหมือนจะใช้งานได้ส่วนใหญ่เกี่ยวข้องกับเครื่องมือ Bcdedit และ Bootrec ตอนนี้ใครจะรู้ว่าสิ่งที่พวกเขาทำโดยเฉพาะอย่างยิ่งในส่วนที่เกี่ยวกับพาร์ทิชันย้าย?

อัปเดต 3:หลังจากความพยายามทดลองใช้และข้อผิดพลาดมากมายฉันเชื่อว่าตอนนี้โซลูชันอยู่ในไฟล์รีจิสตรีBCD- เทมเพลตซึ่งโดยปกติจะอยู่ใน \ Windows \ System32 \ config หากฉันได้รับการอัปเดตนี้โดยใช้คำสั่ง "bcdboot" Windows จะเริ่มการทำงานจากมัน ตอนนี้ฉันกำลังค้นหาว่าข้อมูลใดที่รีจิสทรีนี้มีเกี่ยวข้องกับคำถามข้างต้น ตัวชี้ไปยังเนื้อหาของรีจิสตรีนี้ยินดีต้อนรับ

อัปเดต 4:ปรากฎว่าในขณะที่ไฟล์ BCD- เทมเพลตได้รับการเขียนใหม่และมีเนื้อหาไบนารีที่แตกต่างจากรุ่นก่อน แต่ค่าภายในไม่เปลี่ยนแปลง ดังนั้นจะต้องเป็นอย่างอื่นที่ bcdboot.exe เขียน ก่อนหน้านี้ฉันเคยตรวจสอบแล้วว่ามันเปลี่ยน 32 boot block แรกของพาร์ติชั่นหรือไม่ แต่มันยังคงไม่เปลี่ยนแปลง แผนที่ Parititon ก็ไม่ได้รับการเปลี่ยนแปลงเช่นกัน ดังนั้นมันคืออะไรที่ bcdboot แก้ไขนอกเหนือจากรีจิสทรี BCD? มีคำแนะนำใดบ้างสำหรับฉันจะติดตามสิ่งนั้นได้อย่างไร มีเครื่องมือระดับต่ำที่แสดงให้ฉันเห็นว่าโปรแกรมเขียนไปยังไฟล์ใด

อัปเดต 5:คำตอบน่าจะเป็น: c: \ Boot \ BCD ก็เปลี่ยนไปและนั่นก็เป็นไฟล์สำคัญสำหรับกระบวนการของตัวจัดการการบูต ฉันจะตรวจสอบเรื่องนี้ในภายหลัง ...

อัปเดต 6:ดูเหมือนว่าจะเป็นรายละเอียดที่สำคัญที่ฉันมีสองพาร์ติชันที่สร้างขึ้นเมื่อฉันติดตั้ง Windows 7: พาร์ติชันขนาดเล็กของภาค 204800 ซึ่งดูเหมือนว่าจะเป็นพาร์ติชัน bootstrap ตามด้วยพาร์ติชันที่แท้จริง ขับ C :) เมื่อฉันพยายามถ่ายโอนการติดตั้งนี้ไปยังดิสก์ใหม่ที่ใหญ่กว่าฉันได้เก็บพาร์ติชั่นทั้งสองไว้ในไดรฟ์ใหม่แม้ว่าพวกเขาจะได้ออฟเซ็ตต่างกันก็ตาม ข้อความนี้นำไปสู่ข้อความ "BOOTMGR is missing" ตั้งแต่นั้นมาฉันใช้ bcdboot.exe บนพาร์ติชัน Windows เท่านั้นซึ่งเพิ่มไฟล์ \ Boot \ BCD บนพาร์ติชันนั้น ไฟล์ (และโฟลเดอร์) นั้นมีอยู่ แต่เดิมบนพาร์ติชันที่มีขนาดเล็กกว่าเท่านั้น ดังนั้นปัญหานี้อาจซับซ้อนกว่าในกรณีของฉันในฐานะพาร์ติชันหนึ่ง (บู๊ตสเตปเปอร์) ที่อ้างถึงพาร์ติชันอื่น (อันที่มีระบบปฏิบัติการ) ในขณะที่คนอื่นอาจต้องจัดการกับพาร์ติชันหนึ่งที่มีทั้งคู่ ง่ายกว่า

อัปเดต 7:พบหนึ่งรายละเอียดเพิ่มเติม: ไฟล์ \ Boot \ BCD บันทึกหมายเลขซีเรียลของ MBR หากหมายเลขนั้นไม่ตรงกันระบบจะไม่บู๊ต ต่อไปฉันจะทดสอบว่ามีการอ้างอิงบล็อกแบบสัมบูรณ์อยู่หรือไม่


แค่สงสัยคุณแน่ใจหรือไม่ว่าพาร์ติชันระบบที่ซ่อนอยู่นั้นถูกย้ายอย่างถูกต้อง?
โคลัม

พาร์ทิชันที่ซ่อนอยู่ซึ่งคุณหมายถึงอะไร ฉันเพิ่งเพิ่มอัปเดต # 6 ซึ่งพูดถึงพาร์ติชั่นบูตพิเศษและใช่ฉันก็ย้ายมันด้วย นอกจากนี้ยังมีพื้นที่ "ซ่อน" อีกแห่งระหว่าง MBR และจุดเริ่มต้นของพาร์ติชัน Windows แต่นั่นไม่ควรมีความเกี่ยวข้องใด ๆ - นั่นเป็นเพียงข้อมูลจำนวนหนึ่ง (ในกรณีของฉัน: พาร์ติชัน HFS + ขณะที่ฉันย้าย ติดตั้ง Boot Camp ที่นี่) สิ่งที่เกี่ยวข้องเท่านั้นควร: แผนที่พาร์ติชัน (MBR บวก GUID แผนที่แผนพาร์ติชันหลังจากนั้น) และทั้งสองเกี่ยวข้อง Windows พาร์ทิชัน (booter ขนาดเล็กและพาร์ทิชัน C:) ฉันอัปเดตทุกอย่างถูกต้องแน่นอน :)
SuperTempel

แน่นอนที่สุดสิ่งที่สำคัญจะถูกเก็บไว้ใน\BCD\Bootและคุณต้องการแก้ไขได้ตามปกติว่ามีการไม่ได้bcdedit.exe bcdbootและใช่พาร์ติชั่นแยกต่างหากสำหรับการรัดสายบู๊ต (ซึ่งจำเป็นต้องใช้เฉพาะเมื่อคุณใช้คุณสมบัติการเข้ารหัสดิสก์เต็มเนื่องจากรหัสถอดรหัสนั้นจะต้องถูกเก็บไว้นอกพาร์ติชั่นหลักของ Windows) ควบคุมกระบวนการบูตหากมีอยู่
Ben Voigt

@Ben: ใช่ฉันรู้เกี่ยวกับ bcdedit - แต่ฉันไม่ต้องการแก้ไขอะไรเท่าที่ฉันสามารถบอกได้ว่าฉันไม่ต้องการเปลี่ยนตัวเลือกใด ๆ ตามที่พวกเขาอยู่ในสถานที่ก่อนที่ฉันจะย้ายพาร์ติชันไปยังดิสก์ใหม่ . ทั้งหมดที่ฉันต้องการอัปเดตคือหมายเลขบล็อกคงที่และการอ้างอิง ID ดิสก์โดยไม่ต้องใช้โปรแกรมปฏิบัติการ Windows หากเป็นไปได้
SuperTempel

1
ไม่ใช่คำถามการเขียนโปรแกรม นี่เป็นความรู้เกี่ยวกับโดเมนเกี่ยวกับ bootloader ของ Windows
ไม่มีใคร

คำตอบ:


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สำหรับรายละเอียดเพิ่มเติม


1
ขอบคุณที่พยายามช่วย แต่สิ่งที่คุณพูดคือความรู้มาตรฐานตามที่คุณชี้ ฉันต้องการข้อมูล "กำลังเกิดขึ้น" โดยเฉพาะเพื่อให้บรรลุสิ่งนี้ในโปรแกรมที่เป็นลายลักษณ์อักษรของฉันไม่ใช่โดยการใช้ซอฟต์แวร์ของ Microsoft ซึ่งยังคงจัดการได้ยากสำหรับผู้ใช้ที่ไม่สำคัญ ฉันต้องการให้โซลูชันแก่ผู้ใช้ Mac ด้วยการติดตั้ง Boot Camp ในกรณีที่เขาต้องการย้ายสิ่งนี้ไปยังดิสก์อื่น และด้วยผลข้างเคียงของสิ่งนั้นมันจะช่วยผู้ใช้ Windows คนอื่น ๆ ด้วยเช่นกันเพราะงานจะเหมือนกัน
SuperTempel

ถ้าฉันพยายามทำอย่างนั้น ... ฉันต้องการดิสก์ก่อนและหลังและทำการเปรียบเทียบแบบไบนารีระหว่างทั้งสอง โชคดี.
Essobi

ฉันไปข้างหน้าคุณอีกครั้ง ดูสิฉันเป็นผู้เขียน iBored ดังนั้นฉันรู้วิธีการทำสิ่งต่าง ๆ เช่นนั้นและเชื่อฉันฉันได้ลองแล้ว แม้ว่ารูปแบบใหม่นั้นเป็นความลับสำหรับฉันมากเกินไปและนั่นเป็นสาเหตุที่ฉันถามคำถามนี้ที่นี่
SuperTempel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.