MBR: Bagaimana cara BIOS memutuskan apakah drive dapat di-boot atau tidak?

12

Saat mencoba menjawab pertanyaan ini di askubuntu: Bagaimana cara Menghapus Instalasi GRUB Saya membaca artikel Wikipedia di MBR dan juga jawaban sempurna tentang pertanyaan yang agak terkait di sini di Superuser, namun, satu hal yang masih belum jelas bagi saya:

Apa sebenarnya yang membuat BIOS memutuskan apakah drive dapat di-boot atau tidak? Bagaimana urutan boot melewati dari drive # 1 dan melanjutkan mencoba untuk boot dari drive # 2 jika lebih dari satu drive dipasang di sistem?

Pemahaman saya adalah bahwa satu-satunya hal yang biasanya diperiksa BIOS pada MBR adalah tanda tangannya di akhir sektor 512-byte, dan kemudian hanya mentransfer kontrol ke bootloader awal yang terletak di 446 byte pertama dari sektor boot.

Apakah ini menyiratkan bahwa 446 byte pertama dari sektor boot HARUS berisi beberapa kode bootloader yang berarti bahkan jika disk tidak dapat di-boot?

Setelah BIOS memindahkan kendali ke bootloader pada drive # 1 yang kebetulan tidak memiliki partisi "bootable" - bagaimana tepatnya bootloader pada drive kedua dijalankan?

Maaf jika ini terlalu teknis :) Pertanyaan singkatnya adalah: "Bagaimana tepatnya BIOS melewatkan drive dan melanjutkan untuk mencoba boot dari yang berikutnya?"

Sergey
sumber

Jawaban:

16

Apa sebenarnya yang membuat BIOS memutuskan apakah drive dapat di-boot atau tidak?

BIOS memutuskan apakah drive dapat di-boot berdasarkan catatan partisi 16-byte, hadir setelah area kode MBR (disimpan dalam tabel mulai dari byte ke- 446 ). Bita pertama di setiap catatan partisi menunjukkan status drive yang dapat di-boot (dan diatur ke 0x80apakah dapat di-boot, atau 0x00jika tidak). Beberapa BIOS dapat memeriksa bagian lain dari MBR (misalnya jenis partisi, checksum), tetapi persyaratan dasarnya adalah bendera yang dapat di-boot.

Bagaimana urutan boot melewati dari drive # 1 dan melanjutkan mencoba untuk boot dari drive # 2 jika lebih dari satu drive dipasang di sistem?

Ini tergantung pada implementasi, dan itulah sebabnya Anda perlu memilih urutan boot dengan benar. Dalam kebanyakan kasus, BIOS akan memeriksa setiap media penyimpanan sesuai urutan yang Anda tentukan, dan menentukan apakah ia dapat melakukan booting dari perangkat itu (melalui data MBR). Jika bisa, itu bisa - jika tidak, ia terus berputar melalui perangkat lain (sekali lagi, sesuai urutan yang Anda pilih).

Setelah BIOS memindahkan kendali ke bootloader pada drive # 1 yang kebetulan tidak memiliki partisi "bootable" - bagaimana tepatnya bootloader pada drive kedua dijalankan?

Setelah perangkat boot yang valid ditemukan (mis. Bendera yang dapat di-boot diatur, dan pemeriksaan tambahan lainnya lulus), BIOS menyalin sektor MBR ke dalam RAM. BIOS kemudian memindahkan penunjuk instruksi ke awal lokasi ini (menggunakan JUMPinstruksi), di mana segmen kode MBR berada, dan komputer kemudian mulai.

Jika BIOS mendukung Spesifikasi Booting BIOS , kode MBR dapat mengembalikan kontrol ke BIOS dengan instruksi tertentu, menandakan kegagalan boot dan mendorongnya untuk mencoba perangkat berikutnya. BIOS lama hanya mencetak pesan kesalahan. Yang bagus jika BIOS Anda mendukungnya adalah apakah Anda bisa boot dari USB.

Pemahaman saya adalah bahwa satu-satunya hal yang biasanya diperiksa BIOS pada MBR adalah tanda tangannya di akhir sektor 512-byte, dan kemudian hanya mentransfer kontrol ke bootloader awal yang terletak di 446 byte pertama dari sektor boot.

Ini benar, meskipun harus dicatat bahwa sebagian besar BIOS modern juga akan mencari Tabel Partisi GUID serta tabel gaya MBR konvensional yang lebih lama.

Apakah ini menyiratkan bahwa 446 byte pertama dari sektor boot HARUS berisi beberapa kode bootloader yang berarti bahkan jika disk tidak dapat di-boot?

Tidak , tetapi drive harus memiliki tabel partisi MBR atau GUID yang valid - jika tidak, ia tidak akan terdeteksi oleh komputer. Sementara bagian kode MBR memang bisa kosong, sektor pertama drive harus memiliki MBR / GPT yang terbentuk dengan baik.

Penerobosan
sumber
Terima kasih atas jawaban yang sangat terperinci. Jadi kriteria untuk perangkat yang dapat di-boot adalah keberadaan partisi yang dapat di-boot dalam tabel partisi dan beberapa "pemeriksaan tambahan lainnya"? Saya hanya sedikit bingung karena dalam pertanyaan asli pada AskUbuntu penulis menunjukkan bahwa semua partisi pada drive tidak dapat di-boot dan masih dia melihat kesalahan yang disebabkan oleh GRUB rusak - yang seharusnya tidak diminta oleh BIOS sama sekali karena drive tidak memenuhi kriteria "bootable", jadi BIOS seharusnya hanya melewatkan drive dan pergi ke yang berikutnya
Sergey
@ Tampaknya saya melihat pertanyaan itu, dan tidak yakin. Ada kemungkinan MBR rusak, atau flag yang dapat di-boot diatur ke nilai yang tidak valid (tidak yakin bagaimana fdiskmenangani kasus-kasus itu, meskipun versi asli memang menandai header MBR yang tidak valid). Saya menyarankan OP untuk memposting header MBR mentah, tetapi dia mungkin juga ingin "beralih" on / off flag bootable (untuk mengatur / mengatur ulang flag secara manual).
Terobosan
Ingatlah bahwa kode BIOS tidak umum. Ini agak spesifik untuk setiap mainboard, jadi ia tahu jenis drive apa yang mungkin terpasang pada port apa.
LatinSuD
Jawaban ini tidak sepenuhnya benar. FWIU, memeriksa partisi yang aktif dan yang lainnya adalah sesuatu yang kode boot MBR "default" lakukan, bukan BIOS. NeoSmart menyajikan deskripsi yang lebih masuk akal: "Pada PC yang kompatibel dengan IBM (pada dasarnya, semuanya), dua byte terakhir dari MBR 512-byte disebut tanda tangan boot dan digunakan oleh BIOS untuk menentukan apakah boot drive yang dipilih benar-benar dapat di-boot atau tidak. tidak." Bagian terakhir salah. BIOS lama dapat melakukan booting dari GPT (dengan kode booting BIOS yang sesuai), karena pada dasarnya booting "gaya bebas".
Daniel B
@DanielB kedua hal ini secara langsung dibahas dalam jawaban: "BIOS biasanya memeriksa MBR adalah tanda tangannya di akhir sektor 512-byte, dan kemudian hanya mentransfer kontrol ke bootloader awal yang terletak di 446 byte pertama dari sektor boot " dan " sebagian besar BIOS modern juga akan mencari Tabel Partisi GUID serta tabel gaya MBR konvensional yang lebih lama " .
Terobosan