Beste antwoord
In het kort
Elk bestandssysteem heeft een superblok, dat informatie bevat over het bestandssysteem zoals:
- Type bestandssysteem
- Grootte
- Status
- Informatie over andere metadatastructuren
In detail
Het superblok is een structuur die een bestandssysteem vertegenwoordigt. Het bevat de nodige informatie om het bestandssysteem tijdens het gebruik te beheren. Het bevat de naam van het bestandssysteem (zoals ext4), de grootte van het bestandssysteem en de staat, een verwijzing naar het blokapparaat en metagegevens (zoals vrije lijsten, enzovoort). Het superblok wordt doorgaans opgeslagen op het opslagmedium, maar kan in realtime worden gemaakt als er geen bestaat. Je kunt de superblokstructuur vinden in ./linux/include/linux/fs.h.
Een een belangrijk element van het superblok is een definitie van de superblokbewerkingen. Deze structuur definieert de set functies voor het beheren van inodes binnen het bestandssysteem. Inodes kunnen bijvoorbeeld worden toegewezen met alloc\_inode
of verwijderd met destroy\_inode
. U kunt inodes lezen en schrijven met read\_inode
en write\_inode
of het bestand synchroniseren systeem met sync\_fs
. Je kunt de super\_operations
structuur vinden in ./linux/include/linux/fs.h. Elk bestandssysteem biedt zijn eigen inode-methoden, die de bewerkingen implementeren en de algemene abstractie bieden aan de VFS-laag.
Fysieke structuur
De fysieke structuur van Ext2-bestandssystemen is sterk beïnvloed door de lay-out van het BSD-bestandssysteem. Een bestandssysteem bestaat uit blokgroepen. Blokgroepen zijn analoog aan de cilindergroepen van BSD FFS. Blokgroepen zijn echter niet gebonden aan de fysieke lay-out van de blokken op de schijf, aangezien moderne schijven doorgaans zijn geoptimaliseerd voor sequentiële toegang en hun fysieke geometrie voor het besturingssysteem verbergen.
,---------+---------+---------+---------+---------,
| Boot | Block | Block | ... | Block |
| sector | group 1 | group 2 | | group n |
`---------+---------+---------+---------+---------"
Elke blokgroep bevat een redundante kopie van cruciale besturingsinformatie van het bestandssysteem (superblok en het bestandssysteem descriptors) en bevat ook een deel van het bestandssysteem (een blokbitmap, een inodebitmap, een stuk van de inodetabel en datablokken). De structuur van een blokgroep wordt in deze tabel weergegeven:
,---------+---------+---------+---------+---------+---------,
| Super | FS | Block | Inode | Inode | Data |
| block | desc. | bitmap | bitmap | table | blocks |
`---------+---------+---------+---------+---------+---------"
Het gebruik van blokgroepen is een grote overwinning in termen van betrouwbaarheid: aangezien de controlestructuren in elke blokgroep worden gerepliceerd, is e asy om te herstellen van een bestandssysteem waar het superblok beschadigd is. Deze structuur helpt ook om goede prestaties te krijgen: door de afstand tussen de inodetabel en de datablokken te verkleinen, is het mogelijk om het aantal zoekacties naar schijfkop tijdens I / O op bestanden te verminderen.
Referentie: – Uitgebreide bestandssystemen (Ext, Ext2, Ext3)
Antwoord
Bestandssystemen in Linux werken op verschillende lagen: A) a set primitieve routines om te communiceren met het apparaat (dwz de driver), B) een set records op de schijf die overeenkomt met wat we bestanden noemen, en C) metadata-informatie over elk bestand die inodes worden genoemd, er is 1 inode voor elk bestand. Deze inodes houden dingen bij zoals wat uw bestandskenmerken zijn, hoe lezen / schrijven op uw bestanden is gedefinieerd, enz.
Blijkt dat dit slechts een onvolledig beeld is. Dat is voordat elk type bestandssysteem ervoor kan kiezen om zijn inodes op elke gewenste manier op de schijf te rangschikken. Zelfs de weergave van inodes op de schijf kan variëren tussen verschillende bestandssystemen – het gaat er alleen om dat de view de VFS is voorzien van de inodestructuren die overeenkomen. Dus Linux heeft niet per se hoe de individuele bestanden / inodes in een bestandssysteem toegankelijk zijn.
Het probleem wordt netjes afgehandeld door het gebruik van het struct file\_system en de struct super\_block typen. De laatste leeft op de schijf terwijl de eerste alleen in de herinnering leeft. Wanneer je mount een bestandssysteem met zeg,
mount -t ext4 / dev / usb1 / mnt / usb1
het file\_system -object dat het ext4-type definieert, bevat een mount () routine die specificeert hoe het superblock-object van de schijf moet worden gelezen. Dit superblock-object specificeert alles wat je nodig hebt om toegang te krijgen (toewijzen, verwijderen, lezen, rechts, synchroniseren tussen apparaat en geheugen, enz.) Tot de inodes in het apparaat.Zodra dit superblokobject in het geheugen is opgehaald, gebruiken we de lookup () -bewerkingen om inodes van de schijf in het geheugen te lezen. Vervolgens gebruiken we deze inodes op hun beurt om bij de bestandssystemen te komen. Het is echt hiërarchisch en ook best netjes!