Filerendszerek

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
a (ext2: typo)
(v1.5)
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:
99. sor: 99. sor:
 
* <tt>ext2online</tt>
 
* <tt>ext2online</tt>
 
* <tt>ext2resize</tt>
 
* <tt>ext2resize</tt>
  +
* <tt>e2fsadm</tt>
 
* <tt>e2defrag</tt>
 
* <tt>e2defrag</tt>
 
* <tt>e2undel</tt>
 
* <tt>e2undel</tt>
  +
* <tt>mke2fs</tt>
 
* e2fsprogs csomag Debianon
 
* e2fsprogs csomag Debianon
   
113. sor: 115. sor:
 
* sb=x: az 1. blokkban levő szuperblokk helyett használjuk az x. blokkban levő másolatát. 2-hatványokkal érdemes próbálkozni.
 
* 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
 
* 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/...
 
</pre>
 
 
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.
 
   
 
=== ext3 ===
 
=== ext3 ===
199. sor: 170. sor:
 
* "tree rebuild" fsck során átverhető reiserfs-image-re emlékeztető file-lal
 
* "tree rebuild" fsck során átverhető reiserfs-image-re emlékeztető file-lal
 
* instabilitás
 
* instabilitás
  +
* rossz angolsággal írt dokumentáció
   
 
Eszközök:
 
Eszközök:
   
Mount opció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
   
 
=== XFS ===
 
=== XFS ===
236. sor: 208. sor:
 
* snapshot support: ha LVM snapshotot csinálunk, arra az időre konzisztenssé teszi magát (Linux alatt)
 
* 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 defragmentálható (de nem nagyon kell)
* online növelhető (rendkívül gyorsan)
+
* online növelhető (rendkívül gyorsan, de kell hozzá legalább minimális szabad hely)
* online backupolható xfsdumppal
 
 
* POSIX ACL
 
* 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:
  +
# data section
  +
#* Meta-adatok
  +
#* Felhasználói adatok (file-ok, könyvtárak tartalma)
  +
# log section
  +
#* Ez a journal
  +
#* Alapértelmezés szerint a data section része
  +
#* De lehet külső eszközön is
  +
# realtime section
  +
#* A realtime file-ok tárolására
   
 
Hátrányok:
 
Hátrányok:
245. sor: 238. sor:
   
 
Eszközök:
 
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 <tt>xfs_freeze -u</tt> "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ó: <tt>-l version=2</tt>
  +
** é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:
 
Mount opciók:
   
=== JFS ===
+
* 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?''
  +
  +
=== [http://jfs.sourceforge.net/home.html JFS] ===
   
 
* IBM fejlesztés
 
* IBM fejlesztés
255. sor: 322. sor:
 
* kiegyensúlyozott, jó teljesítmény
 
* kiegyensúlyozott, jó teljesítmény
 
* jó stabilitás
 
* jó stabilitás
* journaling
+
* journaling (''logikai vagy fizikai?'')
* max. fileméret: 4 pebibyte
+
** tud külső journalt
* max. méret: 32 pebibyte
+
* 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ú
 
* 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)
  +
* [ftp://www6.software.ibm.com/software/developer/library/jfslayout.pdf White paper], bár nem túl részletes
   
 
Eszközök:
 
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:
 
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)
   
 
== Attribútumok ==
 
== 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.
+
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
 
* lsattr
 
* chattr
 
* chattr
  +
* xfs_io
   
* A: atime ne módosuljon
+
* A: atime ne módosuljon (ext2, ext3, xfs)
* a: csak hozzáfűzni lehet
+
* a: csak hozzáfűzni lehet (ext2, ext3, xfs)
* c: röptömörített
+
* c: röptömörített (ext2, ext3 - de csak patchel)
* D: könyvtáron: mintha dirsync opcióval mountoltuk volna az fs-t
+
* 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)
+
* d: ne backupolódjon (nyilván programfüggő, hogy nézi-e) (ext2, ext3, xfs)
* E: tömörítési hibát tartalmaz
+
* f: no-defrag: a file-t nem szabad defragmentálni. Könyvtár esetén a file-ok öröklik. (xfs)
* I: hashed tree-t használ a könyvtár
+
* i: immutable. Nem módosítható, nem törölhető, nem hardlinkelhető file. (ext2, ext3, xfs)
* 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. (ext3)
* j: a file úgy viselkedik, mintha data=journal opcióval mountoltuk volna az fs-t. Logfile-okralehet.
+
* n: a könyvtárban nem lehet symlinket létrehozni (mindenki által írható könyvtárakban bizonyos támadások elkerülésére) (xfs)
* s: törléskor nullázódik a tartalma
+
* 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: szinkron írandó file
+
* s: törléskor nullázódik a tartalma (ext2, ext3)
* 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).
+
* S: szinkron írandó file (ext2, ext3, xfs)
* t: mintha notail opcióval mountoltuk volna (noha az ext2/3-ban egyelőre nincs tail packing/merging)
+
* 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)
* u: törléskor a file nem törlődik valóban, hanem helyreállítható - szerintem nincs implementálva
+
* t: realtime inheritance. A könyvtárban létrehozott új file-ok automatikusan a realtime sectionbe kerülnek (xfs)
* X: röptömörítős patch használja
+
* t: mintha notail opcióval mountoltuk volna (noha az ext2/3-ban egyelőre nincs tail packing/merging) (ext2, ext3)
* Z: szintén
+
* 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
   
 
== Trükkök a mount körül ==
 
== Trükkök a mount körül ==
294. sor: 385. sor:
 
* mount --move
 
* mount --move
 
* pivot_root
 
* pivot_root
  +
  +
<pre>
  +
mount /dev/hda1 /new-root
  +
cd /new-root
  +
pivot_root . old-root
  +
exec chroot . sh <dev/console >dev/console 2>&1
  +
umount /old-root
  +
</pre>
   
 
== Ajánlott irodalom ==
 
== Ajánlott irodalom ==

A lap 2006. október 3., 02:24-kori változata

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

Tartalomjegyzék

1 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

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

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

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

1.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?

1.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)

2 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

3 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

4 Ajánlott irodalom

Személyes eszközök