Filerendszerek
Tartalomjegyzék |
1 Filerendszerek Unix alatt
Unix alatt a Windows-környezetben megszokott elemeken (elsősorban könyvtár, file) kívül előfordulhat néhány további:
- block special device (háttértár file-szerű absztrakciója)
- character special device (egyéb driver, pl. hangkártya, terminál, sorosport fiel-szerű absztrakciója)
- UNIX domain socket
- olyan, mint egy hálózati kapcsolat végpontja, de csak az adott gépen belül érvényes
- lehet rajta szervert üzemeltetni
- kliens kapcsolódhat rá
- FIFO (named pipe)
- olyan csővezeték, mint ami a "|" hatására jön létre
- de nem szükséges, hogy az író és olvasó folyamatoknak közös szülője legyen
- ha valaki megnyitja olvasásra, és olvasni próbál, blokkolódik, amíg valaki más nem ír bele
- több egyidejű írás nemdeterminisztikus sorrendben hajtódik végre
- több egyidejű olvasás szintén (ha ketten is várnak olvasható adatra, elvileg bármelyik megkaphatja a következőt, amit beleírnak)
- symlink (egy név átirányít egy másikra)
- hardlink
- egy file-hoz több név
- van referenciaszámláló, a hely csak akkor szabadul fel, ha a file utolsó nevét is töröltük és így a számláló 0 lett
- sparse file
- "lukas" file
- lehetnek benne olyan részek, amik számára nincs hely allokálva a filerendszerben
- ha onnan olvasunk, 0-t kapunk
- ha oda írunk, allokálódik a hely
- disk image-nek kiváló
- fork
- több adatterület egy file-hoz
- NTFS-en is van
- az extended attribútum is ilyesmi
- négy namespace: user, trusted, security, system
Ezen túlmenően fontos különbség, hogy a filerendszer case sensitive (de ez senkinek nem szabad, hogy újdonság legyen), hogy egy-gyökerű (szintúgy), és hogy backslash ("\") karakter helyett / választja el egymástól az alkönyvtár-hierarchia szintjeit.
2 A Linux filerendszerei
A Linux kernel számos filerendszert támogat; ezek között van "natív" linuxos (pl. az ext2, az ext3 és a reiserfs), és pár máshonnan importált filerendszer (pl. minix, vfat, ntfs, jfs, xfs) is.
Fontos tulajdonságok:
- naplózás
- fizikai <-> logikai
- metadata <-> teljes
- beépített <-> külső
- átméretezhetőség
- online <-> offline
- csak növelhető <-> zsugorítható is
Altalános mount opciók:
- defaults: rw, suid, dev, exec, auto, nouser, async
- async: aszinkron I/O
- auto: a mount -a mountolja (fstab alapján)
- dev: érvényesek a device típusú file-ok
- exec: a végrehajthatónak jelölt file-ok végrehajthatók
- nouser: user nem mountolhatja/umountolhatja
- rw: írható-olvasható
- suid: érvényesek a setuid és setgid bitek
- group: a device-t tulajdonló csoport tagjai mountolhatják, implikálja a nodev, nosuid opciókat
- owner: mint a group, de a device-t tulajdonló felhasználó mountolhatja
- noatime: nem frissíti az access dátumot (pl. mail spoolra vagy squid cache_dirre jó)
- noauto: nem mountolódik a mount -a hatására (pl. bootkor)
- nodev: nem érvényesek rajta a device típusú file-ok (a biztonság kedvéért)
- noexec: nehezebb programot futtatni róla (shellscriptet könnyű, binárist már nem)
- nosuid: nem érvényesek a binárisok setuid- és setgid-bitjei (suidperl esetén perlscripteken esetleg igen)
- remount: újramountolás más opciókkal
- ro: csak olvasható
- sync: szinkron I/O (elvileg mindent kiír a diszkre, mielőtt visszatér az író rendszerhívás)
- dirsync: a könyvtárakra vonatkozó írási műveletek szinkronak, a többi nem
- user: a filerendszert bárki mountolhatja, de csak az umountolhatja, aki mountolta (bekerül az uidje a /etc/mtabba)
- users: a filerendszert bárki mountolhatja és umountolhatja
2.1 ext2
- 1993 óta ez a szabványos linuxos fs, bár mostanra nagyrészt kiszorította az ext3
- max. 4 tebibyte
- fileméret max. 2 tebibyte (más forrás szerint 1 tebibyte)
- filenév max. 255 karakter
- filenévben nem lehet NULL és /
- elfogadható sebesség
- mára tud POSIX ACLeket és extended attribute-okat
- van hozzá transzparens tömörítést biztosító patch (de kit érdekel?)
- nemigen használja senki, csak esetleg nagyon kicsi filerendszeren (pl. /boot)
- offline növelhető (ez biztos, de mintha lenne online növeléshez patch)
- offline zsugorítható (patch-csel esetleg online is?)
Létrehozása:
# mke2fs /dev/... <pre> Kapcsolódó eszközök: * <tt>tune2fs</tt> * <tt>e2fsck</tt> * <tt>resize2fs</tt> * <tt>ext2online</tt> * <tt>ext2resize</tt> * <tt>e2defrag</tt> * <tt>e2undel</tt> * e2fsprogs csomag Debianon mount opciók: * acl: legyen POSIX ACL support * check: mountoláskor legyen fsck * errors= - mi történjen konzisztenciahiba észlelése esetén? ** errors=continue: folytatás ** errors=remount-ro: újramountolás csak olvasható módban és folytatás ** errors=panic: kernel panic kiváltása (alapértelmezés szerint ilyenkor megáll a kernel, de beállítható, hogy rebootoljon) * sb=x: az 1. blokkban levő szuperblokk helyett használjuk az x. blokkban levő másolatát. 2-hatványokkal érdemes próbálkozni. * user_xattr: támogassa a felhasználók által beállított extended attribútumokat === ext3 === * Az ext2 bővítése ** journalinggal (fizikai, nem olyan jó) ** sok file-t tartalmazó könyvtár esetén gyorsabb ** online növelhető * A 2.4.15-ös kernelben jelent meg hivatalosan (jó régen) * Mountolható ext2-ként, ha üres a journal * Az ext2 helyben upgrade-elhető ext3-ra * Az ext3-ból helyben csinálható ext2 * Egész jó teljesítmény * Jó helyreállíthatóság * Nagyon széles körben elterjedt * Más oprendszerek is támogatják (Windows driver is van), bár általában csak ext2-ként * POSIX ACL, extattr Létrehozása: <pre> # mke2fs -j /dev/...
Kapcsolódó eszközök: mint az ext2-nél, de undelete nincs.
mount opciók:
- data= - journaling módja
- data=journal: az adatműveleteket is naplózza. Lassú, de biztos.
- data=writeback: a meta-adat-műveleteket naplózza, a többit nem. Crash esetén logfile-ok végén szemét várható.
- data=ordered: alapértelmezés. Mint a writeback, de a meta-adatok változásainak naplózása előtt az adott file-lal kapcsolatos többi puffert üríti. Crash esetén logfile-ok vége hiányozhat.
2.2 ReiserFS
- 2.4.1 óta a kernelben
- első naplózó filerendszer a Linuxban (csak metadata; logikai vagy fizikai?)
- készül a Reiser4, ezért a ReiserFS-t hívják Reiser3-nak is
- online növelhető
- offline zsugorítható
- tail packing: belső töredezettséget csökkenti, de lassú
- kis file-okra nagyon gyors
- max. méret: 16 tebibyte
- max. fileméret: 8 tebibyte
- POSIX ACL, extattr
- inode-ok lefoglalása dinamikus ("akárhány" file lehet rajta, valójában csak mintegy négymilliárd)
- delayed allocation
- íráskor csak lefoglalja a helyet, de nem dönti el azonnal, melyik blokkokba fog kerülni a file
- a blokkok hozzárendelése csak a puffer ürítésekor történik meg
- így nagyobb valószínűséggel kerül összefüggő helyre a file, kisebb a töredezettség
Gyermekbetegségek (részben megoldva):
- versenyhelyzetek
- "tree rebuild" fsck során átverhető reiserfs-image-re emlékeztető file-lal
- instabilitás
Eszközök:
Mount opciók:
2.3 XFS
- SGI fejlesztés
- Az első unixos naplózó filerendszer (1994, IRIX 5.3)
- Linuxban a 2.4.25 óta (2000 körül)
- FreeBSD 2005 vége óta olvassa, a 7.0 már írja is
- max. méret: 9 exbibyte (32 biten 16 tebibyte)
- max. fileméret: 9 exbibyte (32 biten 16 tebibyte)
- metadata journal (logikai, hatékony)
- a journal-alapú helyreállítás mountkor automatikus és nagyon gyors
- crash után a nemrég írt file-okban vagy a végükön nullák lehetnek (főleg naplófile-okban)
- több allocation groupból áll
- magától felosztja magát ilyenekre
- file átlóghat egyikből a másikba
- minden AG maga gazdálkodik a saját szabad helyével és inode-jaival
- több AG párhuzamos elérése gyors, főleg ha különböző diszkeken vannak (RAID miatt)
- támogatja a csíkozást (tudja úgy szervezni magát, hogy előnyösen kihasználja az alatta levő RAID0-át)
- változó méretű blokkokban allokálja a helyet (extents)
- az alap-blokkok mérete 512 byte-tól 64K-ig terjedhet, létrehozáskor kell beállítani
- delayed allocation
- hátrány: sok írás időnként "túlfoglalja" az fs-t; azt mondja, nincs hely, pedig van; sync után tényleg van
- reisernél is jelentkezik ez?
- forkok ("villák" :)
- minden file-típusnak lehet (symlinknek is)
- valójában inkább bővített attribútumok
- direct I/O
- megkerüli az OS cache-t, közvetlenül userspace-be olvas DMA-val
- realtime I/O (garantált sávszélesség)
- DMAPI (házi feladat)
- elvileg arra jó, hogy a diszk cache-eljen egy sokkal nagyobb, mondjuk szalagos tárat, transzparensen
- snapshot support: ha LVM snapshotot csinálunk, arra az időre konzisztenssé teszi magát (Linux alatt)
- online defragmentálható (de nem nagyon kell)
- online növelhető (rendkívül gyorsan)
- online backupolható xfsdumppal
- POSIX ACL
Hátrányok:
- a bootszektort is használja, nem rakhatunk oda bootloadert
- undelete lényegében lehetetlen
Eszközök:
Mount opciók:
2.4 JFS
- IBM fejlesztés
- Igazából ez már a JFS2, az OS/2 Warpban jelent meg (1999-ben)
- Linuxban 2001 óta
- kiegyensúlyozott, jó teljesítmény
- jó stabilitás
- journaling
- max. fileméret: 4 pebibyte
- max. méret: 32 pebibyte
- unicode kódolású
Eszközök:
Mount opciók:
3 Attribútumok
Az ext2-es és ext3-as filerendszerben mindenféle attribútumai lehetnek a file-oknak; ennek semmi köze a bővített attribútumokhoz.
- lsattr
- chattr
- A: atime ne módosuljon
- a: csak hozzáfűzni lehet
- c: röptömörített
- D: könyvtáron: mintha dirsync opcióval mountoltuk volna az fs-t
- d: ne backupolódjon (nyilván programfüggő, hogy nézi-e)
- E: tömörítési hibát tartalmaz
- I: hashed tree-t használ a könyvtár
- i: immutable. Nem módosítható, nem törölhető, nem hardlinkelhető file.
- j: a file úgy viselkedik, mintha data=journal opcióval mountoltuk volna az fs-t. Logfile-okra jó lehet.
- s: törléskor nullázódik a tartalma
- S: szinkron írandó file
- T: rejtélyes funkciójú ext2/ext3 tuning-attribútum (A directory with the 'T' attribute will be deemed to be the top of directory hierarchies for the purposes of the Orlov block allocator).
- t: mintha notail opcióval mountoltuk volna (noha az ext2/3-ban egyelőre nincs tail packing/merging)
- u: törléskor a file nem törlődik valóban, hanem helyreállítható - szerintem nincs implementálva
- X: röptömörítős patch használja
- Z: szintén
4 Trükkök a mount körül
- mount --bind
- mount --rbind
- mount --move
- pivot_root