Technomorous

V.D.O. (3)

Co se tedy může zvrtnout?

Ideální situace pro VDO je, že máte velké pole, které není ani náhodou plné a vy si ho pomocí VDO ještě zvětšíte. Z deseti terabajtů hardwarových máte dvanáct-třináct terabajtů virtuálních a je to v pohodě, protože na nich leží sotva pět terabajtů dat a uživatelé vám přisypou maximálně několik giga dat nových za den. Slunce svítí, kytičky kvetou, ptáčci zpívají, lepší to už ani být nemůže. Co se tedy může pokazit?

V zásadě jsou to dvě věci:

  1. Může dojít místo na virtuálním disku
  2. Může dojít místo na fyzickém disku

A co s nimi?

Došlo místo na virtuálním disku

Jinými slovy, komprimovalo a deduplikovalo se více, než jste čekali, df -h hlásí plno, ale pomocí vdostats vidíte, že ještě plno není. Tohle je ta jednodušší situace:

 # df -h .
 Filesystem        Size  Used Avail Use% Mounted on
 /dev/mapper/vdo1   12G  2.6G  8.6G  23% /mnt/looptest
 # cd /
 # umount /mnt/looptest
 # vdo growLogical --name=vdo1 --vdoLogicalSize=13G
 # e2fsck -f /dev/mapper/vdo1
 # resize2fs /dev/mapper/vdo1
 # mount /dev/mapper/vdo1 /mnt/looptest
 # cd /mnt/looptest
 # df -h .
 Filesystem        Size  Used Avail Use% Mounted on
 /dev/mapper/vdo1   13G  2.6G  9.5G  22% /mnt/looptest
 

I když na mém loopback device místo bylo, zvětšit jeho virtuální kapacitu o jeden gigabajt se zjevně povedlo. Pokud by snad na disk byla i nadále ukládána dobře komprimovatelná data, dá se to opakovat dál a dál.

Došlo místo na fyzickém disku

V tomto okamžiku slunce zašlo za mrak, kytičky spálil mráz a ptáčci chcípli. Když se pokusíte uložit něco na disk, jehož filesystém hlásí spoustu volného místa, ale fyzický disk vespod už žádné nemá, nastane peklo. Poslední operace zápisu selže, data se neuloží, vy se to ale na první pohled nedozvíte. Chyby se totiž objeví pouze v dmesg jako I/O error, disk se následně přepne do read-only režimu a končíte:

 # df -h .
 Filesystem        Size  Used Avail Use% Mounted on
 /dev/mapper/vdo1   13G  5.6G  6.5G  47% /mnt/looptest
 
 # vdostats --human-readable
 Device                    Size      Used Available Use% Space saving%
 /dev/mapper/vdo1          8.0G      7.4G      0.6G  93%           37%
 
 # dd if=/dev/urandom of=grand-finale.bin bs=131072 count=8192
 8192+0 records in
 8192+0 records out
 1073741824 bytes (1.1 GB) copied, 5.31326 s, 202 MB/s
 
 # df -h .
 Filesystem        Size  Used Avail Use% Mounted on
 /dev/mapper/vdo1   13G  6.6G  5.5G  55% /mnt/looptest
 
 # vdostats --human-readable
 Device                    Size      Used Available Use% Space saving%
 /dev/mapper/vdo1          8.0G      8.0G      0.0G 100%           34%
 
 # dmesg | tail
 [93859.978067]	EXT4-fs warning (device dm-0): ext4_end_bio:302: 
 		I/O error -28 writing to inode 19 (offset 520093696
 		size 8364032 starting block 1750055)
 [93859.978071]	Buffer I/O error on device dm-0, logical block 1750055
 [93864.336428]	JBD2: Detected IO errors while flushing file data on dm-0-8
 [93864.339959]	Aborting journal on device dm-0-8.
 [93864.340463]	Buffer I/O error on dev dm-0, logical block 1606659,
 		lost sync page write
 [93864.340476]	JBD2: Error -5 detected when updating journal superblock
 		for dm-0-8.
 
 #mount | grep vdo1
 /dev/mapper/vdo1 on /mnt/looptest type ext4 (ro,relatime,data=ordered)
 

Pěkné, což? Ale co s tím?

V reálném světě byste přihodili další disk do RAID pole, na kterém máte data fyzicky uložená, počkali až se rebuildne a pak přes něj roztáhli VDO. V naší malé simulaci pomocí loopback device se to dá vyzkoušet taky. Nejdříve si zvětšíme "fyzické úložiště":

 # umount /mnt/looptest
 # vdo stop --name=vdo1
 # losetup -D
 # dd if=/dev/zero of=fakedisk2.img bs=131072 count=16384
 # cat fakedisk2.img >> fakedisk1.img
 # losetup -fP ./fakedisk1.img
 # lsblk
 NAME           MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
 loop0            7:0    0    10G  0 loop  
 

Disk je tedy větší, teď je třeba modifikovat VDO a následně ho rebuildnout:

 # vdo start --name=vdo1
 # vdo growPhysical --name=vdo1
 # vdostats --human-readable
 Device                    Size      Used Available Use% Space saving%
 /dev/mapper/vdo1         10.0G      8.0G      2.0G  80%           34%
 

A je to. VDO je zase použitelné, filesystém uvnitř žádnou změnu ani nezaznamenal, od počátku viděl kapacitu jinou. Jelikož ale poslední operace nedoběhla správně, je samozřejmě před připojením lepší udělat fsck.ext4. Vzhledem k žurnálovacímu filesystému byste neměli přijít o nic víc, než právě o poslední neúspěšný zápis.

-

Závěrem ještě dvě věci, které nutno specificky zmínit:

  • Virtuální zařízení založené na VDO se standardně chová jako SSD i když jde fyzicky o plotnový disk. Tedy při mazání nedochází k uvolňování místa, je zapotřebí pravidelně používat fstrim nebo - pokud používáte filesystém, který to umí sám rovnou - připojovat s parametrem discard.
  • Jde o původně proprietární technologii, kterou RedHat pořídil a otevřel světu. Udělal to relativně nedávno, takže jde zatím o doménu hlavně RHEL, CentOS a Fedory. Z distribucí, které zajímají mě (Slackware, Void, Devuan, Gentoo) jsem nějaké zmínky našel akorát u Gentoo, jak jsou na tom mainstreamové, morem a cholerou prolezlé distribuce, nevím.
PS: Asi tyto tři články časem spojím do jednoho a vydám na starém blogu.

V.D.O. (2)

Pojďme si ukázat, jak na to. Podařilo se mi tu dostat o chlup dál, než vyučující zamýšlel - zvládl jsem VDO vytvořit, zaplnit, rozbít, rozšířit a opravit - cílem přitom bylo zůstat pouze u prvního bodu. Nicméně alespoň můžu ukázat vše kompletně od A do Z.

Začněme tedy vytvořením loopback device, na kterém budeme simulovat disk:
 # dd if=/dev/zero of=./fakedisk1.img bs=131072 count=65536
 # losetup -fP ./fakedisk.img
 # lsblk
 

Poslední příkaz vypíše stav blokových zařízení po vytvoření loopbacku, mělo by to vypadat zhruba takto:

 NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
 sda      8:0    0 465.8G  0 disk 
 +-sda1   8:1    0  1000M  0 part /boot
 +-sda2   8:2    0   7.9G  0 part [SWAP]
 +-sda3   8:3    0 456.9G  0 part /
 sr0     11:0    1  1024M  0 rom  
 loop0    7:0    0     8G  0 loop 
 

Nad loopbackem vytvoříme VDO zařízení, kernelu se to nebude líbit, nerad dělá virtuální věci nad virtuálními věcmi, takže ho přinutíme parametrem --force, ten v reálu třeba není.

 # vdo create --name=vdo1 --device=/dev/loop0 --vdoLogicalSize=12G --force
 Creating VDO vdo1
 Starting VDO vdo1
 Starting compression on VDO vdo1
 VDO instance 0 volume is ready at /dev/mapper/vdo1
 

Nad osmigigabajtovým diskem loop0 tedy vytváříme dvanáctigigový virtuální disk vdo1, přičemž to druhé číslo jsme si zcela objektivně vycucali z prstu a doufáme, že to bude v pohodě. Tady je právě to největší úskalí VDO - systém vidí při použití /dev/mapper/vdo1 disk o kapacitě 12 GB, že je založen na fyzickém zařízení o velikosti 8 GB ho vůbec nezajímá. Pokud ukládáte data, která jsou málo duplicitní či špatně komprimovatelná, ke 12 GB se ani nepřiblížíte a nikdo vás neupozorní, že místo došlo. Jen v dmesg se objeví I/O errory a začnou se dít zlé, ošklivé a nepěkné věci. O tom ale dále, teď máme krásný, nový disk o jehož kvalitách se můžeme přesvědčit příkazem vdostats:

 # vdostats --human-readable
 Device                    Size      Used Available Use% Space saving%
 /dev/mapper/vdo1          8.0G      4.0G      4.0G  50%           N/A
 

Toto je jediné místo, kde uvidíte, jak je zaplněno fyzické zařízení. Také zde vidíte, že hned po vytvoření je obsazeno 4 GB místa - to jsou metadata pro fungování VDO, nemá tedy smysl dávat ho na malé disky, chce to alespoň tak velký disk, aby úspora vyrovnala tyto čtyři gigabajty.

Když na novém zařízení vytvoříme filesystém, připojíme ho a koukneme se na jeho parametry, uvidíme jiná čísla:

 # mkfs.ext4 /dev/mapper/vdo1
 # mount /dev/mapper/vdo1 /mnt/looptest/
 # cd /mnt/looptest
 # df -h .
 Filesystem        Size  Used Avail Use% Mounted on
 /dev/mapper/vdo1   12G   41M   12G   1% /mnt/looptest
 

A teď přijde pochopitelně nějaké to testování:

 # dd if=/dev/zero of=nuly.bin bs=131072 count=8192
 # dd if=/dev/urandom of=bordel1.bin bs=131072 count=4096
 # cp bordel1.bin bordel2.bin
 # cp bordel1.bin bordel3.bin
 

Vytvořili jsme čtyři soubory: gigabajtový soubor plný nul, půlgigabajtový soubor plný pseudonáhodného bordelu a dvě jeho kopie. Jak vypadá obsazení disku?

 # ls -lh
 total 2.6G
 -rw-r--r-- 1 root root 512M Nov 19 11:15 bordel1.bin
 -rw-r--r-- 1 root root 512M Nov 19 11:15 bordel2.bin
 -rw-r--r-- 1 root root 512M Nov 19 11:15 bordel3.bin
 -rw-r--r-- 1 root root 1.0G Nov 19 11:14 nuly.bin
 
 # df -h .
 Filesystem        Size  Used Avail Use% Mounted on
 /dev/mapper/vdo1   12G  2.6G  8.6G  23% /mnt/looptest
 
 # vdostats --human-readable
 Device                    Size      Used Available Use% Space saving%
 /dev/mapper/vdo1          8.0G      4.5G      3.5G  56%           80%
 

Vše je asi dle očekávání pozorného čtenáře: filesystém eviduje přes dva a půl gigabajtu dat, VDO ale gigabajt nul uložilo jen jako informaci o tom, že takový soubor existuje, skutečné místo zabírá pouze první půlgigový soubor s bordelem a jeho dvě kopie existují opět pouze v metadatech.

Takhle to tedy vypadá ideálně. Méně příjemné aspekty VDO příště.


V.D.O. (1)

Vzhledem k tomu o jaké věci se zajímám a s jakýma lidma se stýkám, nemůže se nikdo divit, že neznám každou existující technologii s velmi ostrou hranou. Alespoň tak každoroční linuxová školení, z mně neznámého důvodu mi pravidelně placená zaměstnavatelem, mají nějaký přínos. Letos si už z prvního dne odnáším poznání, že existuje VDO.

VDO, neboli Virtual Data Optimizer, je kernelový modul, který umožňuje lepší využití blokových zařízení. Používá k tomu tři principy ve třech po sobě jdoucích fázích:

  1. Eliminace zero-bloků - hned v první fázi jsou k dalšímu zpracování poslána jen skutečná data, bloky nul jsou uloženy jako metadata a nic nezabírají.
  2. Deduplikace - data bez nulových bloků jsou následně deduplikována, tj. zjišťuje se, zda už někde na disku stejná data jsou. Pokud ano, záznam o dalším jejich výskytu se opět vloží jen do metadat a další místo není zabráno.
  3. Komprese - to, co prošlo až do poslední fáze je opravdu zapotřebí někam na disk zapsat a než se tak stane, je to ještě zapakováno pomocí LZ4.

Vypadá to skvěle a kdyby to aktuálně podporovala distribuce, kterou jsem si nainstaloval na svůj nový starý desktop, už bych si VDO na své minipolíčko poštval. Jsou tu ale i jistá úskalí, vše se totiž děje na úrovni blokového zařízení, tedy ještě pod filesystémem, hned příště na příkladu nad loopback device ukážu jaká.


Kulaté linuxové výročí

Ve slavnostní den, který je už chvíli dokonce státním svátkem, navíc den předtím, než se odebéřu na své pravidelné každoroční linuxové školení, jsem si vzpomněl, že někdy touto dobou jsem si v roce 1999 v jindřichohradeckém knihkupectví pořizoval brožurku nazvanou RedHat Linux 6.1 s přiloženým instalačním CD a ta navždy změnila můj život.

Říkám zhruba, protože přesně to už nevím. Nebylo to o mnoho dříve, protože RedHat 6.1 vyšel na začátku října a překlad a tisk brožury jistě chvíli zabral. Nebylo to ale ani o mnoho později, protože RedHat 6.2 byl vydán v dubnu 2000 a překládat starou verzi potom by nemělo smysl.

Plus mínus je to tedy už dvacet let, co používám Linux. A je to taky už skoro deset let, co jsem na to nostalgicky vzpomínal.

Čas skutečně letí jako splašená herka...


Jablečná klempířina

Nic na světě není jen jednoduché. Máte moc hezký nový patnáctipalcový PowerBook G4, do kterého jste nacpali 2 GB RAM a on ne vždy nastartuje. Podezříváte pevný disk, ale rozhodnete se přeci jen vyzkoušet několik jiných paměťových modulů, co kdyby? Vezmete tedy z regálu svůj starý hezky dvanáctipalcový PowerBook G4, abyste ho na malou chvilku připravili o jeho paměť a on vám zhruba půl metru nad zemí vyklouzne z ruky udělá si bouli.

Po naprosto bezproblémových společných jedenácti letech, kdy jste ho opečovávali jako v bavlnce. Ne, není to vždy jednoduché.

Naštěstí hliník je měkký kov a nepraská. Naštěstí Lada kdysi vyráběla z drátů šperky a má stále šperkařské nářadí, celkem šetrné k povrchu kovu. O dvě hodiny později tak byla boule pryč. To místo už nikdy nebude tak hezké jako bylo od podzimu 2003 dodnes, ale není tak ošklivé, jak bylo ty dvě nekonečné hodiny. Klempířinu na notebooku bych fakt nečekal...

...jo a dělají to všechny paměti, takže je to diskem. Ty zvuky jsou fakt otřesné a sem-tam za chodu zmizí veškerý obsah.


PowerBook G4 15"

PowerBook G4 15", který jsem si dovezl od anonymního štědrého dárce je částečně vyčištěn, úplně přeinstalován a v této chvíli z něj píšu tento příspěvek. Doplnil jsem do něj druhý gigabajtový modul, takže aktuálně má celé 2 GB RAM a je to tak pamětí nejvybavenější počítač s PowerPC G4, který jsem kdy měl.

PowerBook_G4_15-2019_11_15.jpg

Zdaleka ale není čistou instalací Leoparda hotovo. Jednak nechci provozvat OS X jako hlavní systém, tato čest připadne Void Linuxu, který je relativně čerstvě portován i na PowerPC, co je ale důležitější - počítač bude potřebovat i nějakou tu hardwarovou péči. Rozhodně je třeba vyměnit pevní disk, tenhle dodělává a když je třeba nad ním provést nějakou náročnější operaci, shazuje celý systém. Také bude třeba ještě trošku počítač vyčistit a také bych se asi měl podívat na mechanismus uchycení displeje, je trochu volný. Přesto je to fakt skvělý počítač, což ovšem vím už z doby, kdy jsem nad ním slintal v obchodech s jablečnou technikou a sám si mohl dovolit maximálně 12" iBook.


Powerbanka

Odolával jsem dlouho, protože považuju přelévání elektřiny z akumulátoru do akumulátoru za částečně pošahaný nápad, ale nakonec jsem podlehl a pořídil si powerbanku. Alternativou je palivový článek v ceně středně velkého jen lehce ojetého auta nebo malý trampský gril s integrovaným peltierovým článkem. Obé má jistě své místo i využití, ale pro občasné nabití mobilu, tabletu či sady vysílaček je to tak trošku přehnané.

V akci za pětistovku pořízená powerbanka AlzaPower s kapacitou 20000 mAh vypadá, že zvládne vše, co od ní očekávám. Dobít někde na kopci Xiaomi, jeho interní akumulátor po dvou letech už není, co býval, napojit můj budoucí tabletobook když do něj budu někde v terénu celou noc sázet spojení do deníku, přes USB nabíječku trochu našťouchnout AA/AAA akumulátory do PMR stanic a pokud se nějak podaří připojit měnič, tak i dobít HAM stanici AnyTone. Víc nechci, proto jsem nebyl ochoten utrácet víc peněz a i když mám jemné výhrady k dílenskému provedení (tváří se jako luxusní kus hardware s pseudokarbonovou texturou a přitom stavové LCD vrže a lesklý plast po obvodu dorazil už s mikrovlásečnicemi), za ty prachy dobrý.


TOPlist