klaim `install-grub` bahwa saya memiliki beberapa label partiton dan bahwa menanamkan tidak mungkin

19

Saya mencoba menginstal GRUB di komputer desktop non-booting, tetapi saya mengalami beberapa kesalahan. Sumber-sumber lain yang membahas kesalahan ini telah menyebabkan mereka kekurangan ruang disk kosong sebelum partisi pertama (saya memiliki ruang kosong yang diperlukan), atau masalah dengan /boot/grub/grub.cfg(masalah tetap ada bahkan setelah meregenerasi file itu dengan benar).

Saya mem-boot dengan USB langsung dan mencoba menginstal ulang GRUB menggunakan perintah berikut, tapi saya menemukan kesalahan yang mencegahnya bekerja:

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda
Menginstal untuk platform i386-pc.
grub-install: warning: Mencoba memasang GRUB ke disk dengan beberapa label partisi. Ini belum didukung ..
grub-install: warning: Menanam tidak mungkin. GRUB hanya dapat diinstal dalam pengaturan ini dengan menggunakan daftar blokir. Namun demikian, blocklists TIDAK DIANDALKAN dan penggunaannya tidak disarankan.
grub-install: error: tidak akan melanjutkan dengan blocklists.

Namun, /dev/sdatampaknya diformat dengan benar untuk menginstal grub:

$ sudo fdisk -l / dev / sda

Disk / dev / sda: 111,8 GiB, 120034123776 byte, 234441648 sektor
Unit: sektor 1 * 512 = 512 byte
Ukuran sektor (logis / fisik): 512 byte / 512 byte
Ukuran I / O (minimum / optimal): 512 byte / 512 byte
Jenis disklabel: dos
Pengidentifikasi disk: 0x8d91017b

Boot Device End Start End Sektor Ukuran Id Type
/ dev / sda1 * 2048 234440703 234438656 111.8G 83 Linux

$ blkid / dev / sda1
/ dev / sda1: UUID = "84e9ff65-c4ba-42eb-8a6d-ebc703fae1f7" TYPE = "ext4" PARTUUID = "8d91017b-01"

Ini memiliki ruang standar 1 MiB standar di awal, dan /dev/sda1diformat dengan benar. Saya telah mencoba menggunakan grub-mkconfiguntuk membangun kembali file konfigurasi:

$ untuk f di proc sys dev dev / pts; lakukan sudo mount --bind / $ f / mnt / $ f; selesai
$ sudo chroot / mnt
# grub-mkconfig -o /boot/grub/grub.cfg
Menghasilkan file konfigurasi grub ...
Ditemukan gambar linux: /boot/vmlinuz-3.19.0-26-generic
Ditemukan gambar initrd: /boot/initrd.img-3.19.0-26-generic
Ditemukan gambar linux: /boot/vmlinuz-3.19.0-23-generic
Ditemukan gambar initrd: /boot/initrd.img-3.19.0-23-generic
Menambahkan entri menu boot untuk konfigurasi firmware EFI
selesai

Namun, saya masih mendapatkan pesan kesalahan yang sama saat berjalan grub-install, baik di dalam maupun di luar chrootlingkungan.

Boot USB langsung dalam mode lama, saya mendapatkan kesalahan yang sama; satu-satunya perbedaan adalah output dari berjalan grub-mkconfigdi chrootlingkungan:

# grub-mkconfig -o /boot/grub/grub.cfg
Menghasilkan file konfigurasi grub ...
Ditemukan gambar linux: /boot/vmlinuz-3.19.0-26-generic
Ditemukan gambar initrd: /boot/initrd.img-3.19.0-26-generic
Ditemukan gambar linux: /boot/vmlinuz-3.19.0-23-generic
Ditemukan gambar initrd: /boot/initrd.img-3.19.0-23-generic
Ditemukan memtest86 + image: /boot/memtest86+.elf
Ditemukan memtest86 + image: /boot/memtest86+.bin
Ditemukan Windows 7 (loader) di / dev / sdc1
selesai

Bagaimana saya dapat menginstal grub dengan benar?

AJMansfield
sumber

Jawaban:

25

Tutup celah antara sektor boot dan partisi pertama.

# dd if=/dev/zero of=/dev/sdX seek=1 count=2047

Itu untuk jika partisi pertama dimulai pada sektor 2048. Beberapa memulai lebih awal, terutama pada drive yang dipartisi oleh Windows. Yang pasti, jalankan

# fdisk -l /dev/sdX

sebelum memulai dan periksa untuk melihat di mana partisi pertama dimulai. Gunakan count=S-1, di mana S adalah awal dari partisi pertama.

Ahli Fisika enigmatic
sumber
Ini berhasil untuk saya. Saya mencoba menggunakan BTRFS sepanjang partisi ext4 / boot terpisah. Terima kasih.
Thales Ceolin
Perhatikan bahwa ini akan merusak tata letak GPT. Dimungkinkan untuk memulihkan dari cadangannya.
CR.
jika Anda menggunakan GPT maka Anda perlu menghapus PARTISI BIOS BOOT. Di mana itu tergantung pada bagaimana Anda meletakkan disk Anda. Saya menempatkan milik saya setelah GPT, antara blok 34 dan 2047, dengan asumsi partisi "nyata" pertama dimulai pada blok 2048. Memodifikasi baris perintah yang diberikan untuk menggunakan seek=34 count=2014karya untuk saya.
Starfry
bekerja dengan sempurna !!!! grub harus melakukannya secara otomatis
brauliobo
1
Ya, Anda akan berpikir begitu, @brauliobo, tetapi GRUB adalah sampah total. Saya bahkan tidak menggunakannya lagi. Hari ini, saya menggunakan syslinux untuk mbr dan systemd-boot untuk gpt.
EnigmaticPhysicist
3

Orang dapat membuat partisi baru di mana catatan GPT berada, lalu menghapusnya menggunakan dd. Dengan begitu, hanya catatan MBR yang akan tersisa.

Dengan asumsi perangkat bermasalah adalah /dev/sda:

Buat partisi baru di 1 MiB awal

$ parted /dev/sda
$ mkpart primary ext4 0MiB 1MiB
$ quit

Kemudian, nol partisi yang baru dibuat

$ dd if=/dev/zero of=/dev/sda2

Kemudian, hapus partisi

$ parted /dev/sda
$ rm 2
$ quit

grub-install sekarang harus bekerja seperti yang diharapkan.

swaroop
sumber
Harap edit jawaban Anda untuk menjustifikasi apa yang dilakukan kode ini, dan mengapa Anda meyakini itu sebagai solusi.
Martin Thornton
Bekerja untukku. Diedit untuk kejelasan
Nitz
3

Punya masalah yang sama dengan beberapa label partisi, meskipun saya cukup yakin bahwa itu tidak terjadi.

sudo grub-install target=i386-pc /dev/sda --force

adalah apa yang saya gunakan untuk mengatasi ini. Mengatasi masalah --forcebukanlah solusi yang "disarankan", tapi sejauh ini saya tidak punya masalah = P

krum85
sumber
1

Inilah yang saya lakukan yang membuatnya bekerja lagi:

Digunakan gdiskuntuk mengubah partisi MBR ke GPT, memasukkan partisi ke ruang kosong (ketik EF02 "BIOS Boot partisi"), mengubah entri dengan partisi asli saya, dan menandainya sebagai warisan BIOS yang dapat di-boot.

Lalu lari

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda

Kemudian berhasil diinstal, dan saya bisa boot ke drive utama saya.

AJMansfield
sumber