Przywracanie możliwości bootwania GNU/Linuksa

Michał ‘mina86’ Nazarewicz | 12 lutego 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.