Paras vastaus
Lyhyesti
Jokaisella tiedostojärjestelmällä on superlohko, joka sisältää tietoja tiedostojärjestelmästä, kuten:
- tiedostojärjestelmän tyyppi
- koko
- tila
- Tietoja muista metatietorakenteista
Yksityiskohtaisesti
Superblock on tiedostojärjestelmää edustava rakenne. Se sisältää tarvittavat tiedot tiedostojärjestelmän hallitsemiseksi käytön aikana. Se sisältää tiedostojärjestelmän nimen (kuten ext4), tiedostojärjestelmän koon ja tilan, viittauksen estolaitteeseen ja metatietotiedot (kuten ilmaiset luettelot ja niin edelleen). Superblock tallennetaan tyypillisesti tallennusvälineelle, mutta se voidaan luoda reaaliajassa, jos sitä ei ole. Superblock-rakenne löytyy osoitteesta ./linux/include/linux/fs.h.
One tärkeä osa superblokista on superblock-operaatioiden määritelmä. Tämä rakenne määrittelee joukon toimintoja inodien hallitsemiseksi tiedostojärjestelmässä. Esimerkiksi inodeja voidaan kohdistaa alloc\_inode
-toiminnolla tai poistaa destroy\_inode
. Voit lukea ja kirjoittaa inodeja read\_inode
ja write\_inode
tai synkronoida tiedosto järjestelmä, jossa on sync\_fs
. Löydät rakenteen super\_operations
hakemistosta ./linux/include/linux/fs.h. Jokainen tiedostojärjestelmä tarjoaa oman omat inode-menetelmät, jotka toteuttavat toiminnot ja tarjoavat yhteisen abstraktin VFS-kerrokselle.
Fyysinen rakenne
Asettelu on vaikuttanut voimakkaasti Ext2-tiedostojärjestelmien fyysiseen rakenteeseen BSD-tiedostojärjestelmän. Tiedostojärjestelmä koostuu lohkoryhmistä. Lohkoryhmät ovat analogisia BSD FFS: n sylinteriryhmien kanssa. Lohkoryhmät eivät kuitenkaan ole sidoksissa levyn lohkojen fyysiseen asetteluun, koska nykyaikaiset asemat ovat yleensä optimoituja peräkkäiselle käytölle ja piilottavat fyysisen geometriansa käyttöjärjestelmään.
,---------+---------+---------+---------+---------,
| Boot | Block | Block | ... | Block |
| sector | group 1 | group 2 | | group n |
`---------+---------+---------+---------+---------"
Jokainen lohkoryhmä sisältää redundantin kopion tärkeistä tiedostojärjestelmän ohjaustiedoista (superlohko ja tiedostojärjestelmä descriptors) ja sisältää myös osan tiedostojärjestelmästä (lohkobittikartta, inodibittikartta, pala inoditaulukkoa ja datalohkot). Lohkiryhmän rakenne on esitetty tässä taulukossa:
,---------+---------+---------+---------+---------+---------,
| Super | FS | Block | Inode | Inode | Data |
| block | desc. | bitmap | bitmap | table | blocks |
`---------+---------+---------+---------+---------+---------"
Lohkoryhmien käyttö on luotettavuuden kannalta suuri voitto: koska ohjausrakenteet toistetaan jokaisessa lohkoryhmässä, se on e asy toipua tiedostojärjestelmästä, jossa superlohko on vioittunut. Tämä rakenne auttaa myös saavuttamaan hyvät suoritukset: pienentämällä inoditaulukon ja datalohkojen välistä etäisyyttä on mahdollista vähentää levyn päätä, jota haetaan tiedostojen I / O-toiminnoissa.
Viite: – Laajennetut tiedostojärjestelmät (Ext, Ext2, Ext3)
Vastaus
Linuxin tiedostojärjestelmät toimivat useilla tasoilla: A) a joukko primitiivisiä rutiineja, jotka ovat vuorovaikutuksessa laitteen (eli ohjaimen) kanssa, B) joukko -tietueita levylle, mitä kutsutaan tiedostoiksi, ja C) metatiedot jokaisesta tiedostosta, joita kutsutaan inodeiksi, jokaiselle tiedostolle on yksi inode. Nämä inodit seuraavat esimerkiksi tiedostomääritteitäsi, tiedostojesi lukemisen ja kirjoittamisen määrittelyä jne.
Osoittautuu, että tämä on vain keskeneräinen kuva. Tämä on ennen kuin kukin tiedostojärjestelmä voi päättää järjestää sen inodit haluamallaan tavalla levylle. Jopa inodien in-disk-esitys voi vaihdella eri tiedostojärjestelmien välillä – tärkeintä on vain, että näkymä toimitetaan VFS: lle inode-rakenteiden kanssa. Joten Linux ei sinänsä tiedä, miten tiedostojärjestelmän yksittäisiä tiedostoja / inodeja voidaan käyttää.
Ongelma hoidetaan siististi käyttämällä struct-tiedostojärjestelmää ja -rakennetta super\_block -tyypit. Jälkimmäinen asuu levyllä, kun taas ensimmäinen elää vain muistissa. Kun asennat tiedostojärjestelmän sanan avulla,
mount -t ext4 / dev / usb1 / mnt / usb1
file\_system , joka määrittelee ext4-tyypin, sisältää mount () -rutiini, joka määrittää, kuinka superblock-objekti luetaan levyltä. Tämä superblock-objekti määrittää kaiken, mitä tarvitset pääsemään (varaamaan, poistamaan, lukemaan, oikealle, synkronoimaan laitteen ja muistin välillä jne.) Laitteen inodeja.Kun tämä superblock-objekti on haettu muistiin, käytämme sen lookup () -toimintoja luodaksesi inodit levyltä muistiin. Sitten käytämme näitä inodeja vuorotellen pääsemään tiedostojärjestelmiin. Se on siinä hierarkkinen, todella ja melko siisti!