Předpokládejme, že máte tři disky o velikostech 80, 40 a 60 GB. A máte 150 GB hudebních souborů, které na tyto disky musíte uložit. Jak to uděláte?
Vím o dvou řešeních:
- buď jednoduše vytvoříte tři samostatné hudební adresáře – jeden na každém disku,
- nebo vytvoříte nějaký RAID, který spojí všechny disky do jednoho pole.
První řešení je docela otravné, protože se musíte rozhodnout, jak data rozdělíte a pamatovat si, co kde máte. Například se rozhodnu uložit veškerou klasickou hudbu na první disk a rockovou na ten druhý. Pak se první disk zaplní a na druhém bude hromada místa. Budu muset soubory složitě přesouvat mezi disky nebo používat symlinky.
Metoda s RAID sice tento problém řeší, ale zase snižuje spolehlivost pole nebo vás naopak připraví o část použitelného diskového prostoru.
Kolik máte ve svém počítači disků (i externích)?
Nedávno jsem ale objevil lepší řešení všech podobných problémů: mhddfs. Jedná se o modul pro souborový systém FUSE, který dovoluje kombinovat několik menších svazků do jednoho velkého virtuálního, který obsahuje všechny soubory uložené na jednotlivých discích a zároveň sloučí volné místo. Navíc na rozdíl od ostatních podobných modulů (unionfs?) tento neomezuje možnost přidávání dalších souborů a dovoluje spravovat i to, kde budou soubory fyzicky uloženy.
Balíček se jmenuje mhddfs a je k dispozici v Debian Testing a Unstable. Vypadá to, že v současné chvíli není dostupný v Ubuntu.
Spojujeme disky
Řekněme, že zmíněné tři disky máte připojené do /mnt/hdd1
, /mnt/hdd2
a /mnt/hdd3
. Pak máte zřejmě něco takového:
$ df -h Filesystem Size Used Avail Use% Mounted on ... /dev/sda1 80G 50G 30G 63% /mnt/hdd1 /dev/sdb1 40G 35G 5G 88% /mnt/hdd2 /dev/sdc1 60G 10G 50G 17% /mnt/hdd3
Poté, co nainstalujete balíček mhddfs
za pomocí vašeho oblíbeného správce balíčků, můžete vytvořit mount point, nazvěme ho třeba /mnt/virtual
, ve kterém se pro vás spojí všechny tři disky dohromady. Krása FUSE spočívá v tom, že nemusíte být root
(postačí, budete-li členy skupiny fuse
), ale v tomto případě pro jednoduchost předpokládejme, že jsme přihlášeni jako root
.
# mkdir /mnt/virtual # mhddfs /mnt/hdd1,/mnt/hdd2,/mnt/hdd3 /mnt/virtual -o allow_other option: allow_other (1) mhddfs: directory '/mnt/hdd1' added to list mhddfs: directory '/mnt/hdd2' added to list mhddfs: directory '/mnt/hdd3' added to list mhddfs: move size limit 4294967296 bytes mhddfs: mount point '/mnt/virtual'
Volba -o allow_other
znamená, že výsledný souborový systém bude k dispozici všem uživatelům, nejen tomu, který jej vytvořil.
Výsledek bude vypadat následovně:
$ df -h Filesystem Size Used Avail Use% Mounted on ... /dev/sda1 80G 50G 30G 63% /mnt/hdd1 /dev/sdb1 40G 35G 5G 88% /mnt/hdd2 /dev/sdc1 60G 10G 50G 17% /mnt/hdd3 mhddfs 180G 95G 85G 53% /mnt/virtual
Jak vidíte, byl vytvořen nový souborový systém. Sloučil celkovou velikost disků dohromady (180 GB), spojil i využité místo na discích (95 GB) a sečetl volné místo (85 GB). Podíváte-li se na soubory v /mnt/virtual
, zjistíte, že se jedná o soubory ze všech disků a že se adresářové struktury „překryly“ do jedné společné.
Přidání souborů
Ale co když se pokusíte přidat nové soubory někam do /mnt/virtual
? No, to je docela složitý problém a musím říct, že se s ním autor mhddfs
vypořádal velmi dobře. Když vytvoříte nový soubor na virtuálním disku, modul mhddfs
vyhledá volný prostor, který se nachází na některém z disků. Pokud je dostatek místa hned na prvním disku, bude soubor vytvořen tam. Pokud na něm místo už není, (tedy je ho méně než určuje volba mlimit
, která je standardně nastavena na 4 GB), bude použit druhý disk. Pokud ani na něm není místo, použije se třetí a tak dále. Pokud je na všech discích méně než mlimit
místa, pak bude použit disk s největším volným místem.
Je to ale ještě lepší: pokud na disku dojde místo během zápisu (snažíte se na něm vytvořit příliš velký soubor), celý proces neselže, ale mhddfs
jednoduše přenese zapsaná data na jiný disk (na kterém je více místa) a pokračuje v zápisu na něm. Vše proběhne pro zapisující aplikaci zcela transparentně (ani nebude vědět, že k něčemu došlo).
Nyní můžete jednoduše pracovat se soubory v /mnt/virtual
a nestarat se o to, co bude čteno ze kterého disku. Výhodou je také velký diskový prostor, což znamená, že můžete ukládat jakékoliv soubory do zmíněného adresáře a (dokud je na některém disku místo) neřešit, který soubor se kam ukládá.
Správa virtuálního disku
Pokud se rozhodnete mount point aktivovat automaticky po startu, stačí přidat do souboru /etc/fstab
:
mhddfs#/mnt/hdd1,/mnt/hdd2,/mnt/hdd3 /mnt/virtual fuse defaults,allow_other 0 0
Pro další informace si prostudujte man mhddfs
.
Poslední, ale důležitá informace, kterou zmíním, je, že je velmi snadné přestat mhddfs
používat, pokud se tak později rozhodnete – neztratíte totiž žádná data nebo adresářovou strukturu. Řekněme, že si časem pořídáte nový 500 GB disk a rozhodnete se prodat ty menší třeba na eBay. Stačí jen připojit nový disk, zkopírovat na něj všechno z /mnt/virtual
a pak odstranit mhddfs
mount point a odpojit staré disky. Všechny vaše adresáře, které byly předtím spojeny ve virtuálu s pomocí mhddfs
, budou nyní spojeny doopravdy na novém disku.
Navíc díky tomu, že soubory nejsou doopravdy nijak interně rozsekané a rozptýlené po discích, můžete vždy, i když vám třeba mhddfs
nebude fungovat (nebo projekt přestane existovat), zkopírovat soubory a adresáře ze všech disků do jednoho adresáře a získáte stejnou strukturu, jakou jste předtím měli v /mnt/virtual
.
Původním autorem článku je Romam Mamedov. Článek byl z anglického originálu přeložen s jeho laskavým svolením a je vydán pod licencí CC Attribution-Share Alike 3.0.