Vysvětlení pomocí Windows oddílu
Dejme tomu, že jste noví uživatelé Linuxu a kdysi jste používali Windows. Když jste si chtěli s kamarádem vyměnit nějaká data, připojili jste jeho disk do počítače, spustili Windows a disk se objevil pod nějakým písmenem, například e:\. Teď ale používáte Linux a chcete udělat to samé. Pokud používáte nějakou "uživatelsky přívětivou" distribuci, je možné, že vám vše zařídí a data na disku najdete někde v /mnt/ nebo /media/. Co ale dělat, když ne? Nebudeme se zabývat tím, jak se to dá zařídit v různých grafických nástrojích a rovnou se vrhneme na příkazový řádek. Dejme tomu, že máme disk připojen do počítače jako primární slave, tím pádem ho v Linuxu najdeme jako /dev/hdb. Ještě je potřeba zjistit, který oddíl je ten správný. Na to budeme potřebovat vypsat všechny oddíly na disku (zde na ukázku je jen důležitá část výpisu).
# fdisk -l /dev/hdb Device Boot Start End Blocks systém /dev/hdb1 * 1 510 4096543+ W95 FAT32 /dev/hdb2 511 1191 5470132+ W95 FAT32
Příjemnějším příkazem než # fdisk -l /dev/hdb může být # cfdisk /dev/hdb. Má textové rozhraní, ve kterém se snadno zorientujete.
Jak je vidět, na disku jsou dva oddíly FAT32. První je bootovací, na něm bude pravděpodobně systém, takže nás bude zajímat spíše druhý. Připojit ho můžeme třeba do /mnt/win_data, na to použijeme příkaz # mount /dev/hdb2 /mnt/win_data/ (adresář /mnt/win_data musí existovat). Tak a oddíl je připojený a dostupný.
Disk máme půjčen na delší dobu a potřebujeme na něj každý den ukládat nějaká data. Nebudeme ho samozřejmě pokaždé připojovat takovýmto zdlouhavým způsobem, a tak si údaje zapíšeme do konfiguračního souboru. Na to je vyhrazen soubor /etc/fstab. Jeho struktura je jasně daná, najdete ji ve výpise.
Zkratka fstab pochází ze slov FileSystem TABle, což lze přeložit jako tabulka souborových systémů.
Struktura souboru /etc/fstab 1.umístění zařízení 2.kam připojit 3.typ souborového systému 4.parametry připojení 5.určuje, jestli bude svazek zálohován 6.určuje, zda kontrolovat při startu
Podle tohoto pravidla bude záznam o našem FAT32 oddíle vypadat takto:
/dev/hdb2 /mnt/win_data auto defaults 0 0
Parametr defaults je vlastně takový balíček parametrů. A to rw, suid, dev, exec, auto, nouser a async. Rw znamená, že se svazek připojí ke čtení i zápisu. Suid povolí interpretaci SUID a SGID bitů. Dev povolí interpretaci znakových a speciálních blokových zařízení. Exec povolí spouštění binárních souborů. Auto umožní připojení pomocí mount -a, což zároveň znamená, že se svazek připojí při startu systému. Nouser povolí připojovat svazek jen superuživateli. Async říká jádru, že se data mají přenášet asynchronně.
Ještě by bylo vhodné říci, že parametr user automaticky přináší další parametry, a to noexec, nosuid a nodev. Ty pomáhají udržet bezpečnost systému. Noexec zakáže spouštění souborů, nosuid ignoruje význam SUID a SGID bitů a díky parametru nodev nebude jádro interpretovat znakové a speciální blokové zařízení.
První dvě položky z výpisu asi nemusím vysvětlovat. Typ souborového systému jsem nechal na hodnotě auto, což znamená zjišťovat automaticky. Hodnota defaults je výchozí hodnota pro parametry disku. Nula na páté pozici znamená, že svazek nemá být zálohován. Nula na šesté pozici znamená, že nemá být ani kontrolován. Takto záznam v /etc/fstab odpovídá příkazu, který jsme si ukázali před chvílí. Teď už budeme mít disk připojen vždy po startu, aniž by bylo nutné psát nějaké příkazy.
Možná jste si ale všimli, že na disk může zapisovat jen root, diakritika se nezobrazuje správně nebo máte připomínky k nastaveným právům. Také se vám nemusí líbit, že je typ souborového systému nastaven na auto. Takže to doopravíme následovně:
/dev/hdb2 /mnt/win_data vfat umask=0,iocharset=iso8859-2,codepage=852 0 0
Jak vidíte, typ souborového systému je teď zadán přímo, a to vfat (bylo by možné použít i msdos, ale délka názvů souborů by byla krácena na jedenáct znaků). Pokud byste si náhodou nevěděli rady, jaký typ zadat, nechte připojit oddíl automaticky a pak se podívejte do /etc/mtab, jaký typ vybralo jádro. Souboru /etc/mtab se budeme věnovat ještě později. Umask je bitová maska, která určuje, která práva nebudou nastavena. Umask=0 znamená, že se nastaví práva 777 (rwxrwxrwx) čili zápis, čtení i spouštění pro všechny. Iocharset a codepage potom nastavují kódování.
Teď bych řekl, že nastavení je kompletní. Ale co když náš systém používá více uživatelů, chtěl bych, abych zapisovat mohl jen já, číst všichni ze skupiny borci a ostatní nemohli zapisovat ani číst? Navíc by bylo ještě vhodné, aby mě systém nemučil hláškami, že nemůže změnit vlastníka nebo práva souboru. FAT32 totiž žádná práva neobsahuje, a tak takové úpravy nejsou možné.
Pokud máte nějaké oddíly nastaveny, aby se nepřipojovaly automaticky a nechce se vám je připojovat z příkazového řádku, lze zařídit, aby se vám připojovaly samy při vstupu do adresáře přípojného bodu. Umí to například souborový manažer krusader. Jinou možností je zvolit si pravým tlačítkem myši na přípojném bodě, ať se vám příslušný oddíl připojí.
/dev/hdb2 /mnt/win_data vfat uid=1000,gid=1001,dmask=027,fmask=137,noauto,\\ user,iocharset=iso8859-2, codepage=852,quiet 0 0
Uid určuje vlastníka všech dat na tomto svazku, gid potom skupinu, které data patří. Dmask a fmask je vylepšení volby umask. Dmask nastavuje masku na adresáře a fmask na soubory. To znamená, že vlastník může vše, až na spouštění souborů, skupina nesmí nikam zapisovat ani spouštět soubory, ostatní nesmějí nic. Parametr noauto určuje, že se souborový systém nemá připojovat automaticky při startu. Proto zde máme navíc parametr user, který ho umožní obyčejnému uživateli připojit. Jedině tento uživatel ho může později odpojit (omezení se nevztahuje na superuživatele). Nakonec díky parametru quiet nebudeme informováni, že nelze změnit práva a vlastníky souboru. Obyčejný uživatel teď může připojit oddíl například pomocí $ mount /mnt/win_data. Odpojuje se pomocí $ umount /mnt/win_data.
Je nutné ovšem zdůraznit, že všechny disky se musí před vysunutím odpojit (pomocí příkazu umount). To platí i pro diskety. Je možné, že to ve vašem systému dělá nějaký program automaticky, např. SuperMount nebo AutoMount. Pokud to neprovedete, poškodíte si data, a to nejen ta, která jste ukládali, ale i ta na cílovém disku; pochopitelně pokud lze na médium ukládat (např. disketa, USB disk, ZIP disk apod.). Pozn. red.
Teď už tedy máme pro svůj oddíl kompletní záznam v fstab, ještě by bylo vhodné ukázat, co se zaznamenává do souboru /etc/mtab.
$ grep hdb2 /etc/mtab /dev/hdb2 /mnt/win_data vfat rw,noexec,\\ nosuid,nodev,uid=1000,gid=1001,dmask=027,fmask=137,\\ iocharset=iso8859-2,codepage=852,quiet,user=henly 0 0
Jak je vidět, struktura je podobná jako v /etc/fstab, pouze zde nějaké volby chybí a jiné jsou navíc. Některé volby jsou vynuceny jinou volbou (user >> noexec,nosuid,nodev), jiné volby zde nepotřebujeme (noauto). Zajímavá je volba user, která zde má hodnotu henly, to je jméno uživatele, který oddíl připojil a může ho tedy i odpojit.
Podobný obsah jako /etc/mtab má i /proc/mounts. V určitých situacích lze nahradit /etc/mtab za symbolický odkaz právě na /proc/mounts. Například když je / připojen jen ke čtení, nebo máme opravdu velký počet připojených svazků. Bohužel ale takto přicházíme o některé důležité informace, a tak se to při normálním použití nedoporučuje.
Ještě abychom měli informace úplné, ukážeme si, jak připojit /dev/hdb2 z příkazového řádku identicky jako v fstab:
# mount -t vfat -o uid=1000,gid=1001,dmask=027,fmask=137,\\ iocharset=iso8859-2,codepage=852,quiet /dev/hdb2 /mnt/win_data/
Z voleb nám vypadlo noauto a user, jelikož z principu věci nedávají tyto parametry z příkazového řádku smysl.
Souborové systémy Linuxu
Teď když jsme si vysvětlili základy na FAT32 oddílu, podíváme se, jak nastavit systémový oddíl, swap, proc a další. Už jsme si řekli, že IDE disky a mechaniky najdeme pod /dev/hdXY, hlavně na serverech jsou ale oblíbená také SCSI zařízení, ta najdeme pod /dev/sdXY. Asi nejčastěji používaný systém souborů je ext3, takže si teď ukážeme, jak vypadá takový záznam o systémovém disku.
/dev/sda1 / ext3 defaults,errors=remount-ro 1 1
První tři položky jsou asi jasné, ve čtvrté položce vidíme novou volbu errors=remount-ro, už podle názvu je jasné, co bude dělat - pokud se na oddíle vyskytnou chyby, připojí ho znovu jen ke čtení. Je více možností, co dělat, když se vyskytnou chyby. Pátá položka informuje, že se má oddíl zálohovat, což ale neznamená, že opravdu zálohován bude. Je potřeba další nastavení (viz článek o dump/restore v čísle 04/2005). Poslední volba určuje, že se má oddíl při startu kontrolovat.
/dev/sda3 /home ext3 auto,rw,nosuid,nouser,async 1 2
Řádek výše je nastavení domácího adresáře uživatelů systému, všechny parametry už známe, jen si vysvětlíme, proč poslední položka je 2 a ne 1. Jednička se píše jen u svazku připojeného do kořene /. To znamená, že se kontroluje jako úplně první. Všechny ostatní svazky, které mají být kontrolovány, se kontrolují až po něm a tedy mají číslo 2.
/dev/hda2 none swap sw 0 0
Takto vypadá nastavení odkládacího oddílu. Žádný bod připojení nemá, proto je na druhém místě none. Typ připojení je swap a nastavení pro něj může být např. sw. Že tento oddíl nechceme zálohovat ani kontrolovat, je asi jasné.
proc /proc proc defaults 0 0
Proc je virtuální souborový systém, který nám umožňuje získávat důležité informace z jádra (ale i zapisovat). Jelikož je jen virtuální, píše se místo umístění například proc (název je libovolný). (Více informací o /proc získáte v článku Proč máme /proc, 12/2005).
Často se setkáte ještě s jedním virtuálním souborovým systémem, a to tmpfs. Funguje jako ramdisk, a tak se data, která na něj uložíme, nezapisují na disk, ale zůstávají v paměti.
Další přípojné body
Disky bychom měli probrány, ale ještě jsme si neřekli, jak nastavit disketové, CD-ROM a DVD-ROM mechaniky.
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
Typ souborového systému u diskety může být různý, proto necháme typ na auto. Pro jistotu můžete použít parametr sync. Bez něj se vám může stát, že si disketu vysunete z mechaniky, ještě než se vám na ni stihnou nakopírovat data, ačkoliv na obrazovce vidíte, že už je vše nakopírováno. S tímto parametrem se vám zase hodně zpomalí rychlost přenosu.
/dev/hdb /media/cdrom0 udf,iso9660 \\ ro,user,noauto,iocharset=iso8859-2 0 0
Pro optickou mechaniku budeme potřebovat dva různé typy. UDF především pro DVD a iso9660 pro CD. Ještě nastavíme kódování na iso8859-2.
none /media/cdrom0 supermount dev=/dev/hdb,\\ fs=auto,--,iocharset=iso8859-2 0 0
U nastavení optické mechaniky může figurovat další možný parametr, obvyklý především v uživatelsky přívětivých distribucí, a to supermount. Supermount je záplata pro jádro, díky němuž démon v systému sleduje aktuální dění, a tak je schopný připojit CD automaticky po vsunutí do mechaniky a zase odpojit po vysunutí.
server:/cesta/k/datům /mnt/název nfs ro 0 0
A zde vidíme NFS přípojný bod, což je standardní unixový způsob sdílení dat. Podobně lze připojit data i přes sambu.
Zajímavé možnosti
Zbývají nám další zajímavé funkce, a to připojování podle názvu nebo identifikátoru svazku. To se nám bude hodit především na serveru, kde budeme mít větší množství disků. Totiž při zápisu, jaký jsme si zatím ukázali, by se nám mohlo stát, že by se nám disky prohodily. Samozřejmě ne jen tak samy od sebe, ale například po havárii řadiče, kdy zapomeneme, kde přesně byl který disk připojen a zapojíme je jinak. Proto existuje možnost disky si pojmenovat např. pomocí # e2label a přistupovat k nim podle názvu, nebo přiřadit identifikátor třeba příkazem # uuidgen.
LABEL=web /home/henly/public_html ext3 \\ auto,rw,nosuid,nouser,async 1 2
První položka je nyní název, který jsme si sami zadali. Pokud bychom chtěli označit svazky raději identifikátorem, mohla by první položka vypadat takto:
UUID=3e6be9de-8139-11d1-9106-a43f08d823a6
Dále vás bude asi zajímat, jak připojit obraz disku (ISO) jako virtuální CD-ROM. Z příkazového řádku takto:
# mount /tmp/data.iso /media/virt_cdrom -t \\ iso9660 -o loop,ro,iocharset=iso8859-2
Záznam do /etc/fstab bude vypadat asi takto:
/tmp/data.iso /media/virt_cdrom iso9660 \\ loop,ro,user,noauto,iocharset=iso8859-2 0 0
Další parametry připojení
U některých souborových systémů jako např. FAT32 vám může přijít vhod parametr conv. Nabývá hodnot b[inary], t[ext] nebo a[uto]. Jeho schopnost spočívá v konverzi MS-DOSového (Windows) textového formátu na UNIXový. Výchozí nastavení je binary čili nekonvertovat. Text znamená konvertovat vše (rozhodně nedoporučuji), auto potom zařídí konverzi všech souborů kromě těch se známými binárními příponami. Osobně dávám přednost výchozímu binary a texty si konvertuji sám podle potřeby pomocí unix2dos a dos2unix, pokud ale kopírujete ze svého Windows oddílu převážně texty, můžete možnost auto použít.
Dalších parametrů je nepřeberné množství, bohužel se do tohoto článku všechny nevejdou. Snad jste dostali odpovědi na většinu svých dotazů, další informace získáte příkazem man fstab a man mount.