Bedste svar
Kort sagt
Hvert filsystem har en superblok, der indeholder oplysninger om filsystem, såsom:
- Filsystemtype
- Størrelse
- Status
- Oplysninger om andre metadatastrukturer
I detaljer
Superblokken er en struktur, der repræsenterer et filsystem. Det inkluderer de nødvendige oplysninger til at styre filsystemet under drift. Det inkluderer filsystemnavnet (såsom ext4), størrelsen på filsystemet og dets tilstand, en henvisning til blokkenheden og metadataoplysninger (såsom gratis lister og så videre). Superblokken gemmes typisk på lagringsmediet, men kan oprettes i realtid, hvis en ikke findes. Du kan finde superblokstrukturen i ./linux/include/linux/fs.h.
En vigtigt element i superblokken er en definition af superblokoperationerne. Denne struktur definerer sæt af funktioner til styring af inoder i filsystemet. For eksempel kan inoder tildeles med alloc\_inode
eller slettes med destroy\_inode
. Du kan læse og skrive inoder med read\_inode
og write\_inode
eller synkronisere filen system med sync\_fs
. Du kan finde super\_operations
strukturen i ./linux/include/linux/fs.h. Hvert filsystem giver sit egne inode-metoder, som implementerer operationerne og leverer den fælles abstraktion til VFS-laget.
Fysisk struktur
Den fysiske struktur af Ext2-filsystemer er blevet stærkt påvirket af layoutet af BSD-filsystemet. Et filsystem består af blokgrupper. Blokgrupper er analoge med BSD FFSs cylindergrupper. Blokgrupper er dog ikke bundet til det fysiske layout af blokkene på disken, da moderne drev har tendens til at være optimeret til sekventiel adgang og skjule deres fysiske geometri til operativsystemet.
,---------+---------+---------+---------+---------,
| Boot | Block | Block | ... | Block |
| sector | group 1 | group 2 | | group n |
`---------+---------+---------+---------+---------"
Hver blokgruppe indeholder en overflødig kopi af vigtige filsystemkontrolinformationer (superblock og filsystemet beskrivelser) og indeholder også en del af filsystemet (en blokbitmap, en inode bitmap, et stykke af inodetabellen og datablokke). Strukturen af en blokgruppe er repræsenteret i denne tabel:
,---------+---------+---------+---------+---------+---------,
| Super | FS | Block | Inode | Inode | Data |
| block | desc. | bitmap | bitmap | table | blocks |
`---------+---------+---------+---------+---------+---------"
Brug af blokgrupper er en stor gevinst med hensyn til pålidelighed: da kontrolstrukturer replikeres i hver blokgruppe, er det er e asy at gendanne fra et filsystem, hvor superblokken er blevet beskadiget. Denne struktur hjælper også med at opnå gode præstationer: ved at reducere afstanden mellem inodetabellen og datablokkene er det muligt at reducere diskhovedets søgninger under I / O på filer.
Reference: – Udvidede filsystemer (Ext, Ext2, Ext3)
Svar
Filsystemer i Linux fungerer i flere lag: A) a sæt primitive rutiner til at interagere med enheden (dvs. driveren), B) et sæt poster på disken svarende til det, vi kalder filer, og C) metadataoplysninger om hver fil, der kaldes inoder, der er 1 inode for hver fil. Disse inoder sporer ting som hvad dine filattributter er, hvordan læs / skriv på dine filer defineres osv.
Viser sig, at dette bare er et ufuldstændigt billede. Det er før hver type filsystem kan vælge at arrangere dets inoder på enhver måde, som de kan lide på disken. Selv on-disk-repræsentationen af inoder kan variere mellem forskellige filsystemer – det der betyder noget er kun, at visning VFS er forsynet med af inodestrukturer er enige. Så Linux er ikke i sig selv, hvordan de enkelte filer / inoder i et filsystem kan åbnes.
Problemet håndteres pænt ved brug af struct file\_system og struct super\_block typer. Sidstnævnte bor på disken, mens førstnævnte kun lever i hukommelsen. Når du monterer et filsystem ved hjælp af sige,
monterer -t ext4 / dev / usb1 / mnt / usb1
file\_system objektet, der definerer ext4-typen, indeholder et mount () rutine, der specificerer, hvordan superblock-objektet skal læses fra disken. Dette superblock-objekt specificerer alt, hvad du har brug for at få adgang til (allokere, slette, læse, højre, synkronisere mellem enhed og hukommelse osv.) Inoderne i enheden.Når dette superblock-objekt er hentet i hukommelsen, bruger vi dets opslag () til at læse inoder fra disken i hukommelsen. Derefter bruger vi disse inoder til gengæld for at komme til filsystemerne. Det er hierarkisk, virkelig og ret pænt på det!