`install-grub` twierdzi, że mam wiele etykiet partiton i że osadzanie jest niemożliwe

19

Próbuję zainstalować GRUB na moim nie uruchamiającym się komputerze stacjonarnym, ale napotkałem kilka błędów. Inne źródła omawiające te błędy przypisały je albo brakowi wolnego miejsca na dysku przed pierwszą partycją (mam wymaganą ilość wolnego miejsca), albo problemowi /boot/grub/grub.cfg(problem utrzymuje się nawet po prawidłowym odtworzeniu tego pliku).

Uruchomiłem z Live USB i próbowałem ponownie zainstalować GRUB za pomocą następujących poleceń, ale napotkałem błąd, który uniemożliwia jego działanie:

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda
Instalowanie na platformie i386-pc.
grub-install: ostrzeżenie: Próba zainstalowania GRUB-a na dysku z wieloma etykietami partycji. To nie jest jeszcze obsługiwane ..
grub-install: ostrzeżenie: Osadzanie nie jest możliwe. GRUB można zainstalować w tej konfiguracji tylko przy użyciu list blokujących. Jednak listy blokujące są NIEZAWODNE, a ich użycie jest odradzane.
grub-install: error: nie będzie kontynuował z listami bloków.

Wydaje się jednak, /dev/sdaże jest poprawnie sformatowany do instalacji gruba:

$ sudo fdisk -l / dev / sda

Dysk / dev / sda: 111,8 GiB, 120034123776 bajtów, 234441648 sektorów
Jednostki: sektory 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny / fizyczny): 512 bajtów / 512 bajtów
Rozmiar we / wy (minimalny / optymalny): 512 bajtów / 512 bajtów
Typ etykiety dysku: dos
Identyfikator dysku: 0x8d91017b

Rozmiar rozruchu urządzenia Początkowe sektory końcowe Typ Id
/ 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”

Na początku ma standardowe 1 wolne miejsce i /dev/sda1jest poprawnie sformatowany. Próbowałem użyć grub-mkconfigdo odbudowania pliku konfiguracyjnego:

$ for f in proc sys dev dev / pts; wykonaj sudo mount --bind / $ f / mnt / $ f; gotowy
$ sudo chroot / mnt
# grub-mkconfig -o /boot/grub/grub.cfg
Generowanie pliku konfiguracyjnego grub ...
Znaleziono obraz linux: /boot/vmlinuz-3.19.0-26-generic
Znaleziono obraz initrd: /boot/initrd.img-3.19.0-26-generic
Znaleziono obraz linux: /boot/vmlinuz-3.19.0-23-generic
Znaleziono obraz initrd: /boot/initrd.img-3.19.0-23-generic
Dodanie pozycji menu rozruchu do konfiguracji oprogramowania EFI
gotowy

Jednak nadal pojawia się ten sam komunikat o błędzie podczas działania grub-install, niezależnie od tego, czy jest w chrootśrodowisku , czy poza nim .

Podczas uruchamiania USB na żywo w trybie starszym otrzymuję ten sam błąd; jedyną różnicą jest wydajność działania grub-mkconfigw chrootśrodowisku:

# grub-mkconfig -o /boot/grub/grub.cfg
Generowanie pliku konfiguracyjnego grub ...
Znaleziono obraz linux: /boot/vmlinuz-3.19.0-26-generic
Znaleziono obraz initrd: /boot/initrd.img-3.19.0-26-generic
Znaleziono obraz linux: /boot/vmlinuz-3.19.0-23-generic
Znaleziono obraz initrd: /boot/initrd.img-3.19.0-23-generic
Znaleziono memtest86 + obraz: /boot/memtest86+.elf
Znaleziono memtest86 + obraz: /boot/memtest86+.bin
Znaleziono Windows 7 (moduł ładujący) na / dev / sdc1
gotowy

Jak mogę poprawnie zainstalować Gruba?

AJMansfield
źródło

Odpowiedzi:

25

Nuke luki między sektorem rozruchowym a pierwszą partycją.

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

Dzieje się tak, jeśli pierwsza partycja zaczyna się w sektorze 2048. Niektóre zaczynają się wcześniej, szczególnie na dyskach, które zostały podzielone na partycje przez Windows. Dla pewności biegnij

# fdisk -l /dev/sdX

przed uruchomieniem i sprawdź, gdzie zaczyna się pierwsza partycja. Użyj count=S-1, gdzie S jest początkiem pierwszej partycji.

enigmatyczny fizyk
źródło
To zadziałało dla mnie. Próbuję użyć BTRFS na osobnej partycji ext4 / boot. Dzięki.
Thales Ceolin
Pamiętaj, że spowoduje to usunięcie układu GPT. Można jednak odzyskać dane z kopii zapasowej.
CR.
jeśli używasz GPT, musisz wyczyścić partycję BIOS BOOT PARTITION. To zależy od tego, jak ułożyłeś dysk. Umieszczam mój po GPT, między blokiem 34 a 2047, zakładając, że pierwsza „prawdziwa” partycja zaczyna się od bloku 2048. Modyfikacja podanego wiersza polecenia, aby go używać, seek=34 count=2014działa dla mnie.
starfry
działa świetnie!!!! grub powinien to zrobić automatycznie
brauliobo
1
Tak, tak byś pomyślał @brauliobo, ale GRUB to totalne śmieci. Już go nawet nie używam. Obecnie używam syslinux dla mbr i systemd-boot dla gpt.
enigmatyczny
3

Można utworzyć nową partycję, na której znajduje się rekord GPT, a następnie wyczyścić go za pomocą dd. W ten sposób pozostanie tylko rekord MBR.

Zakładając, że problematyczne urządzenie to /dev/sda:

Utwórz nową partycję w początkowej 1 MiB

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

Następnie wyzeruj nowo utworzoną partycję

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

Następnie usuń partycję

$ parted /dev/sda
$ rm 2
$ quit

grub-install powinien teraz działać zgodnie z oczekiwaniami.

swaroop
źródło
Proszę edytować swoją odpowiedź uzasadnić co ten kod robi i dlaczego uważasz, że jest to rozwiązanie.
Martin Thornton,
Pracował dla mnie. Edytowano go dla jasności
Nitz
3

Miałem podobny problem z wieloma etykietami partycji, chociaż jestem całkiem pewien, że tak nie jest.

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

właśnie to omijałem. Tackowanie na --forcenie jest „zalecanym” rozwiązaniem, ale jak dotąd nie miałem problemów = P.

krum85
źródło
1

Oto, co zrobiłem, dzięki czemu znów działa:

Służy gdiskdo konwersji partycji MBR na GPT, włożenia partycji w puste miejsce (typ EF02 „Partycja rozruchowa systemu BIOS”), transponowania jej wpisu do mojej oryginalnej partycji i oznaczenia jej jako starszej wersji rozruchowej systemu BIOS.

Potem pobiegł

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

Następnie został pomyślnie zainstalowany i mogę uruchomić system z dysku głównego.

AJMansfield
źródło