Diskless linux

Z thewoodcraft.org


Do mých 22 let mne počítače nezajímaly. Jejich možnosti mne zaujaly až po roce 1991, kdy jsem je začal využívat především pro DTP práce. S internetem jsem se setkal až coby student politologie a religionistiky na MU v Brně, počátkem roku 1998. A přes webové technologie jsem se dostal od MS Windows k Linuxu. Roku 2003 jsem nastoupil jako adminitrátor MS Windows serveru a webu na ÚMOb Ostrava-Jih – do r. 2010 to byl největší obecní úřad v ČR, který na 90% pracovních stanic (cca 250 strojů) používal linuxový desktop. Tam jsem se dostal k virtualizaci a definitivně přestal používat MS Windows.

Na jaře 2008 jsme se rozhodli přestěhovat do Prahy a na základě mé inzerce na jobs.cz jsem dostal nabídku abych nastoupil jako administrátor linuxové infrastruktury počítačových laboratoří na Katedru řídící techniky ČVUT na Karlově náměstí v Praze. Do té doby 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.

A tak jsem se dostal k disklessovému linuxu. V počítačových laboratořích DCE se tehdy používal tzv. half-diskless, který vyžadoval lokálně nainstalovaný zavaděč GRUB se zakompilovaným ovladačem síťové karty. Což znamenalo, že každá pracovní stanice vyžadovala vlastní sestavení zavaděče a to bylo dost nepraktické. Proto jsem během následujících čtyř let přepracoval celou laboratorní infrastrukturu na full-diskless. Na DCE takto fungují laboratoře od r. 2010 – více viz Přehled vývoje infrastruktury pro diskless Debian na katedře DCE.

Přechodem na full-diskless jsem získal víc volného času a víceméně náhodou jsem začal pracovat na vedlejšák jako administrátor unixové infrastruktury pro eIdentity. Tam jsem mohl prakticky uplatnit další technologie s nimiž jsem se seznámil při budování disklessové infrastruktury na DCE. Realizoval jsem několik virtualizačních clusterů i distribuovaná úložiště.

Od roku 2014 se diskless DCE propaguje i do laboratoří spravovaných katedrou počítačů.

V roce 2016 jsem po pěti letech definitivně ukončil práci pro eIdentity, protože jsem svůj volný čas u počítače chtěl nadále věnovat už jen tomuto serveru, který běží od r. 2013. A svůj pracovní čas jsem rozdělil mezi DCE a Katedru kybernetiky, která sídlí ve stejné budově – pro její počítačové laboratoře jsem vytvořil obdobnou infrastrukturu.

Do léta roku 2019 byl laboratorní diskless na DCE a DC provozován výhradně přes pevnou síť, ale od zimního semestru by měl stejný diskless běžet v rámci DC i na TurtleBotech přes Wi-Fi.

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. To však není nezbytně nutné.

Pokud je takové zařízení vybaveno síťovou kartou, která umí komunikovat přes PXE, dokáže zavádět operační systém také po síti a pracovat se soubory na vzdáleném úložišti. I v tomto případě se ale většinou používá blokové zařízení. iSCSI

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.

Dynamický ramdisk

NFS nad NFS

Další moje stránky na téma diskless linux