[pso] sizeof(superblock)

Octavian Voicu octavian.voicu at gmail.com
Fri May 14 00:33:55 EEST 2010


2010/5/13 Alexandru Juncu <alexandrujuncu at gmail.com>
>
> Pornind de la enunțul temei 4, am o nelămurire (and my google searched
> didn't get me far...)
>
> Stack trace for my questions:
> De ce este specificat la sistemul de fișisre că superblockul are 4096B
> pe când restul bucăților sunt specificate în blocksize?
>
> Ok. mărimea unui block este specificată în superblock, dar... asta
> înseamnă că superblock-ul nu este UN block? Adică sizeof(superblock)
> != sizeof(block)...
>
> Dacă nu este un block, cât e? Depinde e sistemul de fișiere sau e ceva
> standard pentru toate sistemele de fișiere?

It's the chicken-egg problem, again. Cum poti afla dimensiunea
superblock-ului inainte sa citesti superblock-ul, care contine
dimensiunea block-urilor deci si a superblock-ului.

Ca sa se sparga loop-ul, se specifica dimensiunea superblock-ului. O
varianta e sa setezi blocksize la dimensiunea din enunt, sa citesti
superblock-ul si apoi sa setezi dimensiunea corecta a block-urilor
folosind informatiile din superblock-ul citit. Dupa acest pas trebuie
sa remapezi superblock-ul (fiind modificat blocksize-ul, nu va mai
merge cum trebuie cel vechi). Din punctul de vedere al sistemului de
fisiere nu conteaza decat primii bytes din SB care sunt inclusi in
structura, restul pot avea orice valoare.

O alta varianta e sa citesti doar 512 bytes, oricum nu folosesti
restul. Dar tot trebuie sa remapezi superblock-ul dupa ce pui
blocksize la dimensiunea corecta.

Problema aici e de fapt ca superblock-ul trebuie sa fie intotdeauna de
dimensiune multiplu de blocksize (altfel s-ar complica prea mult
lucrurile, ar trebui un padding, ai avea o parte din imap in primul
block etc). Cum dimensiunea maxima a unui block pt filesystem-ul pe
care trebuie sa-l implementati e 4096, superblock-ul a fost ales de
aceeasi dimensiune. Astfel dimensiunea de 4096 bytes a superblock-ului
nu conteaza decat pentru calcularea offset-ului pentru imap zone.

Octavian


More information about the pso mailing list