Failid ja failisüsteemid

(vikipeedia ja interneti materialide põhjal)

Failisüsteem

Failisüsteem on andmestruktuuride, algoritmide ja tarkvara kogum, mille eesmärk on salvestusseadme peale andmete organiseeritud paigutamine, et need hiljem leitavad ja kättesaadavad oleksid. Failisüsteem määrab failide paiknemise ja struktuuri füüsilisel kettal, seab piirangud failinimedele ja nende suurustele. Failisüsteem võimaldab faile salvestada, kustutada, nimetada, organiseerida, pakkida ning määrata failidele ligipääsuõigusi.

Unix süsteemides kasutatavad failisüsteemide tüübid

Ext failisüsteemid

Ext (extended filesystem) failisüsteeme kasutatakse traditsiooniliselt Linuxis. Praegu on kasutuses versioonid ext2, ext3 ja ext4. Ext2, nendest kõige vanema ja lihtsama suurim puudus on journaling toe puudumine, mis vähendab failisüsteemi usaldusväärsust. Ext2 edasiarendus on ext3, mis on täielikult tagasiühilduv ext2-ga. See lisab journaling toe ning võimaluse failisüsteemi suurust käigu pealt muuta. Ext4 on võrdlemisi hiljutine (linux 2.6.28) täiendus ext3-le. Ext4 vähendab suuremate failide puhul fragmentatsiooni ja parandab lugemiskiirust, lisab journal'le kontrollsummad ning võimaldab kiiremat failisüsteemi kontrollimist.

Kõik ext failisüsteemid ühilduvad POSIX standardi failide ligipääsuõiguste süsteemiga. Windows ja OS X oskavad lugeda ja kirjutada ext2 ja ext3 failisüsteeme lisatarkvara abil (Windowsi puhul näiteks ext2 ifs, Mac OS X puhul fuse-ext2).

HFS+

HFS Plus on Apple poolt arendatud failisüsteem, mis on peamiselt kasutuses Mac OS operatsioonisüsteemiga. Alates Mac OS X versioonist 10.2.2 on toetatud ka failisüsteemi journaling. HFS+ lubab failinimesi pikkusega kuni 255 tähemärki ning salvestab nimesi UTF-16 kodeeringus. Toetatud on ka UNIX-stiilis failide ligipääsuõigused ning ACL ligipääsuõigused. HFS+ oskavad lugeda nii Mac OS, Linux kui ka Windows (MacDrive või Bootcamp driveritega).

UFS (Berkly Fast)

Kasutatakse BSD süsteemides . Linuxes on readonly.

ISO9660

Kasutatakse CD ja DVD seadmete lugemiseks. Nimetus erinevates Unix systeemides on erinev. Linuxe - iso9660, FreeBSD - cd9660, Solaris - hfsf

FAT (MSDOS)

Kasutatakse USB Flash diskidel.

Vaata rohkem infot Unix süsteemides kasutavate failisüsteemide kohta:

Advanced Disc Filing System · AdvFS · Be File System (BFS) · Btrfs · CrossDOS · Disc Filing System (DFS) · Episode · EFS · exFAT · ext (ext2 · ext3 · ext3cow · ext4· FAT (FAT12, FAT16, FAT16B, FAT32· Files-11 · Global File System (GFS) · Hierarchical File System (HFS) · HFS Plus · High Performance File System · IBM General Parallel File System · JFS · Macintosh File System · MINIX · NetWare File System · NILFS · Novell Storage Services · NTFS · QFS · QNX4FS · ReiserFS (Reiser4· SpadFS · UBIFS · Unix File System · Veritas File System (VxFS) · VFAT · Write Anywhere File Layout (WAFL) · XFS · Xsan · ZFS · more...

Failisüsteemide tööpõhimõted

Failisüsteemi üks tähtsamaid ülesandeid on organiseerida loogilisi faile füüsilisel salvestusseadmel (enamasti kõvaketas). Kõvakettal olev ruum on jaotatud sektoriteks (sector), traditsiooniliselt on sektori suuruseks 512 baiti. Kuna enamasti ei ole failisüsteemil nii väikeste andmeüksustega praktiline töötada, grupeerib failisüsteem sektoreid klastriteks (cluster). Klaster on mingi täisarvuline hulk kõvakettal järjestikuliselt asuvaid sektoreid, 512 baidise sektori puhul on levinumad klastri suurused baitides 2048 (4x512), 4096 (8x512), 8192 (16x512), 16384 (32x512) ja 32768 (64x512). Suurema klastri kasutamisel väheneb suuremate failide puhul fragmentatsioon, kuid väiksemate failide puhul suureneb raisatud ruum (slack) – kui fail on väiksem, kui klastri suurus, ei täideta klastris vabaks jäänud ruumi uue failiga, vaid see jääbki tühjaks. Kui fail on suurem, kui klastri suurus, jaotub fail mitmesse klastrisse.

Sõltuvalt failisüsteemist kasutab see erinevaid süsteemseid andmestruktuure, nagu tabelid ja puud (täielikult hargnenud graafid), et hoida andmeid failide kohta. Tähtsamad andmed on failinimede nimikiri, kataloogipuu kirjeldus, failide asukohad salvestusseadmel (näiteks FAT failisüsteemi puhul on salvestatud klastri number, millelt see fail algab) ning tabel tühjadest klastritest. Lisaks hoitakse ka nimekirja ketta vigastest sektoritest (bad sector) ja tabelit failide omanike ja juurdepääsuõiguste kohta.

Failde ja katalogide nimed

Unix süsteemides faile eristatakse nende failinimede järgi. Tavaline failinimi koosneb nimest ja vajadusel ka laiendusest (extension), kuid nnäiteks Mac OSi HFS+, peidavad faili tüübi info otse failisüsteemi andmestruktuuridesse ning lihtsalt ei näita tavakasutajale failinime laiendeid. Unix süsteemides failinimed võivad koosneda

Unix failidel ja katalogidel on samasugune nimetamis reegel. Nimedes eristatakse suuri ja väikseid tähti.
Nimi saab olla 256 sümbolit pikk.
Failinimi koos PATH-iga ei saa olla pikem kui 1024 sümbolit.
Nimi võib koosneda praktiliselt kõikidest klaviatuuril leiduvatest sümbolitest, kuid mõned sümbolid ning failid nende sümbolitega võivad tekitada probleeme ja võimalik et sellised failid võivad osutuda juurdepääsmatuks ja kustutamatuks.
Sümbolid mida ei tasu kasutada failinimedes:
| ; , ! @ # $ ( ) < > / \ " ' ` ~ { } [ ] = + & ^ <space> <tab>
Sümbolite eraldajaid mida võib kasutada nimedes et lihtsustada lugemist:
_ - . : (pidage meeles et koolon ":" võib mõningates alamsüsteemides omada eri mõtet)

Metamärgid *, ? (Wild cards) kasutatakse failinimede märgistamisel ja neid ei kasutata failinimedes.
* märgistab 0 või rohkem sümboleid, ja teda võib kasutada suva kohas failinime märgistamisel.
? märgistab ühte (1) sümbolit, ja samamoodi võib kasutada igas failinime kohas.

Nimetamis reeglid. Unix faili nimi ei kajasta ja ei tähista selle faili funktsionaalsust. Failinimi on kasutaja(mitte op.süsteemi) arusaamaks ja kasutamise nmugavuseks.

Metaandmed

Metaandmed (metadata) on failidega kaasas käivad andmed, mis ei sisaldu alati otseselt faili enda sees, aga kirjeldavad antud faili. Metaandmed võivad sisaldada faili suurust, viimase muutmise kuupäeva, faili loomise kuupäeva, faili omanikku, ligipääsuõigusi ja palju muud. Failide kohta käivad metaandmed paiknevad tavaliselt failisüsteemis ning ei ole kasutajale otseselt kättesaadavad.

Hierarhilisus

Enamus tänapäeva failisüsteemidest on hierarhilise failipaigutusega. Unix-laadsetel süsteemidel on juurkataloog “/”, ülejäänud partitsioonid ja kataloogid paigutuvad selle alla. Näide: /usr/bin/python, mis tähistab faili “python”, mis asub kataloogis “bin”, mis asub kataloogis “usr”.

Faili süsteemide piirangud ja võrdlused on toodud järgmisel leheküljel:
Comparison of file systems

Fragmentatsioon

Failisüsteem salvestab parimal juhul faile järjestikuliselt ehk andmed paiknevad salvestusseadmel ühes piirkonnas ning neid on võimalik järjest lugeda. See on tähtis andmete lugemise jõudluse tagamiseks, sest tavalisel kõvakettal kulub lugemispea ümberpaigutamiseks aega. Fragmentatsioon on nähtus, kus andmed ei ole paigutatud järjestikuliselt, vaid mitmes tükis füüsilise salvestusseadme eri piirkondades. See esineb tavaliselt siis, kui on täidetud järgnevad tingimused: 1) partitsioonil on vähe vaba ruumi; 2) partitsioonil on palju faile ning kustutatud faile. Uue faili salvestamisel valitakse vaba piirkond, mis võib olla ka piirkond, mis on vabastatud mõne faili kustutamisega. Kui uus fail on suurem, kui kustutatud fail, ei mahu ta piirkonda ära ning fail tuleb jaotada tükkideks, proovides ülejäänud faili mõnda teise vabasse piirkonda paigutada. Fragmentatsiooniga võitlemiseks tuleb faile füüsilisel salvestusseadmel ümber paigutada – väiksed vabad piirkonnad täidetakse väikeste eelnevalt hõredalt paigutatud failidega ning sellega vabastatakse suuremaid piirkondasi suuremate failide jaoks.

NB! Fragmentatsioon mõjutab tugevalt kõvakettaid seoses lugemispea positsioneerimis ajaga. Flash seadmetel positsioneerimis aeg on minimaalne ehk 0-le lähedane ja nende puhul fragmentatsioon ei mõjuta kirjutamis/lugemis kiirust.

Failipuu

Failipuu hierarhija standard , Filesystem Hierarchy Standard

Erifailisüsteemid

/proc - ei ole tava mõttes faili süsteem, teda kasutatakse Unixi mälu ja tuuma seisu esitlemiseks. OS automaatselt tekitab /proc katalogis iga protsessi jaoks spetsiaalsed failid. Linux lisaks paigutab eri informatsiooni sümbol kujul. Seda infot kasutatakse süsteemi toimimise jooksule tekivate probleemide lahendamisel ja süsteemi optimiseerimsel.

swap - on partatsioon kus asub Unixi virtuaal ehk saale mälu.

Kõvaketta/seadme ja partatsiooni nimi

Linux süsteemides kasutatakse seadme nimedeks
/dev/hd[täht] tähistatakse vanu ATA seadmeid
või /dev/sd[täht] tähistatakse SATA ja SCSI seadameid
Kus täht alates "a"-st tähistab süsteemis leitud seadet.
Partatsioon tähistatakse lisa numbriga alates "1"-st.
/dev/hd[täht][part number] või /dev/sd[täht][part number]
Näiteks /dev/sda2, /dev/hda1

Kõvaketta struktuur

Failisüsteemid võivad paikneda kõvakettastel partatsioonides või alamosana spetsiaalsetes struktuurides nägu LVM (logical volume managment). Vaata ka FreeBSD disk organization. Standartse DOS jaotuse puhul nullindas sektoris asub partatsiooni tabel mis suudab kirjeldada 4 põhipartatsiooni (Primary prtition). Üks partatsioonidest saab viidata teise spetsiaalsele sektorile kus kirjeldatakse lisaks kuni 32 partatsiooni, neid nimetatakse laiendatud partatsioonideks (Extended partitions). Kasutusel ,on ka teised kõvaketta struktuurid nagu GUID Partition Table,
Loe lähemalt ka Kõvaketta jaotus, Linux Partition HOWTO, List of disk partitioning software

Diskide partitsioneerimine programmiga fdisk

Vaadata kõiki süsteemile nähtavaid partatsioone kõvaketastel.

$ fdisk -l

Disk /dev/sda: 7516 MB, 7516192768 bytes
255 heads, 63 sectors/track, 913 cylinders, total 14680064 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004ea67

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 13213695 6605824 83 Linux
/dev/sda2 13215742 14678015 731137 5 Extended
/dev/sda5 13215744 14678015 731136 82 Linux swap / Solaris

Näita kõiki kõvaketta tüüpi seadmeid
$ ls /dev |grep sd
sda
sda1
sda2
sda5

Kõvaketta partatsioonidde haldus

Kõvaketta struktuuri saame luua ja muuta käsureas programmi fdisk abil. Kus me: Partatsiooni tabeli redigeerimine kus teise parameetrina on märgitud kõvaketta seadme süsteemne nimi
Abi saab küsimärgiabil

Käivitame VirtualBox-i linuxes käsu fdisk. vaatame võimalikke käske ja
vaatame kõvaketta sisu mille peal asub süsteem. Ei tee mudatusi !!!
$ fdisk /dev/sda

Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Command (m for help):
p

Disk /dev/sda: 7516 MB, 7516192768 bytes
255 heads, 63 sectors/track, 913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004ea67

Device Boot Start End Blocks Id System
/dev/sda1 * 1 823 6605824 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 823 914 731137 5 Extended
Partition 2 does not end on cylinder boundary.
/dev/sda5 823 914 731136 82 Linux swap / Solaris

Vajadusel saab lisada partatsioone käsuga "n" edasi tuleb valida partatsiooni tüüp ja partatsiooni number.
Kustutada saab käsuga "d" jne.
Väljume sealt Ctrl+C abil salvestamata juhuslike muudatusi.

Faili süsteemi loomine kettal /dev/sdb (seda tuleks luua ülesandes)
$ mkfs.ext3 /dev/sdb1

Failisüsteemi vigade kontroll, NB! ära kunagi kontrolli partatsiooni kus asub juurfailisüsteem laivis
$ fsck.ext3 /dev/sda1
e2fsck 1.41.14 (22-Dec-2010)
/dev/sda1 is mounted.

WARNING!!! The filesystem is mounted. If you continue you ***WILL***
cause ***SEVERE*** filesystem damage.

Do you really want to continue (y/n)? no

check aborted.

Linux failisüsteemide monteerimine ja demonteerimine

NB! Ole ettevaatlik seda tuleb teha juhul kui partatsioonides asuv failisüsteem on selle jaoks loodud
Loome katalogi kuhu me monteerime filisüsteemi
$ mkdir /etc/test
$ mount /dev/sdb1 /mnt/test
Monteerida CDROM readonly õigustega
$ mount -o ro /dev/sr0 /mnt/cdrom
Monteerida CDROM readonly ja kõivitus õigustega määrates failisüsteemi tüübi
$ mount -t iso9660 -o ro,exec
/dev/sr0 /mnt/cdrom
Monteerida kõik failisüsteemid mis on määratud failis /etc/fstab
$ mount -a

Failisüsteemi demonteerimine
$ umount /dev/sdb2
$ umount /home/kasutaja/backup
Kui vastav katalog on hõivatud kellegi või mingisuguse protsessi poolt siis lahti monteerida seda kataloogi ei saa
$ mount /dev/sdb2 /home/kasutaja/data
$ cd /home/kasutaja/data
$ umount /home/kasutaja/data
umount: /dev/sdb2: device is busy

df - "Device free" info

Näita seadmetel/partatsioonidel kasutatavat ja vaba ruumi
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1  6.3G 2.7G 3.3G  46%  /
none       343M 640K 342M  1%   /dev
none       350M 1.1M 349M  1%   /dev/shm
none       350M 100K 349M  1%   /var/run
none       350M 0    350M  0%   /var/lock

du - "Disk usage"

Näita palju ruumi võtavad failid antud katalogis ja alamkatalogides. (võib tulla päris palju infon)
# du /home/kasutaja

Näita ainult suurust palju ruumi võtavad kõik failid katalogis ja alamkatalogides
# du -sh /home/kasutaja
65M /home/kasutaja

Näita esimese alamkatalogide kihi katalogide suurused
# du -sh /home/kasutaja/*

4.0K /home/kasutaja/Desktop
16K /home/kasutaja/devel
4.0K /home/kasutaja/df.txt
4.0K /home/kasutaja/Documents
4.0K /home/kasutaja/Downloads
4.0K /home/kasutaja/examples.desktop
4.0K /home/kasutaja/Music
4.0K /home/kasutaja/mylog
4.0K /home/kasutaja/Pictures
4.0K /home/kasutaja/Public
4.0K /home/kasutaja/Templates
4.0K /home/kasutaja/Videos