MBR: BIOS ตัดสินใจได้อย่างไรว่าไดรฟ์นั้นสามารถบู๊ตได้หรือไม่


12

ในขณะที่พยายามตอบคำถามนี้ใน Askubuntu: ฉันจะถอนการติดตั้ง GRUB ได้อย่างไรฉันอ่านบทความ Wikipedia บน MBRและคำตอบที่สมบูรณ์แบบสำหรับคำถามที่เกี่ยวข้องใน Superuser ที่นี่ แต่สิ่งหนึ่งที่ยังไม่ชัดเจนสำหรับฉัน:

อะไรทำให้ BIOS ตัดสินใจได้อย่างชัดเจนว่าไดรฟ์สามารถบู๊ตได้หรือไม่ ลำดับการบู๊ตข้ามจากไดรฟ์ # 1 และพยายามบู๊ตจากไดรฟ์ # 2 ต่อไปอย่างไรหากมีการติดตั้งมากกว่าหนึ่งไดรฟ์ในระบบ

ความเข้าใจของฉันคือว่าสิ่งเดียวที่ BIOS ตรวจสอบตามปกติบน MBR คือลายเซ็นต์ที่ส่วนท้ายสุดของเซกเตอร์ขนาด 512 ไบต์และจากนั้นมันเพิ่งถ่ายโอนการควบคุมไปยัง bootloader เริ่มต้นที่อยู่ใน 446 ไบต์แรกของบูตเซกเตอร์

หมายความว่า 446 ไบต์แรกของบูตเซกเตอร์ต้องมีโค้ด bootloader ที่มีความหมายแม้ว่าดิสก์จะไม่สามารถบู๊ตได้หรือไม่?

หลังจาก BIOS ถ่ายโอนการควบคุมไปยัง bootloader บนไดรฟ์ # 1 ซึ่งไม่มีพาร์ติชั่น "ที่บูตได้" - bootloader บนไดรฟ์ที่สองมีการเรียกใช้อย่างไร

ขออภัยหากนี่เป็นเรื่องทางเทคนิคด้วย :) คำถามสั้น ๆ คือ: "ไบออสจะข้ามไดรฟ์ไปได้อย่างไรและพยายามบูตจากอันต่อไปหรือไม่"

คำตอบ:


16

อะไรทำให้ BIOS ตัดสินใจได้อย่างชัดเจนว่าไดรฟ์สามารถบู๊ตได้หรือไม่

ไบออสตัดสินใจหากไดรฟ์เป็นที่สามารถบูตได้อยู่บนพื้นฐานของบันทึกพาร์ทิชัน 16 ไบต์ปัจจุบันหลังจากพื้นที่รหัส MBR (ถือหุ้นในตารางเริ่มต้นที่ 446 THไบต์) ไบต์แรกในแต่ละพาร์ติชันบันทึกแสดงสถานะการบูตของไดรฟ์ (และถูกตั้งค่าเป็น0x80ถ้าสามารถบูตได้หรือ0x00ไม่ก็ได้) BIOSes บางตัวอาจตรวจสอบส่วนอื่น ๆ ของ MBR (เช่นประเภทพาร์ติชัน checksums) แต่ความต้องการขั้นพื้นฐานคือการตั้งค่าสถานะที่สามารถบู๊ตได้

ลำดับการบู๊ตข้ามจากไดรฟ์ # 1 และพยายามบู๊ตจากไดรฟ์ # 2 ต่อไปอย่างไรหากมีการติดตั้งมากกว่าหนึ่งไดรฟ์ในระบบ

สิ่งนี้ขึ้นอยู่กับการใช้งานและเป็นสาเหตุที่คุณต้องเลือกลำดับการบูตอย่างถูกต้อง ในกรณีส่วนใหญ่ BIOS จะตรวจสอบสื่อเก็บข้อมูลแต่ละรายการตามลำดับที่คุณตั้งค่าและตรวจสอบว่าสามารถบูตจากอุปกรณ์นั้น (ผ่านข้อมูล MBR) หากทำได้สามารถทำได้ - หากไม่เป็นเช่นนั้นอุปกรณ์จะทำการวนลูปอย่างต่อเนื่องผ่านอุปกรณ์อื่น (ตามลำดับที่คุณเลือก)

หลังจาก BIOS ถ่ายโอนการควบคุมไปยัง bootloader บนไดรฟ์ # 1 ซึ่งไม่มีพาร์ติชั่น "ที่บูตได้" - bootloader บนไดรฟ์ที่สองมีการเรียกใช้อย่างไร

เมื่อพบอุปกรณ์สำหรับบู๊ตที่ถูกต้อง (เช่นตั้งค่าสถานะที่สามารถบู๊ตได้และการตรวจสอบผ่านเพิ่มเติมอื่น ๆ ) BIOS จะคัดลอกเซกเตอร์ MBR ไปยัง RAM จากนั้น BIOS จะย้ายตัวชี้คำสั่งไปยังตำแหน่งเริ่มต้นของตำแหน่งนี้ (โดยใช้JUMPคำสั่ง) ซึ่งเป็นที่ตั้งของส่วนรหัส MBR และคอมพิวเตอร์จะเริ่มทำงาน

หากไบออสรองรับคุณสมบัติการบูตไบออสรหัส MBR สามารถส่งคืนการควบคุม BIOS ด้วยคำสั่งบางอย่างส่งสัญญาณว่าบูตล้มเหลวและแจ้งให้ลองอุปกรณ์ถัดไป BIOS ที่เก่ากว่าเพียงพิมพ์ข้อความแสดงข้อผิดพลาด บอกได้เลยว่า BIOS ของคุณรองรับหรือไม่คุณสามารถบูตจาก USB ได้หรือไม่

ความเข้าใจของฉันคือว่าสิ่งเดียวที่ BIOS ตรวจสอบตามปกติบน MBR คือลายเซ็นต์ที่ส่วนท้ายสุดของเซกเตอร์ขนาด 512 ไบต์และจากนั้นมันเพิ่งถ่ายโอนการควบคุมไปยัง bootloader เริ่มต้นที่อยู่ใน 446 ไบต์แรกของบูตเซกเตอร์

สิ่งนี้ถูกต้อง แต่ควรสังเกตว่า BIOSs ที่ทันสมัยส่วนใหญ่จะมองหา GUID พาร์ติชันตารางเช่นเดียวกับตารางแบบ MBR แบบเก่ากว่า

หมายความว่า 446 ไบต์แรกของบูตเซกเตอร์ต้องมีโค้ด bootloader ที่มีความหมายแม้ว่าดิสก์จะไม่สามารถบู๊ตได้หรือไม่?

ไม่แต่ไดรฟ์จะต้องมีตารางพาร์ติชัน MBR หรือ GUID ที่ถูกต้องมิฉะนั้นคอมพิวเตอร์จะไม่ตรวจพบ ในขณะที่ส่วนรหัสของ MBR สามารถว่างเปล่าได้จริงภาคแรกของไดรฟ์จะต้องมี MBR / GPT ที่มีรูปแบบที่ดี


ขอบคุณสำหรับคำตอบที่ละเอียดมาก ดังนั้นเกณฑ์สำหรับอุปกรณ์ที่ใช้บู๊ตได้คือการมีพาร์ติชั่นที่สามารถบู๊ตได้ในตารางพาร์ติชั่นและ "การตรวจสอบเพิ่มเติมอื่น ๆ " บ้างไหม? ฉันสับสนเล็กน้อยเพราะในคำถามดั้งเดิมของ AskUbuntu ผู้เขียนแสดงให้เห็นว่าพาร์ติชั่นทั้งหมดในไดรฟ์นั้นไม่สามารถบู๊ตได้และเขายังเห็นข้อผิดพลาดที่เกิดจาก GRUB ที่ขาด - ซึ่งไม่ควรเรียกใช้จาก BIOS เลย เพราะไดรฟ์ไม่ตรงตามเกณฑ์ "บูตได้" ดังนั้นไบออสจึงควรข้ามไดรฟ์และไปยังไดรฟ์ถัดไป
Sergey

@ Sergey ฉันดูคำถามนั้นและไม่แน่ใจ เป็นไปได้ว่า MBR เสียหายหรือตั้งค่าสถานะที่สามารถบู๊ตได้เป็นค่าที่ไม่ถูกต้อง (ไม่แน่ใจว่าfdiskจะจัดการกับกรณีเหล่านี้อย่างไรแม้ว่าเวอร์ชั่นดั้งเดิม จะตั้งค่าส่วนหัว MBR ที่ไม่ถูกต้อง) ฉันแนะนำ OP ให้โพสต์หัวข้อ MBR ดิบ แต่เขา / เธออาจต้องการ "สลับ" เปิด / ปิดการตั้งค่าสถานะที่สามารถบูตได้ (เพื่อตั้งค่า / รีเซ็ตค่าสถานะด้วยตนเอง)
พัฒนา

โปรดทราบว่ารหัส BIOS ไม่ใช่รหัสทั่วไป มันค่อนข้างเฉพาะเจาะจงสำหรับแต่ละเมนบอร์ดดังนั้นจึงรู้ได้ว่ามีไดรฟ์ชนิดใดติดอยู่กับพอร์ตใดบ้าง
LatinSuD

คำตอบนี้ไม่ถูกต้องทั้งหมด FWIU ตรวจสอบพาร์ติชันที่ใช้งานอยู่และอะไรที่เป็น "ค่าเริ่มต้น" รหัสบูต MBR ทำไม่ใช่ BIOS NeoSmart นำเสนอคำอธิบายที่เป็นไปได้มากขึ้น:“ บนพีซีที่เข้ากันได้กับ IBM (โดยทั่วไปทุกอย่าง) สองไบต์สุดท้ายของ 512- ไบต์ MBR เรียกว่าลายเซ็นการบูตและไบออสใช้เพื่อตรวจสอบว่าบูตไดรฟ์ที่เลือกนั้นสามารถบู๊ตได้จริงหรือ ไม่." ส่วนสุดท้ายนั้นผิด Legacy BIOS สามารถบู๊ตได้จาก GPT (ด้วยรหัสการบู๊ต BIOS ที่เหมาะสม) เพราะการบูทแบบ "ฟรีสไตล์" เป็นหลัก
Daniel B

@DanielB ทั้งสองสิ่งนี้ได้รับการแก้ไขโดยตรงในคำตอบ: "โดยปกติไบออสจะตรวจสอบ MBR ว่าเป็นลายเซ็นของมันที่ส่วนท้ายของ 512- ไบท์เซกเตอร์และจากนั้นมันก็ถ่ายโอนการควบคุมไปยัง bootloader เริ่มต้นที่อยู่ใน 446 ไบต์แรก ของบูตเซกเตอร์"และ'มากที่สุด BIOSes ทันสมัยยังจะมองหาตาราง GUID Partition เช่นเดียวกับพี่โต๊ะธรรมดา MBR สไตล์'
Breakthrough
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.