Oprava Grub
Dnes mi nenaštartoval počítač. Pre používateľov Windows asi nič nezvyčajné, mňa to však nemilo prekvapilo. Všetko, čo mi po štarte zobrazil, bol shell Grubu… Tak som vylovil CD a pustil sa do opravy.
Obsah článku
Aj preto, že som túto opravil robil naozaj po veľmi dlhej dobe a po prvý krát s novým GRUB-om, som sa rozhodol napísať, ako sa z tejto šlamastiky dostať.
Moja prvá myšlienka smerovala k poškodenému súborovému systému, pretože som si nebol vedomý akejkoľvek aktualizácie (či iného zásahu do bootloadera), ale v skutočnosti mi najviac problémov urobilo nabootovať z CD pretože som už celkom zabudol, že nemám pre boot vybrať voľbu CD-ROM, ale DVD-RAM. Stálo ma to niekoľko neúspešných pokusov o nabootovanie z CD, vrátane výmeny CD za iné…
Nakoniec som ale nad BIOSom svojho počítača zvíťazil a moje SystemRescueCD nejakej staršej verzie, ktoré mám pre takéto prípady vždy poruke, úspešne naštartovalo.
Zistenie partícií
Po naštartovaní záchranného Linuxu som si ako prvé potreboval občerstviť v pamäti, aké partície to vlastne používam (pretože na rôzne veci používam rôzne parametre pripojenia (a iež rôzne súborové systémy), mám disk rozdelený celkom na 10 partícií). Ak neviete ako najjednoduchšie zistiť, ako máte rozdelený disk, použite príkaz fdfisk:
fdisk -l
Takto zadaný príkaz, s voľbou -l, vypíše rozdelenie na partície
všetkých pripojených diskov. Avšak nepovie už, čo je na ktorej
partícii. Ak to potrebujete zistiť, pomôže súbor /etc/fstab
, ktorý je
uložený na niektorej partícii. Ja som však našťastie vedel, že na
prvej, ale i tak mi výpis partícii pomohol aspoň s jednou vecou.
Zistil, ktorá partícia je určená na swap…
Rada
Keby som si nespomenul, že mám systém na prvej, asi by som musel postupne pripájať jednu za druhou, aby som z výpisu obsahu pripojenej partície zistil, či je alebo nie je systémová.
Kontrola partície
Ako som už spomenul, moje prvé myšlienky smerovali k poškodenému
súborovému systému. Na kontrolu súborového systému slúži príkaz fsck,
ktorý ako parameter potrebuje meno partície. Keďže viem, že
konfigurácia bootloadera Grub je v adresári /boot
, ktorý mám na
systémovej partícii (už dávno nemusí byť na samostatnej partícii),
spustil som jej kontrolu:
fsck /dev/sda1
Príkaz fsck má svoje obdoby, alebo lepšie povedané konkretizácie, pre príslušné súborové systémy, ktoré možno spúšťať vo formáte fsck.meno_FS. Ak však spustíte len obyčajný fsck, pokúsi sa identifikovať typ súborového systému a ak je úspešný, spustí príslušnú verziu programu pre konkrétny typ súborového systému. Nebudem tu popisovať priebeh kontroly, pretože sa líši podľa typu súborového systému. Každopádne, kontrola nenašla žiadne chyby, takže moja teória bola ta-tam.
Obnova Grub
Začal som pochybovať o svojom presvedčení, že som neaktualizoval Grub, a tak som sa rozhodol obnoviť jeho inštaláciu. Teda najprv len jeho konfiguráciu, ale to nepomohlo, tak som ho nakoniec znova nainštaloval. Nebudem napínať, preinštalovanie pomohlo, ale musel som sa pokúšať viac krát, pretože samotná obnova inštalácie vyžadovala niektoré prípravné kroky.
Pripojenie koreňa disku
Ako prvé je potrebné pripojiť koreň disku (súborového systému). V
mojom prípade sa jedná o partíciu označenú ako sda1
, celým menom
/dev/sda1
. V mnohých návodoch, s ktorými som sa stretol, autori
odporúčajú pripojenie priamo do /mnt
. V prípade SystemRescueCD to
však nerobte! Vytvorte si niekde samostatný adresár, napríklad práve v
/mnt
, ktorý je na to podľa FSH určený:
mkdir /mnt/deb
A do neho pripojím svoj koreň:
mount /dev/sda1 /mnt/deb
Keďže bola partícia pripojená bez akýchkoľvek námietok, vrátane rozpoznanie súborového systému, len to potvrdilo, že súborový systém by poškodený byť nemal…
Pripojenie virtuálnych FS
Keď som naposledy obnovoval Grub, stačilo pripojiť systémovú partíciu,
vstúpiť do chroot a zadať pár príkazov. Dnes na mňa začal chŕliť rôzne
chybové hlášky, preto aby ste sa im vyhli, je pre Debian potrebné
pripojiť nielen systémovú partíciu, ale aj virtuálne súborové systémy.
Pripájal som ich po jednom, najmä preto, aby som zistil, či sú
potrebné všetky, ale sú. Takže najprv pripojíme /proc
a /sys
.
Pozor však, nie v koreni záchrannej distribúcie, ale v pripojenej pratícii
koreňa:
mount -t proc none /mnt/deb/proc
mount -t sysfs none /mnt/deb/sys
Okrem týchto virtuálnych súborových systémov je potrebný aj adresár
/dev
. V súčasnosti tento adresár neobsahuje kopu súborov zariadení,
ktoré sa vytvorili kedysi ktoviekým. Teda, zopár ich obsahuje, ale
väčšina je generovaná dynamicky pri štarte systému a o toto
generovanie sa stará jadro za veľkej pomoci udev. Keďže sa mi
nechcelo maturovať nad tým, ako vyvolať ich vytvorenie v chroote,
rozhodol som sa použiť tie, ktoré si pri štarte vygeneroval
SystemrescueCD a pripojil som jeho adresár /dev
aj do toho
svojho:
mount -o bind /dev /mnt/deb/dev
Vstúpenie do chroot
Ak neviete čo je to chroot, tak v tom nehľadajte vedu. Toto tajomné slovo je skratkou anglického change root, čo po našom znamená zmeň koreň. Nie, nie je to tajomný príkaz pre prostitútky, že majú prejsť k ďalšiemu zákazníkovi. Jednoducho vraví systému aby zmenil koreň svojho súborového systému ako iste viete koreň je začiatok. Zmením teda koreň súborového systému tak, aby sa ním stala moja partícia z disku:
chroot /mnt/deb /bin/bash
Okrem adresára s koreň môjho disku som zadal aj shell, ktorý má byť použitý. zadanie shellu nie je povinné, ale ja vo svojom systéme nemám nainštalovaný shell (zsh), ktorý používa SystemRescueCD, tak mal chroot malé problémy, ktoré vyriešim explicitným zadaním shellu (bash).
Pripojenie zvyšných partícií
V závislosti na systéme bude možno potrebné pripojiť aj ostatné partície disku. Možno to robiť po jednom, alebo všetky naraz, ja som zvolil druhú možnosť:
mount -a
Ako však píšem, nemusí to byť potrebné, ja som však potreboval
pripojiť adresáre /usr
a /var
.
Konečne Grub
Po úspešnom vstúpení do chroot (čo som spoznal napríklad podľa farby a obsahu výzvy) možno spustiť opätovnú inštaláciu Grub. Nie vždy je to potrebné, v mojom prípade však opätovné vygenerovanie konfigurácie nestačilo, preto som spustil inštaláciu:
grub-install /dev/sda
Program grub-install (ako ste iste pochopili z názvu) nainštaluje bootloader Grub na zadané miesto disku. Keďže som zadal meno zariadenia disku bez čísla partície, nainštaluje ho grub-install do MBR (hlavného zavádzacieho záznamu) disku. Po úspešnom nainštalovaní bootloadera som pre istotu nechal znova vygenerovať aj konfiguráciu:
update-grub
Záver
Po tomto mojom zásahu počítač bez rečí naštartoval. Pozrel som do záznamu aktualizácie a zistil som, že som naozaj neaktualizoval nič s Grub-om. Naozaj neviem, čo tento problém spôsobilo, ale iste to bola nejaká aktualizácia. Netuším však ktorá…