Pravdepodobne viete, že údaje sa v počítači ukladajú na disk. Na to aby ste mohli, ale nejaké údaje ukladať musí byť jasné kde presne na disku tieto údaje budú uložené a ako ich nájdete, až ich budete potrebovať. Presne túto úlohu riešia súborové systémy. Súborový systém je teda štruktúra obsahujúca súbory (ich obsah) a ich atribúty a ďalšie informácie potrebné pre prácu so súbormi - metadáta.
Adresár (angl. directory) je v našom jazyku známy pod mnohými menami: zložka, priečinok, atď. Treba si uvedomiť, že adresár je len zvláštny typ súboru. Jeho zvláštnosť spočíva v tom, že pre daný typ súborového systému má vopred definovanú štruktúru. Pre novšie, inteligentné súborové systémy táto štruktúra obsahuje meno súboru a číslo tzv. inode-u. Inode je časťou metadát a obsahuje informácie o súbore ako sú jeho prístupové práva, dátum a čas vzniku, veľkosť a podobne. To prináša zo sebou zaujímavú možnosť mať v dvoch rôznych adresároch záznam ukazujúci na ten istý inode. Vtedy vlastne existuje jeden súbor na disku, má jediné miesto uchovávajúce prístupové práva, veľkosť a podobne, ale môže mať rôzne mená. Vo svete Unixu sa to označuje ako linka - hard linka.
Na rozdiel od operačného systému MSDOS alebo Windows, súborové systémy
v Unix-och spravidla nevidno automaticky (výnimku tvorí systém supermount,
ktorý je ale mimo rozsah tohoto dokumentu). Každý súborový systém, ktorý
má byť dostupný operačnému systému či jeho užívateľom je nutné najprv
pripojiť. Súbor /etc/fstab
obsahuje záznam o tom, ktoré
súborové systémy sa pripoja automaticky pri štarte systému.
Je dôležité si uvedomiť, že potreba pripájať a odpájať súborové systémy sa týka aj diskiet, CD-čiek a podobne. Zariadenia, ktoré podporujú zamykanie, zamknú médium po dobu, kedy je súborový systém na médiu pripojený. To znamená napríklad, že CD-mechanika alebo ZIP mechanika nereagujú na tlačidlo pre vybratie média, ak súborový systém na tomto médiu je pripojený. Na druhej strane, súborový systém nie je možné odpojiť ak sa používa. To znamená ak nejaký program má otvorený súbor na tomto súborovom systéme, alebo nejaký proces má adresár na tomto súborovom systéme nastavený ako aktuálny adresár.
Ako sme už povedali, jednou zo základných vlastností súborového systému je uchovávanie údajov. A to najhoršie čo sa môže stať je havária, ktorá môže mať za následok stratu týchto údajov. Žurnálovacie súborové systémy boli vyvinuté s cieľom obmedziť riziko straty dát na minimum. Preto sa každá operácia zapisuje do takzvaného žurnálu a v prípade, že sa skutočne úspešne dokončí tak sa v žurnále označí za vykonanú. V prípade, že dôjde k havárii tak v žurnále môže systém zistiť, ktoré operácie boli dokončené a čo bolo skutočne zapísané na disk. Operácie, ktoré neboli dokončené akoby sa ani nestali. To znamená, že síce môžete prísť o nejaké údaje (z poslednej operácie), ale stav súborového systému ako takého je konzistentný. Za zmienku stojí informácia, že z dôvodou rýchlosti sa často žurnálujú len metadáta.
FAT (File Allocation Table) ste mohli stretnúť medzi prvými v operačnom systéme MS-DOS. Charakterizovať ho možno tým, že súbory usporadúva do stromovej štruktúry adresárov, pričom hlavný adresár má stanovený maximálny počet položiek, ktoré môže obsahovať. Ďalšou charakteristickou črtou je FAT tabuľka. FAT filesystém obsahuje tieto tabuľky dve a pokiaľ je všetko v poriadku tak sú rovnaké. FAT je blok dát na začiatku súborového systému, kde sú poradové čísla blokov na ktorých sa nachádza ten ktorý súbor. V časoch MS-DOS 3.1 boli tieto čísla 12-bitové. Preto môžete občas nájsť tiež označenie FAT12. Samozrejme z toho vyplýva aj obmedzenie na počet dátových blokov, ktoré môže taký súborový systém obsahovať - 212. S príchodom väčších diskov prišli aj FAT systémy so 16-bitovými indexami blokov (FAT16) a neskôr až 32-bitovými indexami (FAT32). Poslednou črtou, ktorú spomenieme je obmedzenie mien súborov. Pôvodne bolo toto obmedzenie stanovené na 8 znakov vlastného mena a 3 znaky prípony. Oboje mohli obsahovať len ASCII znaky. Keď narástla potreba na dlhšie mená súborov, firma Microsoft pre udržanie spätne kompatibility zaviedla konvenciu, podľa ktorej je ôsmy znak nahradený znakom ~ (tilda), na znak toho, že meno súboru pokračuje v ďalšej položke adresára. Tieto rozšírenia dali príčinu pre nové meno: VFAT (Versatile(?) FAT). Nedostatkom FAT je, že informácie inode-u má uložené priamo v štruktúre adresárov.
Jedným z miest kde FAT prežíva do dnešných čias sú diskety.
# mount /dev/fd0 /mnt/floppy/
Všimnite si ale, že prístupové práva v takomto prípade povoľujú prístup pre zápis len pre roota:
# ls -ld /mnt/floppy /mnt/floppy/subor.txt drwxr--r-- 3 root root 7168 Jan 1 1970 /mnt/floppy -rwxr--r-- 1 root root 92599 Jul 19 1996 /mnt/floppy/subor.txt
Pokiaľ chcete povoliť prístup iným užívateľom môžete použiť niektorý z iných spôsobov. Všimnite si prístupové práva adresára
# mount -oumask=022 /dev/fd0 /mnt/floppy/ # ls -ld /mnt/floppy/ /mnt/floppy/subor.txt drwxr-xr-x 3 root root 7168 Jan 1 1970 /mnt/floppy/ -rwxr-xr-x 1 root root 92599 Jul 19 1996 /mnt/floppy/subor.txt # umount /mnt/floppy # mount -oumask=007,uid=rastos,gid=floppy /dev/fd0 /mnt/floppy/ # ls -ld /mnt/floppy/ /mnt/floppy/subor.txt drwxrwx--- 3 rastos floppy 7168 Jan 1 1970 /mnt/floppy/ -rwxrwx--- 1 rastos floppy 92599 Jul 19 1996 /mnt/floppy/subor.txt
Aby ste nemuseli vždy zadávať všetky parametre programu mount, môžete vložiť
príslušný riadok do /etc/fstab
:
/dev/fd0 /mnt/floppy auto defaults,noauto,users,uid=rastos,gid=floppy,umask=007 0 0
NTFS je ďalším vývojovým krokom z dielne Microsoftu. Je rýchlejší bezpečnejší a skutočne používa koncepciu inode-ov. Jeho hlavný nedostatok vidím v tom, že podrobnosti o jeho štruktúre nie sú verejne dostupné. Dôsledkom toho je to, že Linux-ový ovládač pre tento súborový systém podporuje len čítanie. Kód pre zápis je označovaný za experimentálny a v súčasnej dobe by mal umožňovať prepisovanie obsahu súborov za predpokladu, že nemeníte ich dĺžku.
WinFS vlastne nie je súborový systém, ale nadstavba nad NTFS, ktorá má umožniť rýchlejšie vyhľadávanie údajov pridaním istej funkcionality z oblasti databáz.
Pozor na to, že súbory, ktorých mená obsahujú znaky mimo ISO-8859-1,
nemusí byť pod Linux-om vidno ak nepoužijete príslušnú voľbu pri
pripájaní (pre slovenčinu a jadrá 2.4 iso8859-2
, pre jadrá 2.6 nls=iso8859-2
)
# mount -oro,umask=0222,nls=iso8859-2 /dev/hda2 /mnt/nt # ls -ld /mnt/nt "/mnt/hd/Documents and Settings/rastos/My Documents/" dr-xr-xr-x 1 root root 8192 2003-01-25 17:39 /mnt/nt -r-xr-xr-x 2 root root 630784 2003-01-25 18:46 /mnt/hd/Documents and Settings/rastos/My Documents/návod.doc
Príslušný riadok v /etc/fstab
potom vyzerá takto:
/dev/hda2 /mnt/nt ntfs defaults,ro,users,umask=0222,nsl=iso8859-2 1 0
Svet Unix-u a jeho klonov je ďaleko bohatší. Nájdeme tu
Jednou z typických vlastností Unix-ových súborových systémov je to, že blok inode-ov (tzv. superblok) má viacero kópií rozmiestnených po disku, ktoré operačný systém udržiava zosynchronizované. V prípade, že dôjde k pádu systému môžete stanoviť, ktorá kópia sa má použiť pri oprave súborového systému.
Keďže najpravdepodobnejšie sa stretnete s operačným systémom Linux,
spomenieme situáciu na ňom. Ešte donedávna takmer každý Linux-ový
systém používal ext2
. Potom ale narástla ponuka
žurnálovacích súborových
systémov. Preto dnes môžeme bežne stretnúť ext3
(nástupcu
ext2) či reiserfs
.
Ext2 je jeden z najrozšírenejších súborových systémov používaných pod Linux-om. Je to klasický unix-ový súborový systém, podporujúci uchovávanie prístupových práv vlastníka, skupiny a ostatných, podporuje symbolické linky i hard linky, špeciálne súbory atď.
Vlastnosti súborového systému ext2 možno upravovať pomocou programu
tunefs
. Medzi vlastnosti patrí napríklad percento
kapacity, ktoré je rezervované pre užívateľa root
. Default
hodnota je 5%. Ďalšou vlastnosťou je príznak, ktorý označuje či
je daný súborový systém čistý
- teda či je konzistentný.
Tento príznak sa nastaví na nie
pri pripojení systému na zápis
a na áno
pri odpojení. Ak dôjde k pádu operačného systému,
tento príznak zostane nastavený na nie
a podľa neho
fsck
vie či má vykonať úplnú kontrolu alebo nie. (Prepínač
-f
programu fsck vynúti vykonanie kontroli aj keď súborový
systém vyzerá čistý.) Poslednou vlastnosťou, ktorú spomeniem, je počet
pripojení, po dosiahnutí ktorého, bude súborový systém označený ako
not clean
aj keď, k žiadnemu problému neprišlo. Ak sa
chcete dozvedieť o ďalších zaujímavostiach ext2, pozrite sa na
program dumpe2fs
.
Tento súborový systém je zaujímavý tým, že je založený na FAT
Odlišuje sa tým, že dopĺňa do neho vlastnosti typických Unix-ových súborových
systémov ako je udržiavanie informácií o vlastníkovi, skupine, prístupových
právach a podobne. Tieto informácie sú uložené v súbore --linux-.---
,
ktorý existuje v každom adresári takéhoto súborového systému.
Keď súborový systém UMSDOS pripojíte ako FAT tak tam tento súbor vidíte.
Keď ho pripojíte ako UMSDOS tak systém tento súbor skryje, ale zapisuje do
neho zmeny vo vlastníctve, prístupových právach a iné atribúty. V prípade,
že sa niečo zmení v čase keď tento súborový systém nie je pripojený ako UMSDOS
možno údaje v súbore --linux-.---
obnoviť programom umssync
Tento súborový
systém teda umožňuje použiť existujúci súborový systém FAT ako vlastný Unix-ový
súborový systém. To sa často používa pre vyskúšanie Unix-ového systému bez potreby
zriaďovať pre neho samostatný súborový systém. Jeho nevýhodou však je nižšia
rýchlosť.
Súborový systém ISO9660 je systém, ktorý sa typicky používa na dátových CD-čkach. Hudobné CD-čka majú inú štruktúru a nie je nutné (ani možné) ich pripájať ako súborový systém. Existujú tiež tzv. hybridné CD-čka obsahujúce oblasť v formáte ISO9660 ako aj oblasť hudobnú.
So súborovým systémom sa teda stretneme najskôr keď potrebujeme pristupovať na CD. Základný ISO9660 má obmedzenia na mená súborov hĺbku adresárovej štruktúry a podobne. Tieto obmedzenia obchádza rozšírenie Jolliet. Ďalším rozšírením je El Torito, ktoré umožňuje bootovanie s CD-čka a ďalším je Rock Ridge, ktoré umožňuje ukladanie špeciálnych vlastností ako sú symbolické linky a podobne. V Linux-e je potrebné mať toto rozšírenie zapnuté vo vlastnostiach ovládača pre ISO9660.
Pri napaľovaní CD-čiek sa zvyčajne postupuje tak, že sa vytvorí obraz
budúceho CD-čka ako súbor pomocou programu mkisofs
a ten
sa potom napáli pomocou programu cdrecord
. Samozrejme
existuje niekoľko programov, ktoré ponúkajú peknú a šikovnú grafickú
nadstavbu nad cdrecord-om.
Ak máte v jadre podporu pre tzv. loopback súborový systém, môžete ako súborový systém pripojiť obraz iného súborového systému zapísaného do súboru. To možno použiť napríklad pre kontrolu obrazu ISO9660 predtým než ho napálite na CD-čko.
# mkisofs -quiet -o test.iso dir/ # losetup /dev/loop0 /tmp/test.iso # mount /dev/loop0 /mnt/tmp
Program losetup
povie systému, že požiadavky systému na zariadenie
/dev/loop1
sa presmerúvajú na /tmp/test.iso
. Toto
presmerovanie by ste mali po skončení používania zrušiť.
# losetup /dev/loop0 /dev/loop0: [0303]:1006721 (/tmp/test.iso) # umount /dev/loop0 # losetup -d /dev/loop0
Existuje tiež varianta loopback súborového systému, ktorá šifruje dáta, ktoré sa do neho zapisujú a prečítať ich možno len po zadaní správneho hesla pri pripájaní - Cryptoloop. Vytvoriť takýto šifrovaný súborový systém môžete takto:
# dd if=/dev/random of=/file bs=1k count=100 # losetup -e losetup -e aes-256 /dev/loop0 /tmp/file Password: # mkfs /dev/loop0 # losetup -d /dev/loop0
Potom ho už možno používať:
# losetup -e aes-256 /dev/loop0 /tmp/file Password: # mount -oencryptionn=aes-256/dev/loop0 /mnt/tmp Password: ... # umount /dev/loop0 # losetup -d /dev/loop0
Doteraz sme spomínali súborové systémy, ktoré sú fyzicky umiestnené priamo v našom počítači - disk, CD, súbor. Okrem toho, ale existuje aj možnosť pripájania súborových systémov po sieti. Hovorí sa tomu NFS - Network File System. Pri jeho použití treba vedieť, že existuje viacero verzií NFS, že reakcie na prácu so súbormi na NFS závisia na priepustnosti siete a tiež, že prenos dát nie je nijak zvlášť zabezpečený pred útočníkmi.
Pre úspešné používanie musíte mať na klientovi naštartovaný
rpc.portmap
a rpc.mountd
a na serveri
rpc.nfsd
. Server musí tiež
špecifikovať v súbore /etc/exports
, ktoré adresáre ponúka.
# cat /etc/exports /home clnt.domain.org
Tento server ponúka teda adresár /home
stroju clnt
.
# showmount -e srvr Export list for srv: /home clnt.domain.org
Teraz môžete pripojiť systém z druhého stroja:
# mount srvr:/home /home
Ak v sieti máte počítače s MS Windows, pravdepodobne poznáte
možnosť pripájania a zdieľania adresárov. Unix-ové systémy tiež
podporujú túto funkcionalitu. Implementovaná je v balíku Samba.
Pripájanie zdieľaných adresárov je možné v prípade, že máte
v jadre podporu pre smbfs
(a máte nainštalovanú sambu)
pomocou programov smbmount (alebo špecifikovaním typu smbfs
za -t
po mount).
# smbmount -ousername=rastos \\\\srvr\\share /mnt/tmp Password:
Moderné počítačové systémy majú pomerne veľké nároky na pamäť. Pretože diskový priestor je lacnejší než RAM pamäť a využitie všetkej RAM sa nestáva často, operačný systém môže odložiť časť obsahu pamäte, ktorá sa momentálne nepoužíva, na disk. MS Windows odkladá do súboru. Linux ponúka na výber súbor alebo vyhradenú partíciu. Tradične sa používa partícia, pretože je rýchlejšia.
Swap vlastne nie je súborový systém v pravom slova zmysle, pretože
neumožňuje ukladanie súborov. Vytvoríme ho programom mkswap
:
# mkswap /dev/hda5 Setting up swapspace version 1, size = 201240 kB
Používanie je riadené dvojicou programov swapon
a
swapoff
:
# swapon /dev/hda5 ... # swapoff /dev/hda5
Aby sa swap použil automaticky pri naštartovaní systému môžete mu
vytvoriť položku v /etc/fstab
/dev/hda5 none swap defaults 0 0
Poslednú otázku, ktorú treba pri používaní swap-u vyriešiť je rozhodnutie o jeho veľkosti. V starších dokumentoch sa dočítate odporúčanie, že by mal byť dva-krát taký veľký ako RAM pamäť. V skutočnosti je to trocha inak. Jediným správnym spôsobom je odhadnúť, koľko virtuálnej pamäte bude systém potrebovať pri svojej činnosti. Ak máte pracovnú stanicu, kde beží tabuľkový procesor či kompilácia menšieho projektu a má 512MB pamäte, je zbytočné nastavovať 1GB swap. Naopak ak pobežíte veľkú databázu nároky na pamäť môžu byť dosť veľké. Takže odporúčam vysledovať koľko pamäte používajú aplikácie, ktoré bežne používate a k tomu niečo pridať. Zvážte, že browser bežiaci mesiac v kuse môže potrebovať postupne viac ako si zoberie krátko po naštartovaní. Zvážte, že za rok prejdete na novšiu verziu aplikácií či správcu okien a podobne a tomu prispôsobte svoj výpočet veľkosti swap-u.
# cat /proc/filesystems nodev sysfs nodev rootfs nodev bdev nodev proc nodev sockfs nodev usbfs nodev usbdevfs nodev futexfs nodev tmpfs nodev pipefs nodev eventpollfs nodev devpts ext3 nodev ramfs msdos vfat iso9660 nodev nfs nodev nfsd nodev cifs ntfs reiserfs udf nodev rpc_pipefs
Ak nie, budete musieť túto podporu pridať - buď nahraním príslušného modulu, alebo zakompilovaním príslušného driveru do jadra.
mount(8) - za normálnych okolností môže súborové systémy pripájať
len užívateľ root. Ak súbor /etc/fstab
obsahuje pre daný
súborový systém voľbu user
, môže ho pripojiť ktokoľvek,
ale len ten, kto ho pripojil, ho môže odpojiť. Ak chcete aby ktokoľvek
mohol odpojiť nejaký súborový systém, dajte mu voľbu users
.
Voľba ro
. Používaná napr. pre CD-čka.
showmount -e server
Linux (a mnohé iné Unix-ové systémy) ponúkajú program, ktorý sa volá
file
. Tento program používa informácie uložené v
/etc/magic
aby uhádol čo sa nachádza v nejakom súbore.
file - < /dev/hda6 standard input: Linux rev 1.0 ext3 filesystem data
Všimnite si použitie parametra -
a presmerovanie. Bez nich
by program povedal:
file /dev/hda6 /dev/hda6: block special (3/6)
Program eject
dá príkaz zariadeniu pre vyhodenie média. Ak na
príkazovom riadku nezadáte inak, použije sa zariadenie /dev/cdrom
.
Ak je súborový systém na médiu pripojený, eject sa ho pokúsi najprv odpojiť.
Ak mám pripojenú Iomega ZIP disketu (/dev/sda) môžem ju vysunúť príkazom
# eject /dev/sda
(ZIP disketa sa tvári ako disk. Má partície a zvyčajne obsahuje jeden súborový
systém na /dev/sda4, ale príkazu eject musíte dať parameter zodpovedajúci celému
zariadeniu, nie partície)
Ak to dané zariadenie podporuje, tak prepínačom -t
môžete
zariadeniu
povedať aby si zobralo médium.
# eject -t /dev/cdrom
(robené na jadre 2.6.4)
cat /proc/swaps Filename Type Size Used Priority /dev/hda5 partition 196520 0 -2