Portál AbcLinuxu, 10. května 2025 07:38

Dotaz: velikost "adresáře"

28.2.2013 08:41 Milan
velikost "adresáře"
Přečteno: 358×
Odpovědět | Admin
Dobrý den

mám dotaz ohledně zobrazované velikosti adresáře ... Když vytvořím novou složku (staré ubuntu , ext3), mc mi ukazuje že má velikost 4096 B(ajtů). To chápu, předzabrané místo pro budoucí záznamy.

Mám skript, který s touto vytvořenou složkou intenzivně pracuje (vytváření a mazání dočasných souborů) ..

nedávno jsem asi po roce tuto složku otevíral zase v mc, a přesto, že je prázdná (neobsahuje žádné soubory), mc udává velikost adresáře (tedy ne místo obsazené soubory, které jsou ve složce uloženy, ale adresářových záznamů o těchto souborech) přes 1,5MB.

To mně docela překvapilo, znamená to asi, že se tyto záznamy "samy" nepročišťují, a nějak, no ne že by mi to vadilo, ale přijde mi to jako bug. Ať už bug ext3 nebo můj, protože asi mám něco špatně nastaveno.

Může mě někdo nakopnout, v čem je problém ?

Teď koukám na složky pošty... tam přece je taky velký provoz .. jedna právě promazaná složka (opradu mnoho smazaných souborů) má adresář 1,6MB, ale složka new, přes kterou všechny ty soubory protečou má adresář jen 12kB .. tak nevím, vyzná se v tom někdo ?

předem díky

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.2.2013 09:01 cronin | skóre: 49
Rozbalit Rozbalit vše Re: velikost "adresáře"
Odpovědět | | Sbalit | Link | Blokovat | Admin
Midnight commanderu by som v takychto veciach veľmi neveril. Minimálne by som začal tým, odkiaľ zobrazovanú informáciu berie. Veď MC je len "kukátko", ktoré málo čo robí samo. :-)
In what concerns your other points, you obviously do
not understand the way ls and directory size count 
features work.

1) Unless mc is explicitly asked to count the size of
the directory it defaults to the output of ls, which
is to report the amount of blocks currently used for
the directory entry. That's why in most of the cases
it shows 4096 for you, as your file system uses 4K blocks.

2) Count directory sizes is a CPU and time intensive 
operation and is never performed unless you ask mc 
to do this explicitly.

3) When you exit the directory, the results of the counting 
operation are not cached, so when you re-enter it again you 
have to recount the whole thing again.

I don't see any bug here.
Zdroj: Komentár #7
28.2.2013 10:09 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: velikost "adresáře"
Odpovědět | | Sbalit | Link | Blokovat | Admin
velikost 4096 B(ajtů). To chápu, předzabrané místo pro budoucí záznamy.

Ani ne, to je prostě jeden alokační blok. Méně stejně zabrat nemůžete. Všimněte si, že jak adresář roste (ve smyslu počtu položek a délek jejich jmen), uváděná velikost je vždy násobkem 4 KB.

To mně docela překvapilo, znamená to asi, že se tyto záznamy "samy" nepročišťují, a nějak, no ne že by mi to vadilo, ale přijde mi to jako bug.

Vzhledem k tomu, že se tak IIRC ext2+ chovají, co pamatuji, spíš bych řekl, že je to záměr. Ono je potřeba si uvědomit, že ani to, že uvolníte (velkou) část položek, ještě neznamená, že můžete uvolnit i nějaké bloky, zvlášť pokud používáte indexaci a adresář není jen prostý lineární seznam jako dřív. Asi by šel napsat nějaký garbage collecting, který by adresář čas od času "zkompaktnil", ale IMHO by nebylo vůbec triviální udělat to tak, abyste na jedné straně vyloučil race conditions a na druhé neovlivnil výkon.

Teď koukám na složky pošty... tam přece je taky velký provoz .. jedna právě promazaná složka (opradu mnoho smazaných souborů) má adresář 1,6MB, ale složka new, přes kterou všechny ty soubory protečou má adresář jen 12kB .. tak nevím, vyzná se v tom někdo ?

Zjednodušeně řečeno nejde o to, kolik souborů adresářem "proteklo", ale o to, kolik jich tam bylo nejvíc. Takže pokud maily pravidelně prohlížíte, můžete jich v cur nastřádat klidně statisíce, aniž by jich v new kdykoli bylo více než třeba sto.

Mimochodem, ext2/ext3 nikdy nebyl znám jako filesystém pro efektivní práci s velkým počtem malých souborů.

28.2.2013 11:04 trubicoid2
Rozbalit Rozbalit vše Re: velikost "adresáře"
Odpovědět | | Sbalit | Link | Blokovat | Admin
no narustani adresaru je vlastnost ext2, 3 i 4, kdo neveri si zkusi totok:

dd if=/dev/zero of=file bs=1M count=512

mkfs.ext4 file

mount -o loop file /mnt/tmp

mkdir /mnt/tmp/dir

ls -l /mnt/tmp

cd /mnt/tmp/dir

for i in {1..4096}; do touch $i; done

rm *

ls -l /mnt/tmp

adresar dir naroste z 4096 na 53248 (ext2) nebo na 69632 (ext3, ext4).

zvratit se to da asi jen pomoci e2fsck -f -D (zajimavy je, ze ext2 nepotrebuje -D)

napise to: ... Pass 3A: Optimizing directories ...

a pak je adresar dir zase 4096
28.2.2013 11:09 trubicoid2
Rozbalit Rozbalit vše Re: velikost "adresáře"
jeste doplnim, ze ne vsechny FS to delaji, treba xfs ma na zacatku velikost adresare 6, po naplneni 69632 a hned po smazani opet 6.
4.3.2013 08:13 Milan
Rozbalit Rozbalit vše Re: velikost "adresáře"
Odpovědět | | Sbalit | Link | Blokovat | Admin
Noooo ...

Děkuji za vysvětlení, jak to vše vlastně funguje ..

Asi s tím tedy prozatím nebudu nic dělat, ta optimalizace se musí provést v odpojeném stavu (zřejmě) a zase takové harakiri kvůli půl mega nebudu dělat .. to by asi vyžadovalo restart do nějaké nouzové konsole, aby nenaběhly služby, které ten filesystém využívají .. no raději ne

Ještě jednou všem díky Milan

4.3.2013 08:25 R
Rozbalit Rozbalit vše Re: velikost "adresáře"
Najjednoduchsia optimalizacia je ten adresar vymazat a vytvorit znovu. Ak tam mas nejake subory, tak vytvorit novy adresar s inym menom, presunut potrebne subory do neho, vymazat stary adresar a novy premenovat na povodny nazov.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.