sok metaadat - milyen fájlrendszert?

Adott egy fájlrendszer, amin van több, mint 15 millió apró fájl. Jelenleg ext3, mert bevált és stabil.

Éjszakánként azonban rákergetek egy rsync-et, backupolás céljából. Mivel a fájlok többsége nem változik, így tényleges másolás szinte alig történik, viszont a könyvtárlista készítése (fstat) több óráig is eltart, amíg veszettül seekel a diszk.

Ha van valakinek valami ötlete, hogy hogyan lehetne optimalizálni ezt a folyamatot, akkor nosza, mondja!

Oké, nyilván, az SSD egyfajta megoldás, mert nem kell rajta fejet pozícionálni :)

Pl. valami olyanra gondoltam, mint a FAT fájlrendszer, hogy a diszk elején egykupacban van a FAT tábla, ahonnan az összes metaadatot be lehetne kesselni egy szekvenciális olvasással, elvégre RAM van dögivel. (vagy, ha nem is megy egy szekvenciális olvasással, mivel minden egy helyen van, nem kell sokat seekelni.)

Hozzászólások

szedd szet a fajlokat kulon konyvtarakba, valami tulajdonsag alapjan. pl ha szamok, akkor szam / 10000 => konyvtarnev (pl 123456.jpg => 12/123456.jpg) igy csak 10000 fajlod lesz egy konyvtarban.

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

15 millió objektum fájlrendszernek már lehet, hogy sok (az...), de ha belapátolod az egészet egy adatbázisba (BLOB), akkor ott azért sokkalta egyszerűbb lekövetni a változásokat.

Ha ez tényleg akkora probléma, a következő megoldási lehetőségek biztos nyitva állnak előtted:
- snapshottal backupolsz, ez a legegyszerűbb
- csinálsz egy LD_PRELOAD-os buta kis libet, ami a módosításokat lelogolja, így a backupnál nagyon gyorsan fogod tudni, hogy mit kell menteni. Hátránya, hogy minden alkalmazáshoz hozzá kell menet közben tölteni, vagy eleve bele linkelni. Ez is OS független.
- ha linux, használhatod erre az inotifyt -vagy az fsnotifyt, ez linux, bazmeg, újraírják hetente, az már ha minden igaz használható ilyenre is- (vagy bsd-ken a kqueue-t, esetleg az audit frameworköt), készíthetsz saját programot, vagy nézhetsz kész kódot példának, vagy -ha alkalmasak- közvetlen használatra is, pld. http://code.google.com/p/lsyncd/, http://ebalaskas.gr/blog/?page=PIrsyncD

suckIT szopás minden nap! WTF, FBI-backdoor az OpenBSD crypto frameworkben?!

Hasonló problémám van, minden 2 hétnél régebbi fájl (azóta nem módosult) archiválásra kerül (de nem törlődik a szerverről), amelyik újabb mint a legutolsó archiválás. Ez egy ~sima find-ed megoldható, viszont végignyálazza az összes fájlt az utolsó módosítási dátum alapján, ha ehhez lenne egy index sokkal gyorsabb lenne. Szóval ha van ilyen lehetőség fájlrendszer szinten, az engem is érdekelne.
Mivel Samba megosztásról van szó a fájlokat nem rakosgathatom saját ízlésemnek megfelelően :)

Igen, de nem lesz automatikus. Tehet minden alkalommal meg kell keresni, hogy mely fájlokhoz nincs hard link, így ugyanott vagyok.
A legjobb egy olyan index lenne ami a változás dátumát és egy útvonalat tartalmazna. Nem lehet valahogyan bele hook-olni a fájlmódosítás menetébe, úgy értem fusson le egy script ha a fájlrendszeren megváltozik egy file?

Erre tényleg célszerű könyvtárakba szétszervezni a dolgot:

1. lépésben azt keresed ki, hogy melyik könyvtár változott,
2. lépésben a gyanús könyvtárakban keresed ki fájlokat

Ha tényleg rengeteg fájl gyűlt össze, célszerű a szétszedés után egy defragni, kevés változtatás esetén sokáig egyben lesz.

...

Jobban belegondolva: amikor a seek viszi az időt, minden bontogatás nélkül is segíthet egy fs -> .tar -> fs kör.

Néhány random ötlet: Nem lehet a blokkméret változtatásával növelni a teljesítményt? Vagy betenni még egy-két diszket, hogy nőjön az IOPS? Memóriába tenni a fájlrendszert?

A durva sok fájl durva sok fájl lesz, akárhogy rakod őket sorba (persze ha van egy 15m*(kis_fajlmeret)-méretű ramparkod, akkor az se baj) -- de nem lehet megcsinálni okosba', valami logból, illetve ha olyan nincs, nem lehet a fájlokat piszkáló programot rávenni, hogy csináljon olyat?

echo 1 > /proc/sys/vm/vfs_cache_pressure

A szerverunkon be van allitva, egy

find /netware | wc -l

utan egyetlen egy bitet sem olvasott a diszkrol (a

/proc/diskstats

szerint), pedig 9.9 millio file van a filerendszeren.