Podstawowe szczegóły systemu roboczego:
Użyłem płyty CD z serwerem Ubuntu 12.04, aby zainstalować serwer.
Mam 4 dyski. Na wszystkich dyskach zrobiłem następujące, podobne do tego howto :
- utworzył partycję wymiany 2 GB
- utworzono partycję 256 GB / boot
- utworzył partycję RAID10 64 GB (dla roota)
- utworzył dużą partycję RAID10 zajmującą resztę miejsca
Sformatowałem boot jako ext3. Skonfigurowałem RAID10 na partycji głównej i dużych partycjach. Sformatowałem root jeden ext4. Na dużym utworzyłem wolumin logiczny i sformatowałem go ext4.
Powstały system działa dobrze i uruchamia się dobrze.
Szczegóły problemu:
Następnie postanowiłem udokumentować procedurę niepowodzenia. Jako pierwszy krok postanowiłem ponownie zainstalować 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..
Wygląda na to, że się nie udało, ale wydaje się, że się poddał i nie wprowadził żadnych zmian. Więc zrestartowałem się. Uruchomienie nie powiodło się. Po prostu wisi na czarnym ekranie z migającym kursorem około 4 linii w dół. Jeśli uruchomię, przytrzymując klawisz „Shift”, po lewej stronie kursora pojawia się słowo „GRUB”, ale nie ma interaktywnego monitu.
W tym momencie użyłem dysku rozruchowego do wygenerowania tego raportu: http://paste.ubuntu.com/966531/
Uwaga w powyższym raporcie mówi, że bootloader nie wskazuje poprawnego sektora dla core.img. (sda jest wirtualnym cd; sdb jest dyskiem rozruchowym; sdc jest lustrem sdb, ale boot nie jest dublowany, istnieje tylko osobna niepowiązana partycja i sformatowana ext3; sdd i sde mają miejsce na boot, ale nie są sformatowane)
Następnie uruchomiłem system z dysku CD serwera Ubuntu, uruchomiłem system ratunkowy i wydałem następujące polecenia, które zakończyły się bez błędów (gdzie sda to wirtualny dysk CD, a b, c, d, e to dyski, które były a, b, c , d we wcześniejszych poleceniach grub):
# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc
W tym momencie użyłem dysku rozruchowego do wygenerowania tego raportu: http://paste.ubuntu.com/966561/
Zauważ, że w powyższym raporcie problem dotyczący core.img zniknął. Wydaje się wskazywać na właściwy sektor.
Teraz, gdy spróbuję uruchomić, otrzymuję monit o grub. Jeśli uruchomię „set”, widzę, że root został znaleziony i ustawiony. Jeśli uruchomię „ls /”, widzę mój katalog główny z woluminu rajdowego, w tym plik jądra vmlinuz. Jeśli wpiszesz „ls / vmlinuz”, pojawi się komunikat „błąd: nie znaleziono pliku”. Mówi ten sam błąd, jeśli użyję polecenia „linux”, aby spróbować załadować jądro. Plik vmlinuz nie jest wymieniony, jeśli użyję „ls -l /”.
Zbyt szczegółowe informacje, na wypadek, gdybyś chciał przestrzegać:
Zauważyłem, że nie ma również /boot/grub/grub.cfg, więc pobiegłem
# grub-mkconfig -o /boot/grub/grub.cfg
Ale problem pozostaje.
Jeśli użyję narzędzia „gptsync”, to zachowanie się nie zmieni.
Dysk rozruchowy nie naprawi systemu, ponieważ chce, żebym uruchomił system z włączonym EFI. Krótko się temu przyjrzałem, ale nie wiem, jak to działa. Znalazłem powłokę UEFI w moich opcjach uruchamiania, ale nic o tym nie wiem i nie wiem, jak zmienić stamtąd start (np. Aby uruchomić CD z tej powłoki EFI).
Przeczytałem również tę stronę , ale Ubuntu nie ma polecenia „grub”, więc nie mogę dokładnie go wykonać. Mógłbym po prostu zainstalować to polecenie, ale bardziej ciekawi mnie, jak instalator Ubuntu zdołał go zainstalować, zamiast mieć inną konfigurację. Czy używał list blokujących?
Oto dane wyjściowe parted podczas rozruchu na dysku rozruchowym (gdzie tutaj sdb jest pierwszym dyskiem twardym, sda po uruchomieniu z dysku, a „boot” zmienia się na „bios_grub” w linku 2 wklej):
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
Oto niepowiązana super stara maszyna wirtualna do porównania (dla każdego, kto nie zna dysku rozruchowego ): http://paste.ubuntu.com/966799/
Oto najnowsza pasta z systemu problemów, po uruchomieniu powyższego grub-mkconfig, a także ustawieniu „bios_grub” z powrotem na „boot”. http://paste.ubuntu.com/966808/
Porównując oba, wygląda to interesująco:
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
Wygląda na to, że raid ma pliki rozruchowe, a sdb2 nie jest sformatowany. (pomimo tego system uruchomił się przed uruchomieniem grub-install). Z ratunkowej płyty CD „mount -t ext3 / dev / sdb2 / boot” kończy się niepowodzeniem. Ale ma to sens, że wprowadzałoby to zamieszanie, ponieważ grub używa jawnie partycji 2 (2 w poleceniu parted, które włącza bios_grub).
Zrobiłem więc coś takiego:
# 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
Następnie uruchomiłem ponownie i znów mam czarny ekran, bez monitu. http://paste.ubuntu.com/966848/
Więc w tym momencie, zgaduję, że kiedy ustawiony jest bios_grub, grub nie instaluje się w MBR, a nie w systemie plików ext3 na ext3, ale na samej partycji, tak jakby to była EFI ... co oczywiście bałagan tam system plików ext3. I po krótkim czytaniu o EFI, brzmiało to tak, jakby EFI zakładało, że pierwsza partycja to boot, ale w moim przypadku pierwszą jest zamiana, a także powinna to być FAT, a nie coś niemożliwego do ... sens, wciąż jestem całkowicie zagubiony bez pojęcia. [EDYCJA: teraz mam wskazówkę ... pomiń trochę w celu aktualizacji]
A teraz, kiedy klikam naprawę na dysku rozruchowym, pojawia się pytanie o coś innego. Ostatnim razem błąd został ukryty pod oknem i musiałem odciągnąć drugiego, aby go zobaczyć. Tym razem główne okno zniknęło, a nowe okno mówi:
GPT detected. You may want to retry after creating a
BIOS-Boot partition (>1Mo, flag). Do you want to continue?
Więc kliknąłem tak i powiedziałem, że naprawiono pomyślnie, i utworzyłem kolejną pastę: http://paste.ubuntu.com/966862/
Ale nadal mam czarny ekran z migającym kursorem.
Teraz moją teorią jest to, że boot został nadpisany przez beztłuszczową rzecz nie będącą EFI, która jest po prostu grubowskim kodem, który wcześniej byłby w sektorach 0-63. Na szczęście natrafiłem na bardzo jasne stwierdzenie na tej stronie, które prawdopodobnie zakończyło moje zrozumienie, co to wszystko oznacza. A potem, kiedy to odkryłem, Jeremy opublikował odpowiedź, która, jeśli jest prawdziwa, potwierdza, że jest to brakująca koncepcja klucza. http://blog.psych0tik.net/2011/08/grub-embedding-blocklists-and-bios_grub-partitions/
Pytania:
Co się dzieje? Dlaczego grub nie powinien się uruchomić? Dlaczego mówi „nie znaleziono pliku”?
Dlaczego Grub nie chce instalować bez tego ustawienia, które ustawiłem z parted (które nie zostało ustawione przez instalator Ubuntu)? Myślałem, że wszystko, co potrzebne do zainstalowania, to osobny / boot, który nie znajduje się w LVM ani w programowej macierzy RAID, ponieważ mój root jest w RAID, a tablica partycji to GPT.
W jaki sposób instalator CD Ubuntu instaluje go bez tego problemu i bez ustawienia bios_grub?
Zastanowiłbym się również nad wykorzystaniem EFI. Jeśli jest to dobry pomysł i istnieje standardowy sposób, aby go skonfigurować, zawsze jestem gotów uczyć się nowych rzeczy.
Najszybszą odpowiedzią, która sprawiłaby mi radość, nawet bez odpowiedzi na wszystkie moje pytania, byłby zestaw poleceń, które mogłem uruchomić z ratunkowej płyty CD, aby naprawić bootloader w taki sam sposób, jak zrobiła to instalacyjna płyta CD. Byłoby również bardzo miło, gdybym mógł uruchomić je z uruchomionym systemem, zamiast z CD.
Odpowiedzi:
Rozwiązaniem jest użycie partycji bios_grub, która nie jest taka sama jak partycja / boot.
Domyślnie partycja bios_grub ma rozmiar 1 MB i musi być oflagowana jako bios_grub. Mój jest pierwszą partycją na moim dysku. Jeśli twoja partycja 2 jest w rzeczywistości / boot, jak sugeruje to parted, nie byłoby to poprawne i powinieneś utworzyć kolejną partycję 1MiB.
W przypadku GPT i GRUB2 minimalny system plików ma trzy partycje: bios_grub, root, swap. (nie do końca pewna, czy wymagana jest zamiana)
Dlaczego grub nie uruchamia się po prostu po uruchomieniu „grub-install”?
Nieznany ... Można by pomyśleć, że nic by to nie zmieniło, gdyby było jasne, że nie można osadzić, więc nie może działać.
Dlaczego mówi „nie znaleziono pliku”?
/ vmlinuz to dowiązanie symboliczne korzystające z partycji rozruchowej, a partycja rozruchowa jest uszkodzona. Kod bios_grub został napisany na górze swojej struktury ext3. Prawdopodobnie oznaczało to, że / boot nie został zamontowany, a widoczne w nim pliki grub znajdowały się w systemie głównym, który nie zawierał jądra.
Dlaczego grub nie chce instalować bez tego ustawienia, które ustawiłem z parted
W tabeli partycji GPT nie ma miejsca na moduł ładujący, w przeciwieństwie do MBR. Dlatego należy utworzyć określoną partycję, aby przechowywać kod rozruchowy. Przed uruchomieniem „grub-install” określ tę partycję za pomocą polecenia:
Myślałem, że wszystko, czego potrzebowałem, to osobny / boot. W jaki sposób instalator CD Ubuntu instaluje go bez ustawienia bios_grub?
To wymaganie wydaje się być wszystkim, co jest potrzebne dla instalatora Ubuntu, ale tworzy niestandardowy system, który łatwo się psuje.
Kiedy GRUB mówi „Ta etykieta partycji GPT nie ma partycji rozruchowej BIOS ”, oznacza to partycję bios_grub, a nie / boot.
źródło