Bagaimana saya tahu jika grub diinstal pada perangkat?

37

Bagaimana saya bisa tahu apakah grub diinstal pada disk, dan jika itu adalah pengaturan apa yang dimilikinya (perhatikan, apa yang dimiliki untuk parameter root)

Saya perlu memeriksa banyak disk dalam perangkat lunak array RAID1 untuk memastikan kedua disk telah menginstal grub, dengan grub pada setiap disk memiliki nilai root yang sesuai.

DrStalker
sumber
3
Bisakah Anda mempertimbangkan untuk menerima jawaban baru di bawah ini? karena jawaban yang diterima sudah usang sekarang
rubo77
@ rubo77, jawaban saya benar pada saat itu, ketika grub0.9x atau lebih rendah digunakan secara umum dan jauh sebelum diubah namanya menjadi grub-legacy. Jika ini mengganggu Anda, saya sarankan untuk mengajukan pertanyaan baru secara khusus grub2. sebagai alternatif, lakukan kampanye untuk mengoreksi setiap pertanyaan dan jawaban yang telah usang melalui berlalunya waktu.
cas
3
Jangan tersinggung. Saya pikir SO adalah basis pengetahuan dan dimaksudkan untuk berubah seiring waktu. Setelah jawaban yang sudah usang harus diperbarui.
rubo77
terkait: askubuntu.com/questions/444855/… | superuser.com/questions/466086/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

28

MEMPERBARUI:

Jawaban ini dari 2009 dan berlaku untuk grub-legacy, bukan grub2.

Anda dapat menggunakan fileuntuk mengidentifikasi GRUB dalam MBR. misalnya

# file -s /dev/sda
/dev/sda: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3
, stage2 address 0x2000, stage2 segment 0x200; partition 1:
ID=0xfd, starthead 1, startsector 63, 1044162 sectors; partition
2: ID=0x82, starthead 0, startsector 1044225, 1028160 sectors;
partition 3: ID=0xfd, starthead 0, startsector 2072385,
1951447680 sectors, code offset 0x48

The root=paramater tidak disimpan di MBR, yang disimpan di GRUB menu.lstberkas yang disimpan pada sistem file (biasanya di / boot / grub direktori dari fs root atau direktori grub dari / boot filesystem - tapi tidak selalu, itu bisa dimana saja).

Anda harus mem-parsing output dari file di atas, menentukan disk / partisi mana menu.lstfile itu aktif, mount, baca dan parsing itu. Anda juga ingin membaca di file grub / default untuk mengetahui entri menu grub mana yang merupakan default, karena itu mungkin yang memiliki root = parameter yang paling Anda minati.

cas
sumber
Dalam hal ini saya perlu cara untuk memastikan grub mencari menu.lst di tempat yang tepat ... di suatu tempat boot loader harus diberi tahu ke disk & partisi mana yang harus dituju sehingga bisa mendapatkan menu boot.
DrStalker
ada banyak info berguna tentang grub di halaman beranda grub gnu.org/software/grub , grub wiki grub.enbug.org , dan di wikipedia en.wikipedia.org/wiki/GRUB
cas
8
Ini tidak lagi benar dengan grub2. Lihat jawaban @ benrifkah sebagai gantinya.
Paul Tomblin
52

Metode Alternatif

file -stidak bekerja untuk saya di Ubuntu Lucid karena file ajaib perintah file saya sudah ketinggalan zaman . Cara lain untuk melakukan ini jika file ajaib Anda belum mengikuti perubahan GRUB adalah dengan memeriksa 512 byte pertama perangkat menggunakan ddperintah seperti ini:

user@host:~$ sudo dd bs=512 count=1 if=/dev/sda 2>/dev/null | strings
ZRr=
`|f
\|f1
GRUB
Geom
Hard Disk
Read
 Error

Ini mengirimkan output dari ddperintah melalui stringsperintah sehingga menghapus karakter yang tidak diinginkan (statistik transfer dibuang ke /dev/null).

Jika Anda melihat pesan apa pun yang GRUB akan tampilkan ketika menemui kegagalan maka Anda sudah menginstal grub.

Kiat tip untuk louib di ubuntuforums.org untuk menjawab di pos yang dilindungi kata sandi ini: http://ubuntuforums.org/showthread.php?t=363372

Bagi yang penasaran inilah yang saya dapat file -s:

user@host:~$ sudo file -s /dev/sda
/dev/sda: x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 20
48, 337211392 sectors; partition 2: ID=0x5, starthead 254, startsector 337215486, 1434214
6 sectors, code offset 0x63

Tidak ada apa-apa tentang GRUB di sana secara khusus.

benrifkah
sumber
5
Spot on. Jawaban yang diterima tidak bekerja untuk saya di beberapa mesin, tetapi jawaban Anda berhasil.
Cerin
13
Jawaban yang diterima ditulis pada tahun 2009 dan (sebagaimana harus jelas dari penyebutan menu.lst daripada grub.cfg) adalah untuk grub1 alias "grub-legacy". jelas hal-hal telah berubah sejak saat itu, dan grub2 tidak memasukkan pengenal di MBR. jika itu bekerja pada beberapa mesin untuk Anda tetapi tidak pada yang lain, itu akan menyiratkan Anda memiliki grub1 pada beberapa dan grub2 pada yang lain.
cas
1
Terima kasih atas klarifikasi Craig. Sistem saya awalnya mencoba file -sperintah pada menggunakan grub-pc yang tampaknya GRUB2 jadi sepertinya Anda sebagian benar. Namun, saya berlari file -spada beberapa sistem lain yang menjalankan GRUB 0.97 dan pada beberapa itu berfungsi sementara yang lain tidak. Perbedaan antara sistem ini adalah dalam angka dalam file ajaib yang datang dengan perintah file. Bertukar file angka ajaib mengkonfirmasi bahwa definisi dari sistem yang tidak bekerja menyebabkan sistem kerja gagal.
benrifkah
7

Anda dapat menggunakan grub-emuuntuk melihat menu yang akan ditampilkan grub ketika mesin melakukan reboot.

$ sudo apt-get install grub-emu
$ sudo grub-emu

Pada mesin desktop saya, menu ditampilkan seperti yang diharapkan, meskipun jika saya benar-benar berpura-pura mem-boot kernel, saya mendapat kesalahan "no such device". Saya pikir itu perilaku yang diharapkan.

Pada VPS DigitalOcean saya tidak ada entri yang ditampilkan di menu grub, meskipun server benar-benar reboot dengan baik. (Ini adalah VPS 2013, sehingga jarak tempuh Anda mungkin beragam.)

Beberapa catatan saat menjalankan grub-emu:

  • Di X-windows, jika Anda ingin berinteraksi dengan grub, Anda perlu fokus keyboard berada di terminal tempat Anda menjalankan grub-emu, dan bukan pada jendela yang muncul.
  • Anda dapat keluar dari emulator dengan menekan clalu mengetik exit.
  • Setelah keluar, emulator terminal Anda mungkin dalam kondisi buruk (mis. Enter tidak akan ditampilkan pada baris baru). Perbaiki itu dengan mengetik reset. (Jangan khawatir itu tidak akan memulai ulang mesin Anda. Itu hanya akan membersihkan terminal Anda.)
joeytwiddle
sumber
Mengetik cdiikuti oleh exittidak berhasil untuk saya.
Faheem Mitha
1
pastikan Anda memiliki fokus pada terminal asli yang menelurkan jendela grub dan bukan jendela grub itu sendiri (butuh waktu sedetik untuk saya sadari)
Madivad