Bagaimana saya mengkonfigurasi grub untuk mem-boot kernel Linux dari hard drive USB?

17

Saya memiliki hard drive laptop di kandang eksternal yang saya gunakan sebagai pendrive besar. Sebagai tambahan, saya telah menginstal Linux di atasnya, jadi saya dapat mem-boot mesin apa pun dengan distribusi pilihan saya (misalnya untuk pemulihan data atau memperbaiki sistem b0rked atau hanya menggunakan laptop yang dipinjam tanpa merusak Windows yang sudah diinstal sebelumnya). Masalahnya adalah, tergantung pada konfigurasi perangkat keras, hard drive USB mungkin terlihat di jalur yang berbeda. Untuk konfigurasi grub, saya hanya menggunakan (hda0,0)karena relatif terhadap perangkat, grub diluncurkan. Saya memiliki entri UUID di /etc/fstab. Saya juga menentukan rootwaitdalam parameter kernel sehingga menunggu subsistem USB untuk menetap sebelum mencoba memasang perangkat.

Apa yang harus saya sampaikan ke kernel root=? Saat ini boot dari flashdisk sekali, periksa pesan debug untuk melihat /dev/sdXperangkat apa yang telah ditetapkan untuk drive USB oleh kernel, kemudian reboot dan edit konfigurasi grub. Saya tidak dapat mengubah apa pun di PC selain mengaktifkan Boot from USB hard drivedi BIOS dan mengaturnya ke prioritas yang lebih tinggi daripada hard drive internal.

Ada berbagai skrip initrd yang menyertakan dukungan untuk UUID di jalur perangkat root, sayangnya yang asli Gentoo (genkernel) tidak mendukung rootwaitdan saya tidak beruntung mencoba menggunakan yang lain.

Proses boot berjalan seperti ini ( sangat mirip di Windows ):

  1. BIOS memilih perangkat boot dan memuat apa pun MBR-nya (yang kebetulan grub stage-1).
  2. Grub memuat konfigurasinya dan file tahap-2 dari perangkat yang telah ditetapkan sebagai root, menggunakan (hd0)untuk perangkat itu diambil dari oleh BIOS.
  3. Grub memuat dan memulai kernel (masih penomoran yang sama, jadi saya bisa menggunakan (hd0,0)lagi).
  4. Kernel menginisialisasi semua perangkat bawaan ( rootwaitlakukan sekarang sihir).
  5. Kernel me-mount partisi tempat partisi tersebut dilewatkan root(ini adalah parameter kernel, bukan parameter grub).
  6. init.dmemulai proses booting pengguna, termasuk pemasangan dari /etc/fstab.

Bagian 5 adalah yang memberiku masalah.

skolima
sumber

Jawaban:

6

Saya pikir jawabannya harus menggunakan salah satu root=LABEL=...atauroot=UUID=...

Tetapi Anda menunjukkan bahwa ini tidak berhasil untuk Anda. Saya akan menyarankan untuk melihat ke dalam jika ada beberapa masalah dengan tindakan initrd Anda.

matli
sumber
Saya tidak punya initrd, itulah masalahnya. genkernel tidak mendukung opsi "rootwait", dan lainnya tidak berfungsi dengan Gentoo.
skolima
2

Saya bisa saja salah atau mungkin hanya salah paham dengan Anda, tetapi bukankah pilihan perangkat boot sesuatu yang akan dikonfigurasikan dari BIOS mesin yang Anda booting?

Saya pikir itu akan menjadi masalah memilih drive USB, yang akan menginstal GRUB sebagai bootloader-nya, dan kemudian memilih distro mana yang ingin Anda boot dari menu GRUB.

Justin Bennett
sumber
2

Kamu bisa memakai:

set root='(hd0,msdos5)'
pengguna40070
sumber