Zažil jsem zase pěknou historku, o kterou se rád podělím, protože skončila dobře. Používám na domácím desktopu Mageiu 4, protože je mi stále sympatická a nechci se uvěznit jen ve světě Debianu nebo Ubuntu.
Tento zápisek snad není popisem mé blbosti, ani hejtem na distro… ale prostě o zbytečném úkolu, který jsem si vyrobil, ani nevím jak. Myslím, že ne blbostí. Stále mě to dost energie, ale nakonec vše dobře dopadlo.
Zadání aneb Definice problému
V tomto počítači, s procesorem Intel Core i7, 3,4 MHz, 4 GB RAM, mám dva disky:
- starší Seagate Technology 500630AS (/dev/sdb)
- novější Seagate Technology 500413AS (/dev/sda)
Oba mají kapacitu 500 GB. Na sda byla Mageia, swap a datový prostor asi 450 GB, na sdb Debian, swap a datový prostor (tuším sdb3) asi 420 GB. Zatímco na sda je stále souborový systém ext4, na sdb3 byl opravdu hodně dlouho ReiserFS. Byl tam ještě déle, než se zjistilo, že Hans Reiser zabil svou ženu. V té době mi přišel systém fajn, ale i přes ujišťování, že odsouzení Reisera nebude mít na vývoj vliv, první následné Ubuntu (které jsem tehdy používal) odsunulo ReiserFS na vedlejší kolej, v Debianu tuším nebyl při instalaci vůbec, takže začaly vznikat problémy.
Po letech, kdy jsem si říkal, že nebudu stěhovat 500 GB dat, protože stejně nemám kam, jsem nakonec postupně prostor našel, přestal nahrávat z televize (bo neni čas) a postupně směřoval k migraci. Poslední kapkou bylo, že s ReiserFS měl problém Dropbox, který používáme v rodině ke sdílení fotek – spousta z nich se z mého kompu vůbec nedostala k ostatním.
Tak jsem se rozhodl, že zbytek dat přesunu na druhý disk, oddíl na sdb zruším a vytvořím znovu se systémem ext4.
Kde se asi stala chybička?
To jsem udělal, uložil tabulku oddílů, správně nastavil nový /home (tj. sda) a restartoval Mageiu. Čekal jsem chybu s GRUBem, ale bylo to zábavnější. Od dob, kdy jsem tyhle srandy naposledy řešil, se pár věcí změnilo, pár ale ne. Tak například Mageia stále používá GRUB1, který jsem nikde neviděl, ani nepamatuju. To by ani nevadlo, ale boot systému skončil hláškou nástroje dracut, který jsem viděl poprvé a trochu jsem si zanadával, co zas „Frantíci“ vymysleli po letech za „draka“. Až později jsem zjistil, že Dracut je nástroj jádra… sorry kluci.
Odkazovaný oddíl neexistuje. Zrušil jsem dva oddíly – jeden swap a jeden datový, ani z jednoho se nebootovalo a předpokládám, že nebyl důvod spouštět instalaci boot loaderu. Jestli měl datový oddíl uvedené UUID, už nezjistím. Tak co to sakra je za hlášky?
Jak z toho ven?
Logicky (aspoň myslím) mě napadlo – chroot, úprava GRUBu, úspěšný boot. Připojil jsem sda1, kde je Mageia, zavaděč byl na /dev/sda:
mkdir disk mount /mnt/sda1 /disk mount --bind /dev /disk/dev mount --bind /sys /disk/sys mount --bind /proc /disk/proc chroot /disk /bin/bash
Pokusů bylo více, tady už píšu jen úspěšný postup (je potřeba připojit všechny virtuální adresáře, protože bez toho nepojede z diskových nástrojů skoro nic). V tom nouzovém režimu se používá /bin/zsh, ten ale zase není v Mageie, takže proto argument /bin/bash.
Po každé úpravě, které následně shrnuji, následoval reboot (nebo více). Bez úspěchu.
- spustil jsem naivně grub-install /dev/sda v domnění, že si najde systémy na discích a vygeneruje bootovací nabídku,
- hledal jsem nějakou konfiguraci pro GRUB, něco v /etc/grub.d.. nic takového pro první verzi neexistuje,
- zkoušel jsem upravovat /boot/grub/menu.lst s následným spuštěním grub-install, dokonce jsem soubor odstranil, aby se vygeneroval,
- spustil jsem drakboot, abych zjistil, že neumí položky menu vygenerovat, ale pouze je načítá z /boot/grub/menu.lst,
- editoval jsem nabídku GRUBu přímo při spuštění a zkoušel různé parametry jader,
- hledal jsem diskový oddíl odkazovaný z chyby dracutu, resp. onen záznam, který na něj odkazuje.
Nevěděl jsem jednu věc. Dracut má svou konfiguraci v /etc/dracut.conf.d/, kde jsou jakési skripty pro jednotlivé oddíly. Ale ani tam nebyl odkazován disk s oním UUID.
Až Dracut mi otevřel oči a pochopil jsem zhruba, jak to funguje. Hlavním příkazem je v tomto případě
dracut --regenerate-all –force
Až tento příkaz přegeneruje konfiguraci zaváděcích modulů. Nevím ovšem kdy a kdy v nich vznikl problém a proč se projevil zrovna takto. Faktem zůstává, že se mi ani poté nepodařilo nainstalovat nový a funkční zavaděč s plnou nabídkou dostupných systémů – povedlo se zapsat prázdnou bootovací nabídku, ale už nevím, jak Mageia vygeneruje dostupné systémy. Ručně jsem to samozřejmě dělat nechtěl. Měl jsem připravené startovací skripty a moduly v Mageie (plus starší Debian na sdb1 je taky funkční), ale chyběla právě ta nabídka, kterou bych systém nakopl. Mezitím jsem si nachystal SystemRescueCD, tak jsem chtěl zjistit, jak mi pomůže.
SystemRescueCD
V poslední fázi mi ulehčil práci. Obsahuje spoustu šikovných nástrojů už v bootovací nabídce. Jedním z nich je Super GRUB2, který dokáže najít spustitelný systém na každém oddílu a nastartovat ho bez ohledu na jeho zavaděč. Několik prvních pokusů bylo marných a stále jsem končil na chybě ze začátku článku, ale nakonec se systém rozběhl a normálně spustil. Ihned jsem v Drakbootu ručně nastavil jedno jádro, zapsal zavaděč, opět restartoval a konečně to vše funguje, jak má.
Výsledek záchranné akce
Stále nevím, kde vznikla chyba, stále nevím, jak vygenerovat do bootovací nabídky všechny systémy. Nepoužitá jádra jsem odinstaloval, takže to tak moc nepotřebuju, počkám na nové jádro a systém to dořeší. Všechno funguje. A jako bonus jsem zjistil, že ten starší disk, na který se měla vrátit původní data, byl strašně hlučný, protože ten novější není vůbec slyšet. Zvykl jsem si na ten randál, o to milejší je to krásné ticho.
Věci se mění a musím se zas něco doučit. Ale začnu asi u Jessie…
Ad ReiserFS
– V Debianu je, jen je potreba pustit Expert Install a vybrat nacteni patricneho modulu. V nastroji pro rozdeleni disku pak bude o polozku navic 😉
Ad Chroot
– adresar /proc by se mel mountovat spise prikazem „mount -t proc none /kam“ nez pomoci bindovani
– adresar /sys neni k oprave grubu ani k vetsine dalsich cinnosti potreba
Ad UUID
– je vhodne si pri jakekoliv operaci s diskem udelat zalohu a to bud pomoci prikazu „blkid“ nebo pomoci „ls -l /dev/disk/by-uuid/“
– osobne UUID moc rad nemam, proto vzdy upravuju grub.cfg (menu.lst), /etc/fstab a /etc/initramfs-tools/conf.d/resume (na ten se casto zapomina) na standardni „dev/[hd,sd]neco“
Ad Grub
– nekdy je proste nejrychlejsi oprava Grubu prikazem „apt-get install lilo“ 🙂
– oprava Grubu spociva v uprave souboru grub.cfg (menu.lst), /etc/fstab, /etc/initramfs-tools/conf.d/resume a nakonec ve vygenerovani noveho initramfs (na coz se vetsinou zapomene a pak to skonci presne jako u tebe). Pokud initramfs neumim korektne vygenerovat (tusim ze to je „update-initramfs -c -k verze_jadra“ pak staci nainstalovat neco, co se do initramfs pridava (mdadm, lvm,…) a balickovaci system initramfs pregeneruje sam…
V shellu init ram disku travim v posledni dobe hodne casu 😀