Dawno, dawno temu mieliśmy starszego Gruba, Wielkiego Unified Linux bootloader w wersji 0.97. Legacy GRUB miał wiele zalet, ale stał się stary, a jego twórcy tęsknili za większą funkcjonalnością, dlatego GRUB 2 przyszedł na świat.
GRUB 2 to duża przeróbka z kilkoma znaczącymi różnicami. Uruchamia wymienne nośniki i może być skonfigurowany z opcją wejścia do systemu BIOS. Bardziej skomplikowana jest konfiguracja ze wszystkimi rodzajami skryptów do przebrnięcia i zamiast mieć ładny, dość prosty plik/boot/grub/menu.lst
z wszystkimi konfiguracjami w jednym miejscu, domyślnie jest/boot/grub/grub.cfg
. Których nie edytujesz bezpośrednio, o nie, bo to nie jest zwykłe dotykanie ludzi, a tylko Inne skrypty. Możemy edytować /etc/default/grub
, który kontroluje głównie wygląd menu GRUB. Możemy również edytować skrypty w /etc/grub.d/
. Są to skrypty, które uruchamiają systemy operacyjne, sterują zewnętrznymi aplikacjami, takimi jakmemtest
Ios_prober
oraz tematyką./boot/grub/grub.cfg
jest zbudowany z/etc/default/grub
I/etc/grub.d/*
po uruchomieniu poleceniaupdate-grub
, które należy uruchamiać za każdym razem, gdy wprowadzasz zmiany.
dobrą wiadomością jest to, że skryptupdate-grub
jest niezawodny do wyszukiwania jąder, plików startowych i dodawania wszystkich systemów operacyjnych do menu startowego GRUB, więc nie musisz tego robić ręcznie.
nauczymy się, jak naprawić dwie najczęstsze awarie. Gdy uruchomisz system i zatrzyma się on na grub>
, jest to pełna powłoka polecenia GRUB 2. Oznacza to, że GRUB 2 uruchomił się normalnie i załadował moduł normal.mod
(I inne moduły znajdujące się w /boot/grub//
), ale nie znalazł pliku grub.cfg
. Jeśli widzisz grub rescue>
, oznacza to, że nie mógł znaleźć normal.mod
, więc prawdopodobnie nie mógł znaleźć żadnego z Twoich plików startowych.
Jak to się dzieje? Jądro mogło zmienić przydziały dysków lub przenieść dyski twarde, zmienić niektóre partycje lub zainstalować nowy system operacyjny i przenieść rzeczy wokół. W tych scenariuszach Twoje pliki startowe nadal tam są, ale GRUB nie może ich znaleźć. Możesz więc wyszukać pliki rozruchowe w monicie GRUB, ustawić ich lokalizacje, a następnie uruchomić system i naprawić konfigurację GRUB.
powłoka polecenia GRUB 2
powłoka polecenia GRUB 2 jest tak samo potężna jak powłoka w starszej wersji GRUB. Można go używać do wykrywania obrazów rozruchowych, jąder i głównych systemów plików. W rzeczywistości daje pełny dostęp do wszystkich systemów plików na komputerze lokalnym, niezależnie od uprawnień lub innych zabezpieczeń. Co niektórzy mogą uznać za lukę w zabezpieczeniach, ale znasz stare uniksowe dyktando: ten, kto ma fizyczny dostęp do maszyny, jest jej właścicielem.
gdy znajdujesz się w wierszu polecenia grub>
, masz wiele funkcji podobnych do każdej powłoki poleceń, takich jak historia i uzupełnianie tabulatorów. Trybgrub rescue>
jest bardziej ograniczony, bez historii i bez uzupełniania tabulatorów.
jeśli ćwiczysz na działającym systemie, naciśnij C, gdy pojawi się menu startowe GRUB, aby otworzyć powłokę polecenia GRUB. Możesz zatrzymać odliczanie rozruchu, przewijając pozycje menu w górę iw dół za pomocą klawiszy strzałek. Można bezpiecznie eksperymentować w wierszu poleceń GRUB, ponieważ nic, co tam robisz, nie jest trwałe. Jeśli już patrzysz na grub>
lub grub rescue>
, jesteś gotowy do rocka.
kilka następnych komend działa zarówno z grub>
, jak i grub rescue>
. Pierwsze polecenie, które należy uruchomić, wywołuje pager, w celu wywołania długich wyjść poleceń:
grub> set pager=1
nie może być spacji po obu stronach znaku równości. Teraz zróbmy trochę zwiedzania. Wpiszls
aby wyświetlić listę wszystkich partycji, które widzi GRUB:
grub> ls(hd0) (hd0,msdos2) (hd0,msdos1)
Co to jestmsdos stuff
? Oznacza to, że system ten ma starą tablicę partycji MS-DOS, a nie nową, błyszczącą Globally Unique Identifiers partition table (GPT). (Zobacz Używanie nowej tabeli partycji GUID w Linuksie (Goodbye Ancient MBR). Jeśli używasz GPT, powie (hd0,gpt1)
. A teraz węszmy. Użyj polecenials
, aby zobaczyć, jakie pliki są w Twoim systemie:
grub> ls (hd0,1)/lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/ lib/lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old initrd.img initrd.img.old
Hurra, znaleźliśmy główny system plików. Możesz pominąć etykiety msdos
I gpt
. Jeśli pominiesz ukośnik, wyświetli on informacje o partycji. Możesz odczytać dowolny plik w systemie za pomocą poleceniacat
:
grub> cat (hd0,1)/etc/issueUbuntu 14.04 LTS n l
Czytanie/etc/issue
może być przydatne w systemie multi-boot do identyfikacji różnych Linuksów.
uruchamianie z grub>
oto jak ustawić pliki rozruchowe i uruchomić system z zachętygrub>
. Po uruchomieniu polecenia ls
wiemy, że na (hd0,1)
istnieje główny system plików Linuksa i możesz szukać dalej, dopóki nie sprawdzisz, gdzie znajduje się /boot/grub
. Następnie uruchom te polecenia, używając własnej partycji głównej, jądra i obrazu initrd:
grub> set root=(hd0,1)grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub> initrd /boot/initrd.img-3.13.0-29-genericgrub> boot
pierwsza linia ustawia partycję, na której znajduje się główny system plików. Druga linia mówi GRUB o lokalizacji jądra, którego chcesz użyć. Zacznij wpisywać /boot/vmli
, a następnie użyj tab-completion, aby wypełnić resztę. Wpisz root=/dev/sdX
, aby ustawić lokalizację głównego systemu plików. Tak, wydaje się to zbędne, ale jeśli to pominiesz, dostaniesz paniki jądra. Skąd znasz poprawną partycję? hd0,1 = /dev/sda1. hd1,1 = /dev/sdb1. hd3,2 = /dev/sdd2. Myślę, że możesz ekstrapolować resztę.
trzecia linia ustawia plik initrd
, który musi mieć ten sam numer wersji co jądro.
czwarta linia uruchamia system.
w niektórych systemach linuksowych obecne jądra i initrd są symbolicznie połączone do najwyższego poziomu głównego systemu plików:
$ ls -l /vmlinuz -> boot/vmlinuz-3.13.0-29-genericinitrd.img -> boot/initrd.img-3.13.0-29-generic
, więc można uruchomić zgrub>
w ten sposób:
grub> set root=(hd0,1)grub> linux /vmlinuz root=/dev/sda1grub> initrd /initrd.imggrub> boot
uruchamianie z grub-rescue>
Jeśli jesteś w powłoce ratunkowej GRUB, polecenia są różne i musisz załadowaćnormal.mod
Ilinux.mod
Moduły:
grub rescue> set prefix=(hd0,1)/boot/grubgrub rescue> set root=(hd0,1)grub rescue> insmod normalgrub rescue> normalgrub rescue> insmod linuxgrub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub rescue> initrd /boot/initrd.img-3.13.0-29-genericgrub rescue> boot
tab-completion powinien zacząć działać po załadowaniu obu modułów.
Dokonywanie trwałych napraw
Po pomyślnym uruchomieniu systemu uruchom te polecenia, aby trwale naprawić GRUB:
# update-grubGenerating grub configuration file ...Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound background image: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound linux image: /boot/vmlinuz-3.13.0-29-genericFound initrd image: /boot/initrd.img-3.13.0-29-genericFound linux image: /boot/vmlinuz-3.13.0-27-genericFound initrd image: /boot/initrd.img-3.13.0-27-genericFound linux image: /boot/vmlinuz-3.13.0-24-genericFound initrd image: /boot/initrd.img-3.13.0-24-genericFound memtest86+ image: /boot/memtest86+.elfFound memtest86+ image: /boot/memtest86+.bindone# grub-install /dev/sdaInstalling for i386-pc platform.Installation finished. No error reported.
podczas uruchamianiagrub-install
pamiętaj, że instalujesz go w sektorze rozruchowym dysku twardego, a nie na partycji, więc nie używaj numeru partycji, takiego jak/dev/sda1
.
ale nadal nie działa
Jeśli Twój system jest tak popaprany, że nic z tego nie działa, spróbuj Super GRUB2 live rescue disk. Pomocny powinien być również oficjalny podręcznik GNU GRUB 2.00.