Chainload dua instalasi Grub2

14

Ini benar-benar membuat saya kecewa. Saya memiliki Gentoo dan Ubuntu, keduanya dengan Grub2. Gentoo memiliki /bootpartisi khusus , sedangkan Ubuntu tidak. Saya punya menuentrydi Gentoo's /etc/grub.d/40_customuntuk boot Ubuntu (dan Ubuntu tidak boot OK).

Karena Ubuntu hadir dengan Grub, saya ingin rantaiload ke yang itu, alih-alih mempertahankan entri saya yang mengatur root, kernel, initrd dan yang lainnya. Ini adalah apa yang saya miliki untuk chainloader (Ubuntu aktif /dev/sda4dan saya sudah menginstal Grub di sana):

menuentry 'Chainloader' {
    insmod chain
    set root=(hd0,4)
    chainloader +1
}

Ini memberi saya error: Invalid signaturedan saya tidak menemukan solusi yang tersedia. Bisakah seseorang menunjukkan sesuatu?

Ini adalah hasil dari </dev/sda4 head -c 512 | hd

00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200

Ini adalah hasil dari fdisk -l. /dev/sda1adalah /bootdari Gentoo, Gentoo di /dev/sda2, Ubuntu di /dev/sda4. Ubuntu yang /bootada di /dev/sda4juga.

Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe001152b

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1           9       72261   83  Linux
/dev/sda2              10       13064   104864287+  8e  Linux LVM
/dev/sda4   *       18152       19457    10490445   83  Linux

Tidak ada kesalahan dengan grub-install /dev/sda4 --no-floppy --force

/usr/sbin/grub-setup: warn: Attempting to install GRUB to a partition instead of the MBR.  This is a BAD idea..
/usr/sbin/grub-setup: warn: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
Installation finished. No error reported.
phhehehe
sumber
Jelas Anda belum menginstal bootloader /dev/sda4. Apakah Anda memiliki lebih dari satu disk? Apa tabel partisi Anda? Silakan kirim output dari fdisk -l, dan pesan dari grub-install /dev/sda4 --no-floppy --force.
Gilles 'SO- stop being evil'
ya, saya memperbarui pertanyaan
phunehehe

Jawaban:

4

Anda dapat chainload GRUB2 dari GRUB2, saya baru saja mencobanya seperti yang Anda jelaskan dan berhasil. Namun, informasi yang Anda berikan membuatnya tampak seperti gambar boot tidak tertanam dalam MBR disk (atau tidak semua nol).

Saya akan mencoba ini, meskipun tidak persis menggunakan GRUB2 dari Ubuntu (hanya file konfigurasi itu). Anda dapat membuat entri menu di file konfigurasi Gentoo GRUB2 yang memuat file konfigurasi Ubuntu. Ada dua cara yang saya lihat untuk melakukan ini.

Yang akan saya gunakan adalah dengan perintah normal , yang memungkinkan Anda menentukan file konfigurasi untuk memuat untuk mode normal. Jika Anda menggunakan rute ini, ada perintah yang disebut normal_exit yang dapat Anda tambahkan sebagai item khusus di konfigurasi Ubuntu Anda yang memungkinkan Anda kembali ke konfigurasi Gentoo.

Opsi lainnya adalah perintah configfile , yang memungkinkan Anda menentukan file konfigurasi alternatif untuk dimuat. Sepertinya akan lebih sulit untuk "mundur" dari opsi ini.

Informasi lebih lanjut tentang perintah-perintah ini dapat ditemukan di sini .

silvein
sumber
3

Bagian awal dari proses boot terdiri dari memuat kode dari sektor pertama hard drive, yang disebut Master Boot Record (MBR) . Biasanya, Grub ditulis ke dalam sektor hard drive pertama ini dan tidak menjadi sektor pertama dari partisi / boot. Namun, Anda biasanya dapat mengubah ini selama instalasi Linux tetapi dalam rutinitas instalasi modern, ini sering disembunyikan.

Anda mengatakan bahwa Anda telah menginstal Grub ke / dev / sda4, namun konfigurasi Anda terlihat benar dan pesan kesalahan yang Anda posting menyarankan, bahwa Grub mungkin tidak diinstal dengan benar ke dalam partisi yang Anda inginkan untuk memuat rantai. Anda harus boot ke Gentoo, lalu chroot ke partisi Ubuntu. Pastikan / boot sekarang menunjuk dengan benar ke Ubuntu- / boot dan bukan yang Gentoo! Sekarang instal Grub 2 ke sektor pertama dari Ubuntu-partisi / dev / sda4: grub-install /dev/sda4 --no-floppy.

Seperti biasa ketika mengutak-atik MBR dan partisi, pastikan Anda memiliki cadangan fungsional yang terbaru sebelum Anda mulai.

fschmitt
sumber
apakah ada bedanya jika saya boot ke Ubuntu dan menjalankan grub-install? karena itulah yang saya lakukan dan itu tidak berhasil :(
phunehehe
Saya pikir Anda tidak bisa boot ke Ubuntu karena chainloading tidak berfungsi? Tapi tidak, itu tidak akan membuat perbedaan jika Anda boot ke Ubuntu atau chroot ke dalamnya.
fschmitt
@ phunehehe: Pesan kesalahan berarti bahwa Grub belum menemukan tanda tangan bootloader di sektor pertama /dev/sda4(dua byte terakhir harus 0x55 0xaa). Bisakah Anda memposting output </dev/sda4 head -c 512 | hd?
Gilles 'SO- stop being evil'
@Gilles: Saya menambahkan hasilnya ke pertanyaan. Tidak terlihat benar, bukan?
phunehehe
sebenarnya saya harus lari grub-install /dev/sda4 --no-floppy --force, kalau tidak akan ada beberapa keluhan tentang blocklists
phunehehe
-1

Bukankah sda4 akan menjadi (hd0,3) di grub, atau sudahkah hal semacam ini berubah di grub2?

Neal
sumber
ya, saya yakin / dev / sda4 akan menjadi (hd0,4) karena itulah yang telah saya gunakan untuk mem-boot Ubuntu
phunehehe
3
Ya, Grub 0.97 mulai menghitung harddisk dan partisi dengan 0. Grub 2 masih mulai menghitung disk dengan 0 tetapi mulai menghitung partisi dengan 1. Jadi / dev / sda4 adalah hd0,3 di Grub 0.97 dan hd0.4 di Grub 2.
fschmitt