FK~

Moje odkazy

Ostatní odkazy

Close Windows
Nenajdete mě na Facebooku ani Twitteru
Rozpad EU
Jsem členem FSF
There Is No Cloud …just other people's computers.
Sane software manifesto / Manifest příčetného softwaru

Hybridní diskové pole: RAID 1 s HDD a NVMe SSD

vydáno: 13. 8. 2023 12:18, aktualizováno: 25. 8. 2023 00:00

Na chvíli jsem se teď na hlavní pracovní stanici po letech se SSD vrátil k čistě rotačním diskům (HDD), protože jsem si potřeboval udělat pořádek v datech a soubory se přeci jen rychleji přesouvají v rámci jednoho souborového systému (i když je na pomalém HDD) než mezi více oddíly nebo fyzickými disky. A dostatečnou kapacitu jsem měl jen na HDD. Původní plán byl, že soubory roztřídím podle toho, jak a jak často s nimi pracuji a umístím na různě rychlé disky (v počítači jsem měl kombinaci asi šesti různých SSD a HDD disků). Úklid sice celkem úspěšný byl, ale navrhnout rozdělení souborů na různě rychlá úložiště bylo složitější. Buď bych to musel řídit ručně a mít data na více souborových systémech (původní stav jen s lépe rozmístěnými soubory) nebo si softwarově vytvořit hybridní disk (ty se prodávaly v dobách, kdy flash paměti byly drahé na to, aby se z nich poskládal celý disk – šlo o HDD+SSD v jednom SATA disku, kde SSD sloužilo jako rychlá cache pro HDD). To se dá postavit nad bcache, dm-cache, Flashcache atd. Ale protože to pracuje na úrovni blokového zařízení, nejde říct, kde mají které soubory být a funguje to automaticky. Problém je v tom, že systém neví, které soubory potřebuji číst rychle (byť třeba jednou za dlouho) a u kterých je mi to jedno (i když je můžu číst relativně často).

HDD + NVMe SSD pro RAID 1 pole

Nakonec jsem usoudil, že 4 TB M.2 NVMe disky už nejsou tak drahé a nejlepší a zároveň nejjednodušší bude mít všechna data na rychlém SSD/NVMe zařízení. Zároveň se ale nechci vzdát bezpečí zrcadleného pole (RAID 1). V tomto článku si tedy ukážeme, jak složit diskové pole z více různě rychlých zařízení a jak mu říct, že má číst přednostně z těch rychlých.

Pro záznam uvádím přibližné ceny vybraných SSD a HDD (koncové ceny včetně DPH, srpen 2023):

Název Typ Rozhraní Kapacita Cena
WD BLACK SN850X NVMe TLC SSD M.2 NVMe 4 TB 8 200 Kč
Kingston NV2 4TB QLC SSD M.2 NVMe 4 TB 4 700 Kč
Samsung 870 EVO 4TB TLC SSD SATA 4 TB 6 000 Kč
Samsung 980 PRO 1TB TLC SSD M.2 NVMe 1 TB 1 800 Kč
WD Gold 4TB CMR HDD, 256 MB cache, 7 200 rpm SATA 4 TB 3 900 Kč
WD Red Plus 4TB CMR HDD, 256 MB cache, 5 400 rpm SATA 4 TB 2 300 Kč
Seagate BarraCuda 4TB SMR HDD, 256 MB cache, 5 400 rpm SATA 4 TB 1 900 Kč
WD Black 1TB CMR HDD, 64 MB cache, 7 200 rpm SATA 1 TB 2 300 Kč

Výchozí stav je, že máme softwarové (MD) diskové pole RAID 1 (zrcadlení) složené ze dvou 4 TB HDD a k tomu jsme přikoupili nový 4 TB NVMe disk. Pole jsem vytvářel už dřív a vzniklo asi nějak takto:

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[ab]1

Běžné M.2 NVMe (na rozdíl od serverových U.2/U.3) nepodporují hot-swap, takže počítač musíme vypnout, nainstalovat NVMe disk do slotu na desce nebo do PCIe adaptéru a zase nastartovat systém. Potom už budeme dělat vše za chodu a bez dalších restartů – s počítačem se dá během toho normálně pracovat.

Po znovu-naběhnutí systému ověříme, že nový disk byl správně detekován:

nvme list               # příkaz z balíčku nvme-cli
dmesg | grep -i nvme    # nebo jen prohledáme log 
ls -l /dev/nvme*        # nebo se podíváme do /dev
lsblk                   # výpis všech blokových zařízení

n.b. předpokladem je, že nový disk je minimálně stejně velký jako ty původní.

Na novém NVMe vytvoříme stejné oddíly jako jsou na HDD. Používám k tomu příkaz parted a aby byl výsledek na bajt stejný, přepnu si jednotky pomocí unit b. Já mám na těchto discích vždy tři oddíly a celkem dvě pole, ale zde budeme pro jednoduchost předpokládat, že máme na každém jen jeden oddíl a dohromady jedno pole.

Přidáme nový disk do pole a zároveň zvýšíme celkový počet zařízení ze dvou na tři:

mdadm --grow /dev/md0 --add /dev/nvme0n1p1 --raid-devices=3

Pokud máme v plánu jeden HDD odebrat, vynecháme --raid-devices=3. Já jsem si zatím nechal aktivní všechny tři disky: 2×HDD + 1×NVMe. Také je možnost nechat jeden HDD jako tzv. spare tzn. záložní disk, který se automaticky použije v případě selhání aktivního disku (to je dobré hlavně u serverů, kde při poruše nemusíme hned spěchat s novým diskem do datového centra a pole se opraví samo).

alias mdstat='cat /proc/mdstat'    # alias pro sledování stavu pole

Synchronizace pole bude trvat několik hodin v závislosti na velikosti disků a rychlosti čtení z HDD. Po tu dobu bude počítač zpomalený – až synchronizace doběhne, změříme rychlost jednotlivých disků:

hdparm -t /dev/sda
hdparm -t /dev/sdb
hdparm -t /dev/nvme0n1
hdparm -t /dev/md0

HDD budou mít rychlost řádově 200 MB/s zatímco NVMe víc než patnáctkrát víc, přes 3 000 MB/s a hlavně budou mnohem lepší v náhodném přístupu a paralelismu (tam je významné zlepšení i oproti SATA SSD). Při čtení z pole RAID 1 pak budeme dostávat střídavě vysoká i nízká čísla, podle toho, z kterého disku se zrovna Jádro rozhodlo číst. Zápis na RAID 1 obecně odpovídá nejpomalejšímu disku v poli a čtení se pohybuje někde mezi nejrychlejším a nejpomalejším. Při paralelním čtení z více procesů či vláken dosáhneme teoreticky součtu rychlostí čtení ze všech disků pole.

NVMe jsme ale přidávali do pole proto, abychom měli vyšší rychlost vždy a ne jen při každém druhém či třetím čtení. Proto je potřeba poli říct, že některé disky má používat hlavně pro zápis (HDD) tzn. číst přednostně z těch ostatních (NVMe). To se dá nastavit parametrem --write-mostly příkazu mdadm nebo zápisem do virtuálního souboru v sysfs:

echo  writemostly > /sys/block/md0/md/dev-sda1/state  # zapneme režim write-mostly
echo -writemostly > /sys/block/md0/md/dev-sda1/state  # vypneme režim write-mostly

Aktuální stav zjistíme vypsáním těchto virtuálních souborů nebo příkazem mdadm --detail /dev/md0.

$ cat /sys/block/md*/md/dev-sd*/state
in_sync,write_mostly
in_sync,write_mostly
in_sync,write_mostly
in_sync,write_mostly

$ cat /sys/block/md*/md/dev-nvme*/state
in_sync
in_sync

Po tom, co si nastavíme všechny HDD na writemostly měla by už rychlost celého pole odpovídat rychlosti NVMe. Jádro sice NVMe pro čtení jen preferuje a nemá zakázáno čtení z HDD, ale číst z nich prakticky nebude.

Za cenu jednoho drahého NVMe a jednoho levného HDD (případně dvou), máme hybridní pole, které je spolehlivé a odolné proti výpadku (zrcadlení - RAID 1) a jehož rychlost čtení odpovídá NVMe a rychlostí zápisu je na úrovni HDD. Pro mne je to momentálně optimální poměr mezi cenou, kapacitou, výkonem a spolehlivostí. Je to zároveň nekomplikované řešení, což snižuje riziko chyby (ať už uživatele nebo softwaru). Osobně mne překvapilo, že i s těmi čistě rotačními disky jsem byl schopný celkem normálně fungovat (asi největší problém bylo prohlížení fotek, jejichž náhledy ve složce se pomalu načítaly).

Samotný RAID 1 se nepovažuje za zálohu, ale můžeme ho k zálohování použít. Disky v poli lze totiž dynamicky přidávat a odebírat za chodu, takže např. ten druhý HDD můžeme připojit jen občas, nechat pole na něj synchronizovat data a následně ho odpojit a uložit někam do bezpečí. Tento způsob zálohování má výhody i nevýhody – musíme sice kopírovat celou kapacitu – i volné místo – ale zase máme jistotu, že máme zazálohováno vše, data se čtou a zapisují jednoduše sekvenčně od začátku do konce, takže odpadá režie souborového systému (která může být u velkého množství malých souborů značná) i režie dešifrování a šifrování, pokud nad polem máme LUKS (což je obvykle vhodné až nutné).

P.S. Dá se vymyslet ledasco. RAID dvou SSD disků nebo se třeba na RAID vykašlat úplně a jenom zálohovat (např. několikrát denně odesílat Btrfs snapshoty na druhý disk v počítači + méně často na externí). Další možnost by bylo použití souborového systému, který umí spravovat více blokových zařízení, a řídit umístění různých souborů na různě rychlé disky pomocí něj. To by teoreticky bylo optimální řešení… Pokud s tím máte někdo reálnou zkušenost, budu rád za komentáře – já se k tomu v téhle iteraci nedopracoval a zvolil jsem řešení, které je pro mne jednodušší a důvěryhodnější.

Témata: [hardware]

Komentáře čtenářů

Tento článek zatím nikdo nekomentoval

Přidat komentář

reagujete na jiný komentář (zrušit)
jméno nebo přezdívka
název příspěvku
webová stránka, blog
e-mailová adresa
nápověda: možnosti formátování
ochrana proti spamu a špatným trollům

Náhled komentáře