Bagaimana cara memeriksa drive yang grub2 sebenarnya telah menginstal MBR?

17

Saya menggunakan sistem Debian / Squeeze (dengan sejarah akan kembali ke setidaknya Woody) yang ditingkatkan menjadi grub2 sebagai bagian dari peningkatan Squeeze. Semua berfungsi dengan baik, tapi saya akan mengacaukan konfigurasi disk.

Saat ini mesin menjalankan 2 80GB drive dengan partisi RAID1-ed /, / home dan / boot (ada sepasang drive dengan RAID1-ed "/ data" dan beberapa swap, jika ada yang bertanya-tanya di mana swap berada , tapi aku tidak menyentuh mereka).

Saya telah menambahkan 2 130GB SSD, mempartisasinya setidaknya sebesar partisi pada drive 80GB, dan bermaksud untuk beralih ke drive SSD baru dengan menumbuhkan RAID1 untuk memasukkannya, menunggu sinkronisasi, kemudian menghapus yang lama drive dari array sehingga hanya SSD yang tersisa (dan kemudian menumbuhkan sistem file). Tapi perselisihan mdadm / ext3 bukan apa pertanyaan ini tentang ...

Itu akan meninggalkan saya dengan 2 drive 80GB (IDE) usang yang ingin saya hapus dari mesin. Kekhawatiran saya adalah bahwa menghapusnya akan membawa beberapa MBR penting bersama mereka. Bagaimana cara memastikan mesin tetap dapat dibooting?

Lebih spesifik:

  • Ketika saya melakukan upgrade Squeeze, saya ingat ada beberapa pilihan yang disajikan untuk menginstal grub2 (saya pergi dengan default, yang semuanya adalah drive). SSD tidak ada di mesin pada saat itu; bagaimana saya bisa menjalankan kembali ini untuk mendapatkan grub untuk diinstal pada MBR SSD? (Saya menduga itu adalah konfigurasi ulang dpkg dari beberapa paket).

  • Bagaimana saya menemukan drive yang menurut grub2 diinstal? Astaga, ada hampir 200 file di bawah / boot / grub / hari ini! Di mana mencarinya? Selain itu, agak aneh bahwa /boot/grub/device.map.auto hanya mencantumkan 3 drive saat ini (2 dari 80GB tetapi hanya satu dari pasangan drive lainnya, dan tidak ada SSD). Bagaimana cara saya mendapatkan informasi terkini? ( Pembaruan: itu adalah herring merah; device.map.auto tampaknya menjadi peninggalan dari tahun yang lalu; device.map tampak masuk akal pada pembaruan oleh grub-mkdevicemap. Pikirkan paranoia saya di daerah ini berasal dari BIOS mobil lama yang akan susun ulang urutan perangkat yang terlihat oleh GRUB sambil lalu).

Hasil: semua berjalan dengan baik dan saya sekarang memiliki dua drive IDE 80GB lama di luar kotak, dan sistem boot cepat dan cepat yang menjalankan SSD RAID1-ed dengan semua filesystem diubah ukurannya hingga ukuran partisi baru mereka. "Potongan puzzle Grub yang hilang" lainnya yang saya cari adalah dpkg-reconfigure grub-pcyang meminta disk untuk mempertahankan MBR. Jawaban Harun sebenarnya paling meyakinkan saya bahwa ini bekerja seperti yang diharapkan, maka menerima jawaban itu.

timday
sumber

Jawaban:

17

MBR adalah 512 byte, jadi cara cepat untuk melihat apakah GRUB ada ...

dd if=/dev/sda bs=512 count=1 | xxd

Itu kesedihan MBR, saya melihat "GRUB" di tambang di byte 0x17F = 383.

dd if=/dev/sda bs=1 count=4 skip=383

Ketika saya melakukan itu, ia mencetak ' GRUB' diikuti oleh ddoutput.

Anda dapat membungkusnya dalam bash forloop atau sesuatu untuk melewati lebih banyak drive. jika Anda tidak ingin melakukannya secara manual.

Aaron D. Marasco
sumber
4
Hanya tambahan kecil - karena posisi GRUB cenderung berubah dari versi ke versi, orang dapat menggunakannya dd if=/dev/sda bs=1 count=512 | grep -aob GRUB. Itu akan mengembalikan posisi marker di dalam sektor boot.
Alessandro Santini
16

Ada beberapa langkah dalam proses boot (saya menggambarkan BIOS PC tradisional):

  1. BIOS membaca sektor pertama (512 byte) dari disk boot.
  2. Kode di sektor pertama ini membaca data dan kode lebih lanjut di lokasi tetap melalui antarmuka BIOS. Antarmuka BIOS ini hanya memperlihatkan dua hard disk: disk 0 adalah di mana pun sektor pertama dibaca, dan disk 1 adalah disk lain yang tidak mudah diprediksi jika Anda memiliki lebih dari dua. Sektor boot berisi byte yang menunjukkan hard disk mana data lebih lanjut aktif; ini adalah disk yang berisi /boot/grub.
  3. Kode yang dimuat pada tahap sebelumnya memahami partisi, sistem file, dan gagasan tingkat tinggi lainnya. Data termasuk lokasi sistem file (yaitu seperti string (hd0)/boot/grub) yang menentukan di mana menemukan grub.cfgdan selanjutnya modul Grub.
  4. grub.cfg dijalankan, biasanya untuk menampilkan menu dan boot OS.

Sektor boot dihasilkan oleh grub-setup, biasanya dipanggil melalui grub-install. Sektor boot berakhir pada disk apa pun yang Anda tentukan (dalam sintaks Linux) pada baris perintah grub-installatau grub-setup. Anda dapat memeriksa apakah Anda memiliki sektor boot pada disk dengan menjalankan file -s /dev/sda. Karena Anda menambahkan disk baru dan ingin mem-boot darinya, Anda harus menjalankannya grub-installdi disk baru. Menjalankan grub-installbeberapa kali pada disk yang sama tidak berbahaya.

Bagian yang sulit adalah pada langkah 2 di atas. Jika memungkinkan, letakkan Grub (yaitu /boot/grubdirektori) pada disk boot BIOS (atau, mendekati ini dari arah lain, beri tahu BIOS Anda untuk boot dari disk di mana /boot/grub). Di sinilah device.mapberperan. Pastikan itu (hd0)dipetakan ke disk yang berisi /boot/grub, lalu jalankan grub-installdi disk itu.

Jika dua disk Anda berada dalam konfigurasi RAID-1 perangkat lunak, Anda akan memiliki sektor boot yang identik. Ini adalah perilaku yang diinginkan: jika satu disk yang merupakan disk boot BIOS gagal, boot dari disk yang lain hanya akan berfungsi (karena mereka berisi byte yang sama di lokasi yang relevan yang sama). Jika Anda hanya mem-mirror partisi tertentu, menginstal sektor boot hanya memengaruhi salah satu disk. Anda harus menjalankan grub-installlagi pada disk kedua, setelah mengubah device.mapuntuk mengaitkan (hd0)dengan disk yang berisi salinan cermin kedua/boot/grub .

Langkah 3 cukup rumit, tetapi biasanya berhasil. Pada langkah 4, Grub menemukan sistem file oleh UUID atau mencari file bernama, sehingga Anda tidak perlu lagi khawatir tentang berbagai cara untuk menunjuk disk.

Gilles 'SANGAT berhenti menjadi jahat'
sumber