Filerendszerek

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(v1.5)
a (typo)
1. sor: 1. sor:
== Filerendszerek Unix alatt ==
+
== 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:
 
Unix alatt a Windows-környezetben megszokott elemeken (elsősorban könyvtár, file) kívül előfordulhat néhány további:

A lap 2006. október 3., 09:47-kori változata

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/...

Kapcsolódó eszközök:

  • tune2fs
  • e2fsck
  • resize2fs
  • ext2online
  • ext2resize
  • e2fsadm
  • e2defrag
  • e2undel
  • mke2fs
  • 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

2.2 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:

# 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.3 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
  • rossz angolsággal írt dokumentáció

Eszközök:

  • debugreiserfs
    • Általános diagnosztikai eszköz, mindenfélének a kiolvasására
  • reiserfsck
  • reiserfstune
    • journal-hangolás (méret, tranzakcióméret)
    • journal kihelyezése külső eszközre
  • resize_reiserfs
    • offline zsugorítás/növelés
    • online növelés
  • mkreiserfs
  • reiserfsprogs csomag

Fontosabb mount opciók:

  • notail: tail packing kikapcsolása (pl. a LILO kedvéért)
  • resize=blokkszám: remountoláskor használható a filerendszer növelésére

2.4 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, de kell hozzá legalább minimális szabad hely)
  • POSIX ACL
  • dinamikusan allokálja az inode-okat (legfeljebb a teljes hely megadható hányadáig)
  • fejlett kvótarendszer
    • kvóta állítható:
      • userenként
      • csoportonként
      • "projektenként" (könyvtárfánként)
    • állítható soft/hard:
      • helyfoglalás
      • inode-szám
      • helyfoglalás a realtime sectionben (még nincs implementálva)

Három része lehet:

  1. data section
    • Meta-adatok
    • Felhasználói adatok (file-ok, könyvtárak tartalma)
  2. log section
    • Ez a journal
    • Alapértelmezés szerint a data section része
    • De lehet külső eszközön is
  3. realtime section
    • A realtime file-ok tárolására

Hátrányok:

  • a bootszektort is használja, nem rakhatunk oda bootloadert
  • undelete lényegében lehetetlen

Eszközök:

  • xfsprogs csomag:
  • xfs_copy
    • párhuzamosan akár több új eszközre (vagy sparse image file-ba) is lemásolja a filerendszert
    • csak akkor használható, ha a forrás:
      • nincs mountolva, vagy
      • read-only van mountolva, vagy
      • xfs_freeze-zel befagyasztottuk.
    • a másolatok új UUID-t kapnak, hogy ugyanazon a gépen is használhassuk őket (kivéve -d kapcsoló esetén)
    • nem támogatja a realtime sectiont és a külső journalt
    • kis filerendszer nagyobb helyre másolásához jobb az xfsdump/xfsrestore
  • xfs_db
    • interaktív (de scriptelhető) diagnosztikai eszköz
    • több másik xfs_* program is ezt használja a háttérben
    • ~900 sornyi dokumentáció
    • not for the faint of heart
    • kapcsolgathatók fele opcionális featúrák, pl. extattr support
  • xfs_admin
    • label és UUID átállítása
    • néhány opcionális featúra bekapcsolása
      • unwritten extent support (mire jó?)
      • log version 2
  • xfs_check
    • csak ellenőriz, nem javít
  • xfs_ncheck
    • filenév-inodeszám párok listázása, opcionálisan speciális és setuidos file-ok keresése
    • mire jó? Esetleg hardlinkek keresésére (tudunk egy inode-számot, és kell hozzá az összes név). De ezt tudja a find(1) is.
  • xfs_growfs
    • online átméretezés (offline nem is lehet)
    • elvileg tudná növelni és csökkenteni a journalt (de egyelőre nem tudja)
    • az adatterületet csak növelni lehet
    • a realtime sectiont csak növelni lehet
    • átállítható, hogy az összes helynek legfeljebb hány százalékát használja inode-ok tárolására
  • xfs_info
    • mindenféle paramétert kérdez le, pl. allocation group-ok száma, mérete (mountolt fs-re működik)
  • xfs_io
    • diagnosztikai eszköz, mint az xfs_db, de magasabb szintű műveletekkel
  • xfs_bmap
    • melyik blokkokat használja az adott file?
    • mire jó ez?
  • xfs_freeze
    • felfüggeszti az írhatóságot
    • folyamatban levő tranzakciók befejeződnek
    • író processzek blokkolódnak
    • az immár konzisztens filerendszerről csinálhatunk snapshotot
    • utána xfs_freeze -u "olvasztja ki"
  • xfs_mkfile
    • tetszőleges méretű file-t hoz létre, opcionálisan sparse
    • miért jobb, mint a dd(1)?
  • xfs_logprint
    • megnézhetjük vele a journal tartalmát - csak xfs-szakértőknek mond valamit
  • xfs_quota
    • kvóta-adminisztráció
  • xfs_rtcp
    • file-okat másolhatunk vele a realime-adatterületre
  • fsck.xfs
    • nem csinál semmit, az fsck mountoláskor automatikus, ha piszkos a journal
  • mkfs.xfs
    • ez hozza létre az xfs-t
    • ajánlott opció: -l version=2
    • érdekes lehetőség: egy szövegfile-ban megadhatunk egyfajta template-et, ami alapján már adatok is kerülnek az új filerendszerbe (image létrehozásakor lehet hasznos)
  • xfs_repair
    • offline javítóprogram
  • xfsdump csomag:
  • xfs_estimate: várhatóan mennyi helyet foglalna egy könyvtár, ha xfs-re másolnánk?
  • xfs_fsr: online defragmentáló
  • xfsdump: backup-eszköz
    • teljes vagy (többszintű) inkrementális
    • elvileg egyszerre több médiumra is tud írni, mindegyikre az fs egy-egy részét (így gyorsabb), de ez Linuxon még nincs meg
    • DMAPI-támogatás
    • megszakítható, majd folytatható
    • a kvótákat is menti
  • xfsrestore: helyreállítás

Mount opciók:

  • logbufs=x: tuning-opció. Nagyobb érték -> több memória, de valamivel gyorsabb működés. Max. 8. (A hatást kimérhetné valaki...)
  • logdev=/dev/foo: külső journal
  • norecovery: csak a ro opcióval együtt használható. Nem játssza le a naplót mountkor, így még hozzáférünk a crash előtti állapothoz.
  • nouuid: nem sír, ha ilyen uuid-del rendelkező filerendszer már mountolva van. Snapshot mountolásakor kell megadni.
  • quota/usrquota: kvótakezelés bekapcsolása
  • uqnoenforce: nem akadályozza meg a kvótatúllépést, csak számolja a helyhasználatot
  • grpquota/gqnoenforce: mint fent, csak csoportkvótára
  • mi a helyzet a projektkvótával?

2.5 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 (logikai vagy fizikai?)
    • tud külső journalt
  • 64 bites
    • max. fileméret: 512 TiB (512 byte-os blokkméret esetén) - 4 PiB (4 KiB-os blokkméret esetén)
    • max. méret: 32 pebibyte
    • minimális méret: 16 MiB
  • unicode kódolású
  • dinamikusan allokálja az inode-okat
  • a legfeljebb 8 bejegyzést tartalmazó könyvtárak tartalmát is a könyvtár inode-jában tárolja (ez gyors)
  • portolták rá az xfs DMAPI-ját
  • tud(ni fog) olyasmit, mint a Sun ZFS: egy block device-on (a JFS aggregate-nek hívja) több mountolható filerendszer (a JFS-ben fileset), amik közösen gazdálkodnak a szabad hellyel
  • szintén támogatja a snapshot-készítést (mint az XFS)
  • White paper, bár nem túl részletes

Eszközök:

  • jfs_fsck
    • a működéséről naplót készít, amit beleír a filerendszerbe
  • jfs_fscklog
    • kiolvassa a filerendszerbe írt naplót
  • jfs_logdump
    • file-ba írja a journal tartalmát - csak JFS-szakértőknek hasznos
  • jfs_mkfs
    • érdekesség: -O opcióval case insensitive filerendszert csinál
  • jfs_tune
  • jfs_debugfs
    • a szokásos
  • jfsutils csomag

Mount opciók:

  • iocharset=utf8: hogyan képezzük le a Unicode fileneveket (itt utf8, de megadhatunk mást is)
  • resize: remountoláskor megnöveli a filerendszert (zsugorítani nem lehet)
  • nointegrity: naplózás kikapcsolása; backup visszaállításakor lehet érdemes használni (gyorsabb)

3 Attribútumok

Néhány filerendszerben mindenféle attribútumai lehetnek a file-oknak; ennek semmi köze a bővített attribútumokhoz. Nem minden fs ismeri az alábbiak közül az összeset. (Mit tud ebből a reiserfs és a jfs? A jfs látszólag semmit.)

  • lsattr
  • chattr
  • xfs_io
  • A: atime ne módosuljon (ext2, ext3, xfs)
  • a: csak hozzáfűzni lehet (ext2, ext3, xfs)
  • c: röptömörített (ext2, ext3 - de csak patchel)
  • D: könyvtáron: mintha dirsync opcióval mountoltuk volna az fs-t (ext2, ext3)
  • d: ne backupolódjon (nyilván programfüggő, hogy nézi-e) (ext2, ext3, xfs)
  • f: no-defrag: a file-t nem szabad defragmentálni. Könyvtár esetén a file-ok öröklik. (xfs)
  • i: immutable. Nem módosítható, nem törölhető, nem hardlinkelhető file. (ext2, ext3, xfs)
  • j: a file úgy viselkedik, mintha data=journal opcióval mountoltuk volna az fs-t. Logfile-okra jó lehet. (ext3)
  • n: a könyvtárban nem lehet symlinket létrehozni (mindenki által írható könyvtárakban bizonyos támadások elkerülésére jó) (xfs)
  • P: project inheritance. A könyvtárban létrehozott új file-ok öröklik a project ID-t a könyvtártól (xfs, kvóta)
  • s: törléskor nullázódik a tartalma (ext2, ext3)
  • S: szinkron írandó file (ext2, ext3, xfs)
  • 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). (ext2, ext3)
  • t: realtime inheritance. A könyvtárban létrehozott új file-ok automatikusan a realtime sectionbe kerülnek (xfs)
  • t: mintha notail opcióval mountoltuk volna (noha az ext2/3-ban egyelőre nincs tail packing/merging) (ext2, ext3)
  • u: törléskor a file nem törlődik valóban, hanem helyreállítható - szerintem nincs implementálva (ext2, ext3)
  • az ext2/3-nak és az xfs-nek is van még pár, részben belső használatra szánt

4 Trükkök a mount körül

  • mount --bind
  • mount --rbind
  • mount --move
  • pivot_root
mount /dev/hda1 /new-root
cd /new-root
pivot_root . old-root
exec chroot . sh <dev/console >dev/console 2>&1
umount /old-root

5 Ajánlott irodalom

Személyes eszközök