`install-grub` afferma che ho più etichette partiton e che l'incorporamento è impossibile


19

Sto cercando di installare GRUB sul mio computer desktop senza avvio, ma sto riscontrando diversi errori. Altre fonti che hanno discusso di questi errori li hanno attribuiti a una mancanza di spazio libero su disco prima della prima partizione (ho lo spazio libero necessario) o a un problema /boot/grub/grub.cfg(il problema persiste anche dopo aver rigenerato correttamente quel file).

Ho avviato con un USB live e ho tentato di reinstallare GRUB utilizzando i seguenti comandi, ma riscontro un errore che ne impedisce il funzionamento:

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda
Installazione per piattaforma i386-pc.
grub-install: avviso: tentativo di installare GRUB su un disco con più etichette di partizione. Questo non è ancora supportato.
grub-install: avviso: l'incorporamento non è possibile. GRUB può essere installato in questa configurazione solo usando blocklist. Tuttavia, le blocklist sono INCREDIBILI e il loro uso è scoraggiato.
grub-install: errore: non procederà con le blocklist.

Tuttavia, /dev/sdasembra essere formattato correttamente per l'installazione di grub:

$ sudo fdisk -l / dev / sda

Disco / dev / sda: 111,8 GiB, 120034123776 byte, 234441648 settori
Unità: settori di 1 * 512 = 512 byte
Dimensione del settore (logico / fisico): 512 byte / 512 byte
Dimensione I / O (minimo / ottimale): 512 byte / 512 byte
Tipo di etichetta del disco: dos
Identificatore del disco: 0x8d91017b

Tipo di ID dimensione inizio inizio avvio dispositivo
/ 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"

Ha lo spazio libero standard di 1 MiB all'inizio ed /dev/sda1è formattato correttamente. Ho provato a utilizzare grub-mkconfigper ricostruire il file di configurazione:

$ per f in proc sys dev dev / pts; sudo mount --bind / $ f / mnt / $ f; fatto
$ sudo chroot / mnt
# grub-mkconfig -o /boot/grub/grub.cfg
Generazione del file di configurazione di grub ...
Immagine linux trovata: /boot/vmlinuz-3.19.0-26-generic
Immagine initrd trovata: /boot/initrd.img-3.19.0-26-generic
Immagine linux trovata: /boot/vmlinuz-3.19.0-23-generico
Immagine initrd trovata: /boot/initrd.img-3.19.0-23-generic
Aggiunta della voce del menu di avvio per la configurazione del firmware EFI
fatto

Tuttavia, ricevo ancora lo stesso messaggio di errore durante l'esecuzione grub-install, all'interno o all'esterno chrootdell'ambiente.

Avviando l'USB live in modalità legacy, ottengo lo stesso errore; l'unica differenza è l'uscita di correre grub-mkconfigin chrootambiente:

# grub-mkconfig -o /boot/grub/grub.cfg
Generazione del file di configurazione di grub ...
Immagine linux trovata: /boot/vmlinuz-3.19.0-26-generic
Immagine initrd trovata: /boot/initrd.img-3.19.0-26-generic
Immagine linux trovata: /boot/vmlinuz-3.19.0-23-generico
Immagine initrd trovata: /boot/initrd.img-3.19.0-23-generic
Trovato memtest86 + immagine: /boot/memtest86+.elf
Trovato memtest86 + immagine: /boot/memtest86+.bin
Trovato Windows 7 (caricatore) su / dev / sdc1
fatto

Come posso ottenere grub installato correttamente?

Risposte:


25

Nuke il divario tra il settore di avvio e la prima partizione.

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

Questo è se la prima partizione inizia nel settore 2048. Alcuni iniziano prima, specialmente su unità partizionate da Windows. A dire il vero, corri

# fdisk -l /dev/sdX

prima di iniziare e controllare per vedere dove inizia la prima partizione. Utilizzare count=S-1, dove S è l'inizio della prima partizione.


Questo ha funzionato per me. Sto cercando di utilizzare BTRFS lungo una partizione ext4 / boot separata. Grazie.
Thales Ceolin,

Si noti che questo eliminerà un layout GPT. È possibile ripristinare dal suo backup però.
CR.

se si utilizza GPT, è necessario cancellare la PARTENZA DI AVVIO DEL BIOS. Dove si trova dipende da come hai disposto il tuo disco. Ho inserito il mio dopo il GPT, tra il blocco 34 e il 2047, supponendo che la prima partizione "reale" inizi al blocco 2048. La modifica della riga di comando fornita per l'uso seek=34 count=2014funziona per me.
Starfry,

funziona perfettamente !!!! grub dovrebbe farlo automaticamente però
brauliobo il

1
Sì, lo penseresti così, @brauliobo, ma GRUB è spazzatura totale. Non lo uso nemmeno più. In questi giorni, uso syslinux per mbr e systemd-boot per gpt.
enigmatico

3

È possibile creare una nuova partizione in cui si trova il record GPT, quindi cancellarlo utilizzando dd. In questo modo, rimarrà solo il record MBR.

Supponendo che il dispositivo problematico sia /dev/sda:

Crea una nuova partizione nel MiB iniziale 1

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

Quindi, azzera la partizione appena creata

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

Quindi, eliminare la partizione

$ parted /dev/sda
$ rm 2
$ quit

grub-install ora dovrebbe funzionare come previsto.


Si prega di modificare la risposta per giustificare ciò che questo codice fa, e perché si crede che sia una soluzione.
Martin Thornton,

Ha funzionato per me. Modificato per chiarezza
Nitz il

3

Ho avuto un problema simile con le etichette a più partizioni, anche se sono abbastanza sicuro che non sia così.

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

è quello che ho usato per aggirare questo. Affrontare una --forcenon è una soluzione "consigliata", ma finora non ho avuto problemi = P


1

Ecco cosa ho fatto per farlo funzionare di nuovo:

Utilizzato gdiskper convertire la partizione MBR in GPT, inserire una partizione nello spazio vuoto (digitare EF02 "Partizione di avvio BIOS"), trasposto la sua voce con la mia partizione originale e contrassegnata come legacy BIOS avviabile.

Quindi corse

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

Quindi è stato installato correttamente e sono in grado di avviare l'unità principale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.