Przywracanie możliwości bootwania GNU/Linuksa
Posted by Michał ‘mina86’ Nazarewicz on 12th of February 2008
W artykule poniższym zamierzam opisać jak przywrócić LILO jako bootloader w sytuacji, gdy został on zastąpiony loaderem z Windowsów NT, co w efekcie powoduje niemożność uruchomienia GNU/Linuksa. Zakładam, że na dysku zainstalowany jest zarówno GNU/Linux (którego nie można uruchomić) oraz Windows z serii NT (w szczególności Windows 2000 i Windows XP, przy pozostałych Windowsach NT sprawa może wyglądać trochę inaczej). Co więcej, opis dotyczy LILO, ale ogólna idea może zostać zastosowana również w przypadku innych bootloaderów (zmieniają się jedynie pliki konfiguracyjne i polecenie updatowania bootloadera).
Należy pamiętać, że mając płytę instalacyjną Windowsów (dotyczy to przynajmniej Win2k) można zawsze przywrócić stan MBR uruchamiający loadera Windowsów, więc w razie jakichś niepowodzeń można z tego skorzystać. Opisane jest to na końcu artykułu.
Informuje również, że opisuję tutaj sposób, który przez niektórych ludzi (nie wiem czemu) jest niezalecany. IMO jest wygodniejszy, a wcale nie jest gorszy, chyba że ktoś często uruchamia Windowsa oraz ma włączone wyświetlanie menu Windowsów. W takim przypadku będzie zmuszony najpierw przejść przez LILO (czy inny bootloader Linuksa), a potem dopiero wchodzi do menu Windowsów. Inny sposób powoduje, że wszystko wygląda dokładnie na odwrót.
Tradycyjnie, z góry zaznaczam, że nie ponoszę odpowiedzialności za jakiekolwiek szkody wynikające z korzystania z poniższego opisu.
LiveCD
Jeżeli w naszym posiadaniu istnieje jakaś dystrybucja GNU/Linuksa bootowalna bezpośrednio z CD (np. Knoppix, LiveSlack), bądź przynajmniej płyta instalacyjna GNU/Linuksa (np. Slackware’a) to prawdopodobnie z dużym powodzeniem można ją użyć do rozwiązania problemu.
Jeśli przy bootowaniu z CD odpala się LILO i czeka na wpisanie magicznych parametrów lub wciśnięcie entera to jest duża szansa, że wystarczy wpisać: <kernel> root=/dev/<rootdev> ro noinitrd
, gdzie <kernel> to nazwa jądra (jaka konkretnie ma być powinno być gdzieś napisane na ekranie, przykładowo dla płytki instalacyjnej Slackware’a w 99% przypadków jest to bare.i
), a <rootdev> to partycja, na której jest root file system (tj. "/
"; np. u mnie jest to hda1
). Cała linijka może wyglądać tak: bare.i root=/dev/hda1 ro noinitrd
.
Jeżeli nie masz zielonego pojęcia jakie winno być <rootdev> to na 99% gdzieś w /etc/lilo.conf
(Zawczasu plik /etc/lilo.conf
można bez większych problemów odczytać odpalając Linuksa z płyty. Należy jedynie pamiętać, żeby potem odczytać prawidłowy plik (tj. ten z dysku)) znajdziesz opcje root z odpowiednim wpisem. Będzie ona poprzedzona wpisem image = <costam>
, np.:
image = /boot/bzImage root = /dev/hda1
Jeżeli po wciśnięciu Enter wszystko będzie działać poprawnie i odpali się zainstalowany na dysku GNU/Linux to można przejść do instalacji LILO. W przeciwnym wypadku należy próbować innych sztuczek:
LiveCD i chroot
Spróbujmy więc uruchomić GNU/Linuksa z płyty, przy czym najlepiej w trybie single lub przynajmniej w trybie tekstowym (chociaż prawdę mówiąc włączone iXy nie powinny mieć większego znaczenia). Następnie (będąc zalogowanym jako root) zamontować gdzieś root file system z dysku (np. do /mnt/root
) po czym "zchrootować" do tego katalogu i na wszelki wypadek zamontować wszystkie partycje. Całość można wykonać następującym poleceniem: mkdir /mnt/root && mount /dev/<rootdev> /mnt/root && chroot /mnt/root && mount -a && echo OK
(<rootdev> to ciągle ta sama partycja z root file systemem).
Jest pewne niezerowe prawdopodobieństwo (w gruncie rzeczy zawsze jest jakieś prawdopodobieństwo), że wszystko zadziała prawidłowo i jeśli tak to wystarczy już zainstalować to nieszczęsne LILO.
Instalacja LILO
Czas zmodyfikować plik /etc/lilo.conf
(oczywiście wszystko należy wykonywać jako root). Przede wszystkim należy upewnić się co do wartości opcji boot
, należy podać: boot = /dev/hda
. Następnie dodać wpis z Windowsami - będzie on wyglądał mniej więcej tak:
other = /dev/<windev> label = windows
gdzie <windev> to partycja z dyskiem C Windowsów (np. hda2
). Aby się upewnić co to tam jest można odpalić polecenie: fdisk -l /dev/hda
i wyszukać pierwszą partycję, która w kolumnie System ma „Win95” lub „FAT16”. Dodatkowo, partycja ta powinna być oznaczona gwiazdką w kolumnie Boot. Jeżeli nie jest to może być lipnie. ;) Ja mam coś takiego:
Disk /dev/hda: 120.0 GB, 120034123776 bytes 255 heads, 63 sectors/track, 14593 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/hda1 1 625 5020312 83 Linux /dev/hda2 * 626 1875 10040625 c W95 FAT32 (LBA) /dev/hda3 1876 14568 101956522+ 5 Extended /dev/hda4 14569 14593 200812+ 82 Linux swap /dev/hda5 1876 2175 2409749+ 83 Linux /dev/hda6 2176 2475 2409749+ 83 Linux /dev/hda7 2476 14568 97137022 83 Linux
Aby się dodatkowo upewnić co do trafności wyboru, można odpalić jeszcze polecenie mount
i tam (jeżeli partycje windowsowe są podmontowane) powinna być gdzieś szukana informacja. Dla przykładu, u mnie jedna z linijek wygląda następująco (przełamanie linii dodane ręcznie):
/dev/hda2 on /C type vfat (rw,umask=0,shortname=winnt,codepage=852, quiet,iocharset=iso8859-2)
Warto również sprawdzić, czy w pliczku /etc/lilo.conf
jest opcja prompt
, a timeout
jest ustawiony na conajmniej 10 (jest on podawany w dziesiątych sekundy). Po wprowadzeniu koniecznych zmian wystarczy odpalić LILO poleceniem: lilo -v
Jeżeli wszystko pójdzie dobrze to przy następnym reboocie winien pokazać się napis "LILO" i powinniśmy móc wybrać system operacyjny. Jeżeli nic nie będzie się chciało włączyć, należy skorzystać z płyty instalacyjnej Windowśów, żeby przywrócić poprzedni MBR.
Przywracanie MBR Windowsów
Aby przywrócić poprzednie ustawienia wystarczy zabootować z płyty instalacyjnej Windowsów i szukać tam czegoś takiego co się zwie Rescue Console. Zaraz po starcie instalatora trzeba wybrać opcję naprawiania systemu (wciskając przycisk R), a potem wybrać konsolę (wciskając C) - może to się różnić zależnie od wersji Windowsów. Po zalogowaniu się (wymagane jest hasło administratora) wystarczy uruchomić polecenie: fixmbr
i zrestartować komputer.