Filerendszerek

A Unix/Linux szerverek üzemeltetése wikiből
A lap korábbi változatát látod, amilyen KornAndras (vitalap | szerkesztései) 2006. szeptember 29., 01:32-kor történt szerkesztése után volt.

(eltér) ←Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

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

5 Ajánlott irodalom

Személyes eszközök