Server Ubuntu, tabel partisi gpt, mdadm, grub boot gagal


9

Detail sistem kerja dasar:

Saya menggunakan CD server Ubuntu 12,04 untuk menginstal server.

Saya punya 4 disk. Pada semua disk saya melakukan hal berikut, mirip dengan howto ini :

  • menciptakan partisi swap 2GB
  • menciptakan partisi 256 GB / boot
  • menciptakan partisi RAID10 64 GB (untuk root)
  • menciptakan partisi RAID10 besar mengambil sisa ruang

Saya memformat boot sebagai ext3. Saya mengatur RAID10 pada partisi root dan besar. Saya memformat root satu ext4. Saya membuat volume logis pada yang besar, dan memformatnya ext4.

Sistem yang dihasilkan bekerja dengan baik, dan melakukan booting dengan baik.

Detail masalah:

Kemudian saya memutuskan untuk mendokumentasikan prosedur kegagalan. Sebagai langkah pertama, saya memutuskan untuk menginstal ulang grub.

# grub-install /dev/sda
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
# grub-install /dev/sdb
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..

Jadi sepertinya gagal, tetapi juga sepertinya menyerah dan tidak melakukan perubahan. Jadi saya reboot. Boot gagal. Itu hanya hang dengan layar hitam dengan kursor berkedip sekitar 4 baris ke bawah. Jika saya boot sambil menahan "Shift", saya mendapatkan kata "GRUB" di sebelah kiri kursor, tetapi tidak ada prompt interaktif.

Pada titik ini, saya menggunakan boot-repair-disk untuk menghasilkan laporan ini: http://paste.ubuntu.com/966531/

Catatan dalam laporan di atas, dikatakan bahwa bootloader tidak menunjuk ke sektor yang benar untuk core.img. (sda adalah cd virtual; sdb adalah disk boot; sdc adalah mirror dari sdb, tetapi boot tidak dicerminkan, hanya ada partisi yang tidak terkait yang ada dan diformat ext3; sdd dan sde memiliki ruang untuk boot tetapi tidak diformat)

Kemudian saya boot dari CD server Ubuntu, memulai sistem penyelamatan, dan mengeluarkan perintah berikut, yang selesai tanpa kesalahan (di mana sda adalah CD virtual, dan b, c, d, e adalah disk yang merupakan a, b, c , d pada perintah grub sebelumnya):

# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

Pada titik ini, saya menggunakan boot-repair-disk untuk menghasilkan laporan ini: http://paste.ubuntu.com/966561/

Perhatikan bahwa dalam laporan di atas, masalah tentang core.img hilang. Tampaknya menunjuk ke sektor yang benar.

Sekarang jika saya mencoba untuk boot, saya mendapatkan prompt grub. Jika saya menjalankan "set", saya melihat bahwa root ditemukan dan diatur. Jika saya menjalankan "ls /", saya melihat direktori root saya dari volume serangan, termasuk file kernel vmlinuz. Jika saya mengetik "ls / vmlinuz" dikatakan "error: file not found." Dikatakan kesalahan yang sama jika saya menggunakan perintah "linux" untuk mencoba memuat kernel. File vmlinuz tidak terdaftar jika saya menggunakan "ls -l /".

Rincian yang terlalu banyak, jika Anda ingin mengikuti:

Saya perhatikan juga tidak ada / boot / grub/grub.cfg, jadi saya berlari

# grub-mkconfig -o /boot/grub/grub.cfg

Tapi masalahnya tetap ada.

Jika saya menggunakan alat "gptsync", tidak ada perubahan dalam perilaku ini.

Boot-repair-disk tidak akan memperbaiki sistem, karena ia ingin saya boot dengan bios yang diaktifkan EFI. Saya sempat melihat ini, tapi saya tidak tahu bagaimana itu bekerja. Saya menemukan shell UEFI di opsi boot saya, tetapi saya tidak tahu apa-apa tentang itu, dan tidak melihat cara mengubah startup dari sana (mis. Untuk mem-boot CD dari shell EFI itu).

Saya juga sudah membaca halaman ini , tetapi Ubuntu tidak datang dengan perintah "grub", jadi saya tidak bisa mengikutinya dengan tepat. Saya hanya bisa menginstal perintah itu, tetapi saya lebih penasaran untuk mengetahui bagaimana installer Ubuntu berhasil menginstalnya daripada memiliki setup yang berbeda. Apakah itu menggunakan blocklists?

Berikut ini adalah output dari parted, saat boot pada boot-repair-disk (di mana di sini sdb adalah hard disk pertama, sda saat boot dari disk, dan "boot" berubah menjadi "bios_grub" di tautan tempel ke-2):

Model: ATA Hitachi HUA72303 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name   Flags
1      17.4kB  2000MB  2000MB  linux-swap(v1)  swap1
2      2000MB  2256MB  256MB   ext3            boot1  boot (this says bios_grub in 2nd link)
3      2256MB  66.3GB  64.0GB                  root1  raid
4      66.3GB  3001GB  2934GB                  data1  raid

Berikut ini adalah mesin virtual super tua yang tidak terkait untuk perbandingan (untuk siapa pun yang tidak terbiasa dengan boot-repair-disk ): http://paste.ubuntu.com/966799/

Berikut ini adalah paste terbaru dari sistem masalah, setelah menjalankan grub-mkconfig di atas, dan juga mengatur "bios_grub" kembali ke "boot". http://paste.ubuntu.com/966808/

Membandingkan keduanya, ini terlihat menarik:

sdb2: __________________________________________________________________________

File system:       
Boot sector type:  Grub2's core.img
Boot sector info: 
Mounting failed:   mount: unknown filesystem type ''

md/bcserver8:0: ________________________________________________________________

File system:       ext4
Boot sector type:  -
Boot sector info: 
Operating System:  Ubuntu 12.04 LTS
Boot files:        /boot/grub/grub.cfg /etc/fstab /boot/grub/core.img

Sepertinya raid memiliki file boot, dan sdb2 tidak diformat. (meskipun demikian, sistem melakukan boot sebelum menjalankan grub-install). Dari CD cadangan, "mount -t ext3 / dev / sdb2 / boot" gagal. Tetapi masuk akal bahwa ini akan membingungkan hal-hal, karena grub menggunakan partisi 2 secara eksplisit (2 pada perintah parted yang mengaktifkan bios_grub).

Jadi saya melakukan sesuatu seperti ini:

# mkfs.ext3 -L boot1 /dev/sdb2
# mv boot boot_on_root
# mkdir boot
# mount /dev/sdb2 boot
# rsync -avHP boot_on_root/ boot/
# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

Kemudian reboot, dan saya memiliki layar hitam lagi, tidak ada prompt. http://paste.ubuntu.com/966848/

Jadi pada titik ini, dugaan saya adalah bahwa ketika bios_grub diatur, grub tidak menginstal ke MBR, dan bukan ke sistem file ext3 pada ext3, tetapi pada partisi itu sendiri, seolah-olah itu adalah EFI ... yang jelas akan mengacaukan menaiki sistem file ext3 di sana. Aand dari bacaan singkat saya tentang EFI, kedengarannya seperti EFI mengasumsikan partisi pertama adalah boot, tetapi dalam kasus saya yang pertama adalah swap, dan juga harus FAT daripada sesuatu yang tidak dapat digerakkan ... jadi karena itu membuat sedikit / tidak ada akal, saya masih benar-benar tersesat tanpa petunjuk. [EDIT: sekarang saya punya petunjuk ... lewati sedikit untuk pembaruan]

Dan sekarang ketika saya mengklik perbaikan di boot-repair-disk , ia menanyakan hal lain. Terakhir kali kesalahan disembunyikan di bawah jendela dan saya harus menyeret yang lain untuk melihatnya. Kali ini jendela utama hilang, dan jendela baru mengatakan:

GPT detected.       You may want to retry after creating a
BIOS-Boot partition (>1Mo, flag). Do you want to continue?

Jadi saya mengklik ya, dan dikatakan berhasil diperbaiki, dan membuat tempel lagi: http://paste.ubuntu.com/966862/

Tapi saya masih memiliki layar hitam dengan kursor yang berkedip.

Sekarang teori saya adalah bahwa boot ditimpa oleh non-lemak non-EFI yang hanya kode grub yang seharusnya ada di sektor 0-63 sebelumnya. Untungnya saya menemukan pernyataan yang sangat jelas di halaman ini, yang mungkin melengkapi pemahaman saya tentang apa artinya semua ini. Dan kemudian setelah saya menemukan itu, Jeremy memposting jawaban yang jika benar, mengkonfirmasi bahwa ini adalah konsep kunci yang hilang. http://blog.psych0tik.net/2011/08/grub-embedding-blocklists-and-bios_grub-partitions/

Pertanyaan:

Apa yang sedang terjadi? Kenapa grub gagal boot? Mengapa dikatakan "file tidak ditemukan"?

Mengapa grub tidak ingin menginstal tanpa pengaturan ini saya atur dengan parted (yang tidak diatur oleh installer Ubuntu)? Saya pikir semua yang saya butuhkan untuk menginstalnya adalah boot / terpisah yang tidak ada dalam LVM atau perangkat lunak RAID, karena root saya di RAID dan tabel partisi adalah GPT.

Bagaimana penginstal CD Ubuntu menginstalnya tanpa masalah ini, dan tanpa pengaturan bios_grub?

Saya juga akan mempertimbangkan untuk menggunakan EFI. Jika ini adalah ide yang bagus, dan ada cara standar untuk mengaturnya, saya selalu siap untuk mempelajari hal-hal baru.

Jawaban tercepat yang akan membuat saya bahagia, bahkan tanpa menjawab semua pertanyaan saya, adalah seperangkat perintah yang bisa saya jalankan dari CD cadangan untuk memperbaiki bootloader dengan cara yang sama seperti CD instal melakukannya. Akan lebih baik juga jika saya bisa menjalankannya dengan sistem boot, bukan CD.


Bisakah Anda menambahkan hasil cetak dari berpisah?
Jeremy

Anda dapat melihat bahwa di 2 tempel tautan pada baris 993, tetapi per permintaan, saya akan menambahkannya ke pertanyaan saya.
Peter

Jawaban:


8

Solusinya adalah dengan menggunakan partisi bios_grub, yang tidak sama dengan partisi / boot.

Secara default, partisi bios_grub adalah 1MiB, dan partisi tersebut harus ditandai bios_grub. Milik saya adalah partisi pertama pada disk saya. Jika partisi 2 Anda sebenarnya / boot sebagai bagian menyarankan, itu tidak benar dan Anda harus membuat partisi 1MiB lain.

Dengan GPT dan GRUB2 sistem file minimum memiliki tiga partisi: bios_grub, root, swap. (tidak sepenuhnya yakin swap diperlukan)

Mengapa grub gagal boot setelah menjalankan "grub-install"?

Tidak dikenal ... Anda akan berpikir itu tidak akan mengubah apa pun jika dikatakan dengan jelas itu tidak dapat disematkan sehingga tidak bisa bekerja.

Mengapa dikatakan "file tidak ditemukan"?

/ vmlinuz adalah symlink yang menggunakan partisi boot, dan partisi boot rusak. Kode bios_grub ditulis di atas struktur ext3-nya. Ini mungkin berarti bahwa / boot tidak di-mount, dan file grub terlihat benar-benar ada di sistem root, yang tidak mengandung kernel.

Mengapa grub tidak ingin menginstal tanpa pengaturan ini saya atur dengan parted

Tabel partisi GPT tidak memiliki ruang untuk bootloader, tidak seperti MBR. Jadi partisi tertentu harus dibuat untuk menyimpan kode boot. Sebelum menjalankan "grub-install", tentukan partisi ini dengan perintah:

    parted /dev/sda set 1 bios_grub on

Saya pikir semua yang saya butuhkan adalah boot / terpisah. Bagaimana penginstal CD Ubuntu menginstalnya tanpa pengaturan bios_grub?

Persyaratan ini tampaknya merupakan semua yang diperlukan untuk penginstal Ubuntu, tetapi ia menciptakan sistem yang tidak standar yang mudah rusak.

Ketika GRUB mengatakan "Label partisi GPT ini tidak memiliki Partisi Boot BIOS ", itu berarti partisi bios_grub, bukan / boot.


Terima kasih. Ini sebenarnya sangat dekat dengan apa yang saya kerjakan sekarang. Lihat saya "Saya masih benar-benar hilang tanpa petunjuk." bagian di atas. Sekarang teori saya adalah bahwa boot ditimpa oleh non-lemak non-EFI yang hanya kode grub yang seharusnya ada di sektor 0-63 sebelumnya. Saya sedang mengerjakan percobaan, dan kemudian akan memberi tahu Anda bagaimana hasilnya.
Peter

Apakah Anda menggunakan Ubuntu? Apakah ada cara penginstal Ubuntu dapat menginstal dengan benar menggunakan partisi bios_grub?
Peter

@ Peter saya menggunakan Ubuntu, dan jika Anda melakukan partisi terpandu installer harus mengaturnya dengan benar. Saya tahu itu berlaku untuk saya dengan pemasang 11.10.
Jeremy

Terima kasih banyak. Ini jawabannya. Selanjutnya saya akan mencoba dengan pengaturan yang lebih kompleks (raid dan lvm pada saat boot) dan kemudian saya akan mengedit jawaban Anda dengan detail.
Peter
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.