Grubok összefűzése

Gentoo-logo
Probléma: Össze akarsz fűzni két vagy több grubot egymással úgy, hogy van egy „elsődleges” grub, amiből lehet indítani a többi „másodlagost”. Mindezt úgy, hogy az UEFI se bolonduljon meg, és a disztribúció specifikus beállítások is megmaradjanak.

Probléma részletesebben: Tételezzük fel, hogy van két Linux disztribúciód telepítve. Az egyszerűség kedvéért vegyük az én esetemet: van egy Ubuntu és egy Gentoo. Az Ubuntut használod a mindennapi tevékenységre, hagyod az automatikát dolgozni minden tekintetben, így kernel, grub és indítási paraméterek ügyében is. Arra van szükséged, hogy mindennap megbízhatóan működjön. A másik oldalon viszont van egy Gentoo-d is, ami a játszós rendszer, ahol többek közt saját kernelt is forgatsz, saját paraméterekkel indítod, és nem baj, ha egy elcsúszott konfiguráció miatt nem indul az X (se).

Ha a Gentoo grubja az elsődleges, akkor kiesnek az Ubuntu automatikái, extrém esetben előfordulhat akár egy indíthatatlan rendszer. Hétfő reggel, munkakezdés előtt szerintem senki nem szeretne ezzel játszani. Ha az Ubuntu az elsődleges, akkor a Gentoo beállításaival kell mindig szenvedni.

Logikusan hangzik, hogy használjuk az UEFI-t arra, hogy váltogassunk a Grubok között. Végül is nem kellene bonyolultabb lennie annál, hogy a Gentoo grubja betelepül esp partícióba. Onnantól pedig az UEFI felismeri és azt indítom, amelyiket csak akarom. Ötletnek nem volt rossz, de nem nyert. Valamiért nálam úgy megkeveredett ettől az UEFI, hogy le kellett húzni az SSD-t a SATA portról ahhoz, hogy legalább POST-oljon a gép. Valami nagyon nem százas az Asus UEFI-jében, az hótziher. Az SSD visszacsatlakoztatása után elindult az Ubuntu grubja, én pedig úgy gondoltam, hogy innentől nem piszkálom az oroszlánt és hagyom az ötletet. Amúgy is, ezzel elvesztettem volna a Fast Boot (gyors indítás) funkciót, szóval annyira nem kár, hogy nem jött be.

Megoldás: Az Ubuntu grubja lesz az elsődleges, ami chinload paranccsal betölti a Gentoo grubját. A Gentoo grubja viszont az UEFI miatt nem mehet a rendszerindításra fenntartott boot + esp jelzőkkel ellátott partícióra, így az a Gentoo partícióján a /boot/grub könyvtárba kerül grub.efi néven.

Megoldás menete:

  1. Legyen elsődleges az Ubuntu grubja, így megmarad az automatika. Jó eséllyel itt nincs teendőd.
  2. Az Ubuntun a /etc/grub.d/40_custom fájlba tegyél be egy egyedi bejegyzést, ami a Gentoo partíciójáról betölti a grubot:
    menuentry "Gentoo Grub .efi" {
            insmod ext2
            insmod chain
            search --no-floppy --set=root --fs-uuid a8a2b463-6bdc-4f3d-856e-33186a4e5f0c
            chainloader /boot/grub/grub.efi
    }

    Az a8a2b463-6bdc-4f3d-856e-33186a4e5f0c helyére helyettesítsd be a Gentoo partíció azonosítóját. Ehhez segítséget a Partíció UUID meghatározása kisokosban találsz.

  3. Futtasd le a sudo update-grub parancsot, hogy az új bejegyzés bekerüljön az Ubuntu grubjába.
  4. Indítsd el a Gentoot úgy, ahogy eddig szoktad, hiszen az új bejegyzésünk még nem működik.
  5. Hozd létre a Gentoo grubját a következő paranccsal:
    grub-mkimage -o grub.efi --format=x86_64-efi '--prefix=(hd0,gpt3)/boot/grub' ext2 part_gpt

    A (hd0,gpt3) helyére illeszd be a Gentoo partíciójának a helyét.

  6. grub-mkconfig > /boot/grub/grub.cfg paranccsal készíts egy új grub konfigurációt. Vagy másold ide a meglévőt.
  7. Csinálj egy szimbolikus linket a /usr/lib/grub/x86_64-efi -re a /boot/grub könyvtárban: ln -s /usr/lib/grub/x86_64-efi /boot/grub/
  8. Hozd létre a fonts könyvtárat a /boot/grub könyvtárban: mkdir /boot/grub/fonts
  9. Másold be a /usr/share/grub/unicode.pf2 fájlt a /boot/grub/fonts könyvtárba cp /usr/share/grub/unicode.pf2 /boot/grub/fonts/

Kész is. Újraindítás után az Ubuntu grubjának indítania kell a Gentoo grubját, amit pedig innentől úgy szabsz testre, ahogy csak akarsz. Az ne zavarjon, hogy az Ubuntu az update-grub parancs futtatásakor (legyen az manuális vagy alapértelmezett) időnként frissíti a saját elképzeléseit is. A lényeg, hogy a mi bejegyzésünk permanensen megmarad.