Cel mai bun răspuns
Pe scurt
Fiecare sistem de fișiere are un superbloc, care conține informații despre sistemul de fișiere, cum ar fi:
- Tip sistem de fișiere
- Dimensiune
- Stare
- Informații despre alte structuri de metadate
În detaliu
Superblocul este o structură care reprezintă un sistem de fișiere. Acesta include informațiile necesare pentru a gestiona sistemul de fișiere în timpul funcționării. Include numele sistemului de fișiere (cum ar fi ext4), dimensiunea sistemului de fișiere și starea acestuia, o referință la dispozitivul de blocare și informații despre metadate (cum ar fi listele gratuite și așa mai departe). Superblocul este de obicei stocat pe mediul de stocare, dar poate fi creat în timp real dacă nu există. Puteți găsi structura superblocului în ./linux/include/linux/fs.h.
One elementul important al superblocului este o definiție a operațiilor superblocului. Această structură definește setul de funcții pentru gestionarea inodurilor din sistemul de fișiere. De exemplu, inodurile pot fi alocate cu alloc\_inode
sau șterse cu destroy\_inode
. Puteți citi și scrie inode cu read\_inode
și write\_inode
sau puteți sincroniza fișierul cu sync\_fs
. Puteți găsi structura super\_operations
în ./linux/include/linux/fs.h. Fiecare sistem de fișiere oferă propriile metode inode, care implementează operațiunile și asigură abstractizarea comună a stratului VFS.
Structură fizică
Structura fizică a sistemelor de fișiere Ext2 a fost puternic influențată de aspect a sistemului de fișiere BSD. Un sistem de fișiere este format din grupuri de blocuri. Grupurile de blocuri sunt similare cu grupurile de cilindri BSD FFS. Cu toate acestea, grupurile de blocuri nu sunt legate de aspectul fizic al blocurilor de pe disc, deoarece unitățile moderne tind să fie optimizate pentru acces secvențial și își ascund geometria fizică sistemului de operare.
,---------+---------+---------+---------+---------,
| Boot | Block | Block | ... | Block |
| sector | group 1 | group 2 | | group n |
`---------+---------+---------+---------+---------"
Fiecare grup de blocuri conține o copie redundantă a informațiilor cruciale de control al sistemului de fișiere (superbloc și sistemul de fișiere descriptori) și conține, de asemenea, o parte a sistemului de fișiere (un bitmap de bloc, o bitmap inode, o parte din tabelul inode și blocuri de date). Structura unui grup de blocuri este reprezentată în acest tabel:
,---------+---------+---------+---------+---------+---------,
| Super | FS | Block | Inode | Inode | Data |
| block | desc. | bitmap | bitmap | table | blocks |
`---------+---------+---------+---------+---------+---------"
Utilizarea grupurilor de blocuri este un mare câștig în ceea ce privește fiabilitatea: deoarece structurile de control sunt reproduse în fiecare grup de blocuri, eu vad Asy pentru a recupera de la un sistem de fișiere în care superblocul a fost corupt. Această structură ajută, de asemenea, la obținerea unor performanțe bune: prin reducerea distanței dintre tabelul de inod și blocurile de date, este posibilă reducerea căutărilor de cap de disc în timpul I / O pe fișiere.
Referință: – Sisteme de fișiere extinse (Ext, Ext2, Ext3)
Răspuns
Sistemele de fișiere din Linux funcționează în mai multe straturi: A) a set de rutine primitive pentru a interacționa cu dispozitivul (adică driverul), B) un set de înregistrări pe disc corespunzător a ceea ce numim fișiere și C) informații despre metadate despre fiecare fișier numit inode, existând 1 inod pentru fiecare fișier. Aceste inode urmăresc lucruri cum ar fi atributele fișierului dvs., modul în care sunt definite citirea / scrierea fișierelor dvs. etc.
Se pare că aceasta este doar o imagine incompletă. Asta înainte ca fiecare tip de sistem de fișiere să aleagă aranjarea inodurilor în orice fel îi place pe disc. Chiar și reprezentarea pe disc a inodurilor poate varia între diferite sisteme de fișiere – ceea ce contează este doar ca vizualizare VFS este furnizat cu structurile inode sunt de acord. Deci Linux nu este în sine modul în care fișierele / inodii individuali dintr-un sistem de fișiere pot fi accesate.
Problema este rezolvată cu grijă prin utilizarea struct file\_system și a tipuri super\_block . Acesta din urmă trăiește pe disc, în timp ce primul trăiește doar în memorie. Când montați un sistem de fișiere folosind say,
montați -t ext4 / dev / usb1 / mnt / usb1
obiectul file\_system care definește tipul ext4 conține un mount () rutină care specifică modul de citire a obiectului superbloc de pe disc. Acest obiect superbloc specifică tot ce aveți nevoie pentru a accesa (alocați, ștergeți, citiți, corectați, sincronizați între dispozitiv și memorie etc.) inodii din dispozitiv.Odată ce acest obiect superbloc este preluat în memorie, folosim operațiunile sale lookup () pentru a citi inodii de pe disc în memorie. Apoi, folosim aceste inode la rândul nostru pentru a ajunge la sistemele de fișiere. Este ierarhic, într-adevăr și destul de îngrijit!