Diskless linux

From thewoodcraft.org
Jump to navigation Jump to search
PoznámkaJako vývojář a správce disklessové infrastruktury Katedry řídící techniky ČVUT na Karlově náměstí v Praze pracuji od r. 2008 a od roku 2016 dělám tutéž práci i pro Katedru kybernetiky, která sídlí v téže budově.

Disklessová infrastruktura se používá většinou v počítačových laboratořích. Do onoho roku 2008 pro mne znamenal pojem laboratoř místnost plnou baněk, zkumavek a křivulí. Počítačové laboratoře však připomínají spíš klasickou školní třídu, vybavenou výpočetní technikou, na níž se studenti učí programovat.


Historie disklessové infrastruktury v laboratořích Katedry řídící techniky FEL ČVUT se začala psát během zimního semestru roku 2005 – zhruba dva a půl roku před tím, než jsem nastoupil do rozjetého vlaku.

Koncept, založený na překrytí souborového systému počítače, datovou vrstvou umístěnou v paměti počítače (ramdisku) implementoval Pavel Píša a rozšíření zavaděče GRUB o možnost síťového zavádění přes PXE Michal Sojka – kolegové, od kterých jsem po svém příchodu načerpal základní know-how. Mou doménou byla do té doby především virtualizace v linuxovém prostředí. K disklessu jsem se dostal přes infrastrukturu, která obsluhovala počítačové laboratoře. Ta byla částečně virtualizovaná, proto jsem ji dostal na starost. V současné době je plně virtualizovaná a od léta 2012 rovněž založená na diskless linuxu.

Co znamená diskless?

Většina počítačů, ale i dalších zařízení (tablety, mobilní telefony aj.) je vybavena lokálním blokovým zařízením, na kterém jsou uloženy soubory s nimiž pracuje spuštěný operační systém. Není to však nezbytně nutné. Pokud je takové zařízení vybaveno síťovou kartou, která umí komunikovat přes PXE a zavést jádro operačního systému po síti, může mít svoje soubory uloženo na vzdáleném úložišti a pracovat s nimi po síti.

Diskless linux je operační systém založený na GNU/Linux, který umí fungovat bez toho, že by musel být vybaven lokálním blokovým zařízení – je bez disku.



Jak to funguje?

Má-li to počítač povoleno, vyšle po zapnutí přes svoji síťovou kartu do sítě žádost o přidělení IP adresy. Součástí této žádosti je jeho MAC adresa. Pokud má DHCP server pro tuto MAC adresu odpovídající záznam tak síťové kartě odpoví.

V odpovědi může být mimo konfigurace sítě také cesta k souboru, který si má stroj zavést do paměti a spustit – většinou je to tzv. zavaděč, ale může to být i rovnou jádro operačního systému.

Zavaděč je výhodnější, protože umožňuje sofistikovaně předat linuxovému jádru další parametry.

Kromě jádra se většinou stahuje i soubor, ve kterém je komprimovaný obsah ramdisku. I ten se vybalí do paměti a jádro ho využije k tomu, aby připravilo podmínky pro spuštění operačního systému.

Výhodou ramdisku je, že jádro nemusí mít zakompilované všechny potřebné moduly. Stačí mu jen ty, které mu dovolí pracovat se sítí a vybaleným ramdiskem. Zbytek může být součástí ramdisku. Ovšem ani ten nemusí obsahovat vše. Pokud používáme diskless linux, stačí aby byly k dispozici moduly, které umožní přistupovat k datům po síti.

To je klíčový rozdíl oproti běžnému linuxovému systému.

Zavádění u fyzického stroje

U fyzického stroje, který spouští systém z lokálního blokového zařízení se může vyskytnout široká škála řadičů, blokových zařízení a souborových systémů… a to vše vyžaduje mít vždy k dispozici ten správný ovladač, aby se bylo možné dostat na uložená data.

Jenže čím víc ovladačů, tím větší jádro a ramdisk. A pokud zrovna nějaký ovladač chybí, nebo máte poškozený disk, či řadič – jste v koncích.

Moje know-how

K zajištění celé infrastruktury laboratoří stačí pouze jeden plnotučný linuxový virtuální stroj, ze kterého se spouští vše ostatní.

Na tomto stroji běží NFS server, který publikuje systémové adresáře ostatních disklessových strojů. S výhodou při tom využívám možností souborového systému Btrfs, který umožňuje publikované adresáře (subvolume) podle potřeby snapshotovat.

Výhodou virtualizovaného NFS serveru je, že se dá mnohem rychleji restartovat, než fyzický stroj. Také se dá relativně snadno odmigrovat na jiný fyzický stroj, aniž by to bylo spojeno s nějakým zásahem do síťové infrastruktury.

Z tohoto stroje se pak spouští jako první disklessový stroj DHCP server, ze kterého se přes TFTP natahuje zavaděč. Používám dva. Pro zavádění přes EFI GRUB2, a pro legacy PXE PXELINUX. Každý z nich má svoje přednosti i nevýhody. Jakmile běží DHCP server, je disklessová infrastruktura laboratoří funkční.

Zavádění disklessového DHCP serveru se liší od všech ostatních v tom, že při tom využívám tzv. full-diskless

Protože si jen stěží může sám od sebe vyžádat konfiguraci sítě a jádro s ramdiskem, používá malý virtuální disk (cca 200MB) s normálním zavaděčem, který si namountuje při spuštění jako lokální blokové zařízení. K tomuto virtuálnímu disku však přistupuje přes NFS, stejně jako k ostatním souborům. Využívá ho jen při spuštění, kdy z něj načítá jádro s ramdiskem. Tím se významně snižuje pravděpodobnost, že by došlo k poškození jeho souborového systému při pádu virtuálního stroje. Kořenový adresář, kde je zbytek souborů už je připojen přes NFS.

  • Výhodou NFS je, že se po síti přetahuje vždy jen ten soubor se kterým se skutečně pracuje, což významně snižuje traffic.
  • V případě, že dojde k přerušení síťového připojení, nedojde k pádu virtuálu, ale pouze k pozastavení. Jakmile se spojení na NFS server obnoví, stroj funguje normálně dál, aniž by tím došlo k nějaké chybě. To je hlavní výhoda oproti NBD, se kterým jsem kdysi rovněž experimentoval.
  • Ohromnou výhodou také je, že se každá změna v souboru prakticky ihned projeví na straně NFS serveru. Odpadá tudíž veškeré riziko spojené s kešováním dat při zápisu na blokové zařízení.

Vrstvy

Diskless není žádná magie. Ale ten, který používám v našich laboratořích je v jedné věci jedinečný.

Nepracuje se totiž s žádnou systémovou "imidží" jak si někteří myslí. Ve skutečnosti jde o sendvič několika vrstev z adresářů připojených přes NFS, překrytých ramdiskem. Všechno je tedy pouze v paměti – s výjimkou uživatelského adresáře, pokud nejste zrovna přihlášeni jako lokální uživatel guest.

Tyto vrstvy se skládají podle toho na jakém stroji jste a co si zvolíte při zavádění. V laboratořích jsou totiž různé stroje. S různými grafickými kartami, s různými monitory, různými přídavnými kartami a různě zapojené. O detekci všech zařízení se stará standardní distribuční linuxový kernel. Jeho ramdisk se liší od distribučního pouze dvěma skripty a malou úpravou init skriptu – bez ní totiž zavádění skončí na kernel panic. V podstatě jde o původní způsob přepnutí do systému, který nějaký dobrák z původního init skriptu vyhodil.

Lokální blokové zařízení se využívá jen pokud se na něm najde linuxový swap. To umožňuje významným způsobem navýšit velikost virtuálního disku umístěného v RAM a spouštět virtuální stroje, i přes to že svými parametry výrazně překračují fyzické možnosti stroje na kterém diskless běží.

Pokud totiž dochází místo v paměti, odloží spuštěný systém tu část RAM se kterou se zrovna nepracuje do swapu. Pochopitelně čím je přístup ke swapu rychlejší, tím lépe. Proto je optimální, je-li swap umístěn na SSD nebo NVME disku.