Názor k článku Distribuce slučují adresáře /lib a /usr/lib, je to dobrý nápad? od M. Prýmek - Zkusím to říct ještě jinak: zkus si představit,...

  • Článek je starý, nové názory již nelze přidávat.
  • 22. 7. 2012 14:54

    M. Prýmek

    Zkusím to říct ještě jinak: zkus si představit, že jsi nikdy žádné initrd neviděl.

    Máš zadání: chci mít důležité části systému na RAID26, který je děsně složitý.

    Jak bys to vyřešil?

    Řešení 1:
    Máš separátní partišnu s nějakým rozumným FS (třeba ext2), kam dáš /boot (kam logicky dáš kernel i se všemi moduly a nebudeš ho rafinovaně dávat půlku do /boot a zbytek do /lib/modules). Pak boot bude vypadat takhle: bootloader umí číst ext2, natáhne a spustí kernel, který si načte všechny potřebný moduly pro RAID26 a z něho spustí /sbin/init. Pokud je potřeba v téhle fázi něco v userspace, pak to logicky patří do /boot a nikam jinam. Zvolený FS musí umět číst i loader i kernel, ale to nevadí, protože je to FS jednoduchý a ve všech scénářích stejný.

    Řešení 2:
    Vyrobíš BloatedLoader(R) (prakticky vzato druhý speciální kernel), který umí číst RAID26. Pomocí něj natáhneš z RAID26 kernel a initrd. A budeš prohlašovat, že to je boží řešení, protože můžeš bootovat, z čeho chceš, a že pro bootování z RAID26 je to nutnost, protože RAID26 je taaaak složitý a vyžaduje user-space utility.

    Chytře zamlčíš nedostatky:
    1. kód pro čtení RAID26 musíš mít jednak v loaderu, jednak v kernelu (de facto totiž udržuješ dva různé kernely se stejnou schopností (číst RAID26), ale úplně jiným kódem)

    2. musíš udržovat ekosystém pro srpávnou volbu toho, co je v initrd potřeba, a pro jeho vygenerování

    3. musíš myslet na to, abys initrd vygeneroval vždycky, kdy je to potřeba

    4. když disk z počítače vyndáš a dáš jinam, tak nenabootuje, protože v initrd není to, co tam mít potřebuješ

    5. jo a jen tak mimochodem - dost pravděpodobně pořád budeš potřebovat nějakou formu té spešl partišny z Řešení 1, protože kód BloatedLoaderu je tak velký (nezapomeňme, že je to druhý kernel), že se ti do miniaturního bootsektoru nevejde a odněkud ho načíst potřebuješ

    No takže si zvolíš Řešení 2, budeš se tvářit, že je to jediný možný řešení, protože máš přece RAID26! a když ti někdo řekne, že systém X umí taky bootovat z RAID26 a initrd k tomu nepotřebuje, opáčíš mu, že tě jeho X-ová dogmata nezajímají...