odinstalovaný kernel

Založil alikon, 29. 11. 2016, 18:35:16

Předchozí téma - Další téma

alikon

Ahoj.

Asi si o mě budete myslet, že jsem ***, ale podařilo se mi odinstalovat kernel linuxu. Chtěl jsem si vyčistit Debian Stretch od starých verzí kernelu. Viděl jsem, že mám nainstalované verze 4.3.0, 4.4.0, 4.7.0 a 4.8.0. Tak jsem dal odinstalovat balíky linux-image a linux-headers ve verzích 4.3.0 a 4.4.0. Dvě poslední verze přeci stačí, že... Po restaru PC mě čekalo velké překvapení, že GRUB nevidí linux. Při pátrání, co se stalo, jsem přišel na to, že jsem ve skutečnosti jel na verzi 4.3.0 a od verze 4.4.0 to jsou snad jen nějaké poloviční neúplné kernely. Zkrátka z /boot/ mi zmizely soubory config-4.3.0, initrd.img System.map a vmlinuz (vše 4.3.0). Pokoušel jsem se ze 2 měsíce staré zálohy (spakovaný kompletní systému do tar archivu) obnovit /boot a /lib/modules a /usr/share/bug/linux-image. Bohužel to nepomohlo.

Prosím tedy o radu - lze nějak doinstalovat či obnovit ze zálohy komplet kernel, nebo mám smůlu a musím kompletně přeinstalovat Debian?

Předem díky moc všem za rady.

Petr Krčmář

Nejjednodušší bude spustit libovolné live distro, připojit systémový disk a chrootnout se do něj. Pak se octneš ve svém Debianu a můžeš zachraňovat. Prostě nainstaluješ chybějící balíčky a rebootuješ naostro.

alikon

#2
Zkoušel jsem vyhledat odinstalované balíky (linux-headers-4.3.0-1-all-amd64, linux-headers-4.3.0-1-amd64, linux-kbuild-4.3, linux-image-4.3.0-1-amd64, linux-headers-4.3.0-1-common - dle výpisu logu) na packages.debian.org. Bohužel verzi 4.3.0 už nemohu nikde najít. Tak jsem postahoval, předpokládám, novější a funkčí verzi 4.8.0 - a to balíky: linux-doc-4.8_4.8.7-1_all, linux-headers-4.8.0-1-all-amd64_4.8.7-1_amd64, linux-headers-4.8.0-1-amd64_4.8.7-1_amd64, linux-headers-4.8.0-1-common_4.8.7-1_amd64, linux-headers-4.8.0-1-common-rt_4.8.7-1_amd64, linux-headers-4.8.0-1-rt-amd64_4.8.7-1_amd64, linux-image-4.8.0-1-amd64_4.8.7-1_amd64 a linux-kbuild-4.8_4.8.7-1_amd64.
Nastartoval jsem live distro. Vytvořil složku /mnt/debian a mountnul jsem do složky systém.
Pak jsem přes příkaz "sudo chroot /mnt/debian" vlezl do systému.
Stáhnout balíky z netu bohužel nešlo (nefunkční internet), tak jsem zkopíroval stažené balíky a přes dpkg -i nainstaloval. Během instalace to psalo chyby, že nejsou připojeny /proc /dev (a myslím, že ještě něco).
V /boot/ se po instalaci vytvořily soubory config, initrd.img, System.map a vmlinuz.
Na závěr jsem ještě přes "sudo grub-install --root-directory=/mnt/debian /dev/sda" zkusil znovu nainstalovat grub.
A po resetu grub stále vidí pouze windows na druhém disku. Když v grubu zadám "ls (hd0,1)/", tak soubory na systémovém disku bez problému vidím - takže grub disk přečte.

Otázka co tedy dělám špatně? :-(

Petr Krčmář

Úspěšný chroot vyžaduje ještě minimálně připojení proc, sysfs a bind devu dovnitř chrootu. Je také dobré si pohlídat funkční připojení, aby se vyřešily závislosti.

Mimochodem: grub je velmi dobře udělaný zavaděč a má vlastní řádku, ve které je možné ručně zvolit jádro a initrd z libovolného disku a nabootovat. Takže pokud tam je skutečně funkční jádro a je problém jen v konfiguraci grubu, je možné to zkusit nahodit takto ručně a pak opravovat v plně běžícím systému.

alikon

Díky moc za směřování při postupu opravy odinstalovaného kernelu. Nakonec stačilo do chrootu bindnout dev, proc a sys. Pak šlo bez errorů nainstalovat kernel. Na závěr bylo ještě potřeba přeinstalovat grub ze zprovozněného systému, protože hlásil chybovou hlášku "error: no symbol table".

Jen jsem nepřišel na to, jak v chrootu zprovoznit internet? Teď to sice už nepotřebuji, ale kdybych to potřeboval někdy v budoucnu...