Ext3 könyvtár olvasása lassú

Sziasztok !

Lehet valamit tenni az ellen, hogy sok kis fájlt tartalmazó könyvtárakat (pl. /usr/bin) a rendszerem ne undorítóan lassan listázza ki?

Természetesen "sima "ls parancsra nincs különösebb panaszom, de MC-ben, vagy valamilyen grafikus fájlkezelőben elképesztő (Konqueror, a /usr/bin-t, ami 3280 db fájl, kb. 30 mp alatt listázza ki). Másodszorra már gyorsabb, gondolom a gyorstár miatt.

Rendszer:
RHEL4 WS4
AMD Athlon 3200+
SATA HDD
Ext3 fájlrendszer

Üdv:

Black

Hozzászólások

dir_index bebillentese a filerendszeren?

A "sima" ls csak a könyvtárbejegyzést nyalja végig, ami annyi idő, mint végigolvasni egy nagyságrendileg 100 kB-os fájlt. Pár tucat blokk a vinyón, amik jó eséllyel még közel is vannak egymáshoz.

Egy "ls -l" vagy mc vagy konqueror ezen felül minden egyes fájlra lekérdezi annak inode-jában található infókat is (méret, dátum, tulaj stb.), ami azt jelenti, hogy rosszabb esetben akár a vinyó 3280 tök különböző pontján (ez nyilván költői túlzás, mert ezekből csomó majdnem ugyanott van, de a lényeg akkor is érzékelhető) kell fejenként 128 byte-ot kiolvasni. Nem csoda, ha lassú. Bár mondjuk a 30 mp irreális, kábé 3 mp lenne normális szerintem.

Amit kipróbálnék: hozz létre /usr/bin2 könyvtárat, és _másold_ át bele a fájlokat úgy, hogy közben nem nagyon csinálsz mást. Valami olyan progival másolj, ami megtartja a mindenféle attribútumokat. Aztán próbáld ki, hogy reboot után /usr/bin2 kilistázása mennyi idő. Úgy sejtem, sokkal gyorsabb lesz. Ennek az lehet az oka, hogy mivel egyszerre hozod létre a háromezer új fájlt, ezért ezek i-node információi közel kerülnek egymáshoz. Ha bejött a tipp, akkor annak még nézz utána, hogy /usr/bin alatt voltak-e hardlinkek, szükség szerint kézzel korrigáld /usr/bin2 tartalmát, hogy minden szempontból tök ugyanaz legyen, majd "mv /usr/bin /usr/bin1", "mv /usr/bin2 /usr/bin", "rm -rf /usr/bin1", azaz a régit törlöd, az újat a helyére rakod.

Réges-régen ext2 fájlrendszerrel párszáz user home-jánál sokat segített ez a trükk (a userek tök különböző időben lettek létrehozva, és a /home listázása volt baromi lassú). Itt mondjuk, mivel könyvtárak voltak a /home-ban, annyit trükköztünk, hogy az új helyen először létrehoztuk minden usernek a nyitó könyvtárát, aztán töltöttük fel a megfelelő tartalommal mindegyiket.

Most nézem, hogy a konqueror nekem is ilyen lassú. (Fejben számolva a mp-eket 25-ig jutottam :-)))
Valszeg arról van szó, hogy ez még ráadásul bele is néz minden egyes fájl tartalmába, hogy megállapítsa annak típusát (kirajzolandó ikon, Fájltípus oszlopba írt szöveg). Ezen aligha lehet sokat gyorsítani, bár az előző trükk lehet hogy itt is javít picit.

Amit tenni lehet:

- küldj bugreportot nekik hogy ez így nem járja, azonnal ki kéne raknia a fájlok listáját, és utána (miközben már használhatod a konquerort) ahogy ideje engedi, szép lassan kitölteni az ikon és fájltípus oszlopokat, tehát hogy ezzel a melóval ne akadályozza a felhasználót.

- ha a /usr/bin-ben túrkálsz, használj "rendes" fájlkezelőt, pl. mc. :-)