Hlavní navigace

Spojte několik souborových systému do jednoho s mhddfs

28. 5. 2008
Doba čtení: 5 minut

Sdílet

Navýšení diskové kapacity pouhým přidáním disku je v Linuxu zhola nemožná věc. Někdy ale prostě potřebujete snadno spojit několik disků a sečíst jejich kapacitu. Pokud nepoužíváte Solaris a ZFS, budete potřebovat nějaké nové řešení. Jedno takové jednoduché s rychlé si představíme – je jím mhddfs.

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)?

  • Jeden
    18 %
  • Dva
    36 %
  • Tři
    21 %
  • Čtyři
    11 %
  • Více
    14 %

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.

root_podpora

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.

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.