[FreeBSD] UFS limit(?)
Zahemszky Gábor
Gabor at Zahemszky.HU
2002. Már. 23., Szo, 12:03:01 CET
On Sat, Mar 23, 2002 at 04:45:24AM +0100, Gal Viktor wrote:
> hali!
>
> kerdesem az lenne hogy az UFS-nek van valami felso hatara? marmint
> filesystem meret beli felso hatara? es ez elemeleti hatar vagy gyakorlati
> is? :)
Szevasz!
Hat elmeleti felso hatara majd mindegyik fs-nek kell legyen, leven valamilyen
modon cimezgetni kell az adatblokkokat, es erre 1/2/4/8/16/stb byte-os adatot
szoknak hasznalni :-) Ha mazlid van, Julian megmondja az epp aktualis
erteket, de egy elindulashoz hasznalhato info:
1) minden file-nak kell legyen inode-ja
2) minden inode-ban van 15 fs-block pointer, amikkel a file adatait eri el
3) az 1-12 pointerek adatblokkot cimeznek
4) a 13. indirekt pointer, azaz olyan blokkot cimez, amiben nem file adatok,
hanem adatblokkra mutato pointerek vannak
5) a 14. ketszeresen indirekt pointer
6) a 15. haromszorosan indirekt pointer
7) ha jol tudom, egy pointer 4 byte, es a legkisebb fs-blokk meret amit
valaszthatsz 4K, a legnagyobb 64K; azaz a pointerblokkokban pont 1024 db
pointer van, tehat:
8) 12 * 4K + 1 * 1024 * 4K + 1 * 1024^2 * 4K + 1 * 1024^3 * 4K
a legkisebb fs-blokk eseten tarolhato legnagyobb file ( = 48K + 4M + 4G + 4T,
nagysagrendileg valamivel 4T folott van ugye)
9) ha viszont 64K-s blokkot hasznalsz, akkor az:
[ 12 * 4K * 16 ]+ [ 1 * ( 1K * 16) * (4 * 16) ] + ...
azaz elso tagnal 16, utana 16^2, utana 16^4, ... szorzo jon be - ez meg mar
eleg szep nagy szam. Es nyilvan a megcimezheto legnagyobb file-t tarolni
is kell tudni :-)
10) sajnos vannak problemak, elsokent is a fajlokon beluli mozgasra szolgalo
lseek(2), aminek egy elojeles 4 (vagy tan most mar 8?) byte-os parametere van,
es azzal el kene tudni jutni a file vegere, valamint ha valahogy odamentem,
akkor ugyanezen tipusban visszaadnia az aktualis bytepoziciot. Egyes Jujniksz
rendszerekben levo UFS implementacioban valahol meg pluszban elvesztenek egy
bitet (az elojel biten kivul), valamint van, ahol a 15., haromszorosan
indirekt pointert nem is hasznaljak. (Ki tudja fejbol - en nem -, *BSD-knel
ez epp fennall, vagy nem?)
11) Legalabb 2-3 eve lehetett, de valameyik kinti FBSD listan (freebsd-hackers?)
jott egy level, hogy valamilyen virtualis diszkkezelovel (ez vagy a ccd, vagy
a Vinum lehetett asszem) csinaltak boszme nagy (en 4T folottire emlekszem,
de ki tudja) fs-t, es vigan mukodott. Sajnos nehezen tudnam a megfelelo
keresesi kriteriumot eloszedni, amivel a kivant levelet megkaphatod.
Meglehetosen kutyafuttaban beleneztem a ``Design and Implementation of the
4.4BSD Operating System'' by McKusick/Bostic/Karels/Quarterman konyvbe,
de meretre vonatkozo felso hatarrol nem talaltam benne semmit. (Sot, talaltam
egy olyat, hogy: "The block size can be any power of 2 greater than or
equal to 4096." p.270) Ami szerint az en 64K-s blokkmeret korlatom nem
igaz, de ezt konkretan nem tudom. Persze hiba is lehet, vegul is szakkonyv :-).
Ennyi, melyebb infokert freebsd-fs at freebsd.org. Asszem ezen a heten volt
egy hosszu thread kulonbozo fs-eket leiro konyvekrol es egyeb doksikrol.
ZGabor < Gabor at Zahemszky dot HU >
--
#!/bin/ksh
Z='21N16I25C25E30, 40M30E33E25T15U!' ;IFS=' ABCDEFGHIJKLMNOPQRSTUVWXYZ ';set $Z ;for i { [[ $i = ? ]]&&print $i&&break;[[ $i = ??? ]]&&j=$i&&i=${i%?};typeset -i40 i=8#$i;print -n ${i#???};[[ "$j" = ??? ]]&&print -n "${j#??} "&&j=;typeset +i i;};IFS=' 0123456789 ';set $Z;X=;for i { [[ $i = , ]]&&i=2;[[ $i = ?? ]]||typeset -l i;X="$X $i";typeset +l i;};print "$X"
További információk a(z) BSD levelezőlistáról