Saya baru-baru ini menemukan ntldr
modul GRUB .
Rupanya salah satu hal yang dapat digunakan adalah sebagai alternatif chainloader
untuk mem-boot Windows NT = = 6.0 versi seperti pada contoh di bawah ini. (Sangat berguna jika Volume Boot Record untuk partisi Windows, eh, rusak.)
menuentry "Windows 7 (bootmgr on /dev/sda1)" --class windows --class os {
insmod part_msdos
insmod ntfs
insmod ntldr
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 1EA0019AA0017A13
ntldr ($root)/bootmgr
}
Di mana saya dapat mempelajari lebih lanjut tentang bagaimana arahan boot ini dapat digunakan? Saya tidak melihatnya terdaftar ketika saya melihat versi HTML dari manual GNU GRUB .
Membalas jawaban ckhan
Terima kasih banyak! Saya sudah cukup banyak memutuskan bahwa saya harus mencoba menggali kode sumber untuk mempelajari lebih lanjut tentang ntldr
perintah / modul GRUB . Tetapi Anda telah melakukan pekerjaan yang jauh lebih baik daripada saya.
Tidak pernah terpikir oleh saya untuk melihat arsip email untuk melihat diskusi desain apa yang dimiliki orang yang menulis kode. Metode itu kedengarannya bisa sangat membantu di masa depan. Terima kasih telah menyebutkannya.
Pikiranku tentang ntldr
dukungan GRUB
- Meskipun saya tidak begitu yakin seberapa besar perbedaannya,
ntldr
modul, bukan perintah. Atau mungkin perintah yang dimuat secara dinamis jika Anda mau.
Mengikuti tautan kode sumber dan melihat baris 152 (GRUB_MOD_INIT
) dan 159 (GRUB_MOD_FINI
) Anda dapat melihat kode untuk dimuat dan ... Saya kira ... bongkar modul.
GRUB rupanya mengimplementasikan banyak fungsi yang Anda anggap " perintah " sebagai modul. Satu-satunya perbedaan dalam penggunaan yang saya ketahui adalah bahwa sebelum menggunakan modul kita harus memastikan telah dimuat dengan perintahinsmod ntldr
.
Selain itu: Saya selalu bertanya-tanya mengapa GRUB tidak mendukungreboot
. Ternyata perintah itu ada, tetapi itu adalah modul. Jikareboot
kembaliunknown command
, makainsmod reboot
memungkinkan GRUB untuk "mengingat"reboot
perintah.
Selain itu: Kapan dan mengapa GRUB mungkin " menurunkan " modul, saya belum tahu. Mungkin itu adalah hasil dari sesuatu yang mirip dengan " pengumpulan sampah " ?? Saya telah memperhatikan bahwa sekali memuat modul-modul tampaknya tetap, bahkan setelah sistem dimatikan dan reboot. Tentu saja, Anda tidak dapat bergantung pada hal itu, tetapi tampaknya itulah yang sering terjadi dalam praktik. - Sangat menarik bahwa mereka berdasarkan
ntldr
padachainloader
. Saya belum melihatchainloader.c
kodenya. Saya kira itu mungkin juga melakukan pemindahan beban dalam mode nyata Intel 16-bit ?
Saya saya agak senang mereka tidak menerapkanntldr
sebagai pilihanchainloader
. Saya setuju dengan Vladimir. Apa pun kesamaan di bawah penutup, sintaks penggunaannya sangat berbeda. Pendekatan saat ini kurang kludgy. - Menarik juga untuk melihat kurangnya antusiasme untuk menambahkan perintah ini ke GRUB. Rupanya para pengembang GRUB berpikir kerusakan pada Windows Partition Boot Record (PBR) sangat tidak mungkin. Namun, saya dapat membuat sketsa bagaimana melakukannya selama instalasi yang cukup biasa.
Mulailah dengan mengasumsikan pengguna menginstal Windows pada sistem mereka. Mereka sekarang menginstal Ubuntu (12,04 LTS) " bersama " Windows. Pada satu titik selama instalasi Ubuntu mereka tampaknya dapat memutuskan di mana mereka ingin menginstal GRUB. Untuk alasan yang tidak dapat saya tebak, beberapa dari mereka memutuskan untuk menginstal GRUB ke dalam partisi tempat Windows diinstal.
Instalasi selesai dan mereka berhasil memulai Ubuntu. Namun, ketika mereka mencoba untuk memulai Windows dengan memilih entri di menu GRUB, Windows tidak memulai. Alih-alih mencoba memulai Windows dengan GRUB, cukup tampilkan kembali menu GRUB?
Mengapa? Yah, tampaknya ketika mereka memilih untuk menginstal GRUB ke bagian partisi windows dari apa yang sebenarnya terjadi adalah PBR untuk partisi Windows ditulis dengan GRR PBR. Jadichainloader +1
tidak berantai memuat bootloader Windows, tetapi sebaliknya memuat kembali GRUB.
IMO, paling aman cepat cara untuk memudahkan user untuk booting Windows dalam situasi yang menggunakan GRUB baruntldr
. Saya bertanya-tanya apakah ini akan menarik bagi para pengembang. Saya berharap mereka tidak mengantisipasi skenario ini.
Saya ingin tahu bootloader apa selain Windows, ntldr
dan bootmgr
, ntldr
perintah GRUB mungkin dapat memuat?
Jawaban:
Meneliti fitur tidak berdokumen
Anda benar
ntldr
perintah (itu perintah, bukan modul) tidak didokumentasikan. Jadi itu alasan yang bagus untuk beberapa petualangan dalam kode arkeologi .Setiap kali saya menemukan fitur tidak berdokumen, hal pertama yang harus dilakukan adalah memeriksa sumber.
Sumber di repo git Savannah menunjukkan bahwa itu digabung ke jalur utama pada Agustus 2010.
Cabang sumber tampaknya tidak lebih, tetapi Anda masih dapat melihatnya muncul pada awal tahun itu , pada bulan April 2010. Komentar checkin, dari "Vladimir 'phcoder' Serbinenko" adalah
Itu didasarkan sangat dekat pada
chainloader
perintah, begitu banyak sehingga nama file di komentar header masih belum diperbarui.Sekarang kami memiliki checkin yang tepat, dan sebuah nama, kami dapat memeriksa arsip surat. Anda dapat melihat di mana para pengembang mendiskusikan tentang menambahkan fitur ini setahun sebelumnya di milis grub-devel :
Beberapa kutipan yang relevan dari utas itu:
Menjawab pertanyaan Anda
Setelah mempelajari semua itu, apa yang kita ketahui tentang bagaimana itu dapat digunakan?
Ini didasarkan pada chainloader.
Dibutuhkan argumen tunggal: file untuk membuka.
Ini menghindari catatan boot partisi: sehingga dapat memotong korupsi di sana. Lihat posting ini yang merinci bagaimana mereka mengujinya.
Itu hanya sekitar 160 baris kode , Anda dapat melihat tidak banyak lagi di sana.
Semoga ini bermanfaat!
sumber