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.
Jawaban:
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:
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.
sumber