Inode

Een inode ( Engels index knooppunt , uitgesproken "eye-knoop") is de basis datastructuur voor het beheren van bestandssystemen met Unix-achtige besturingssystemen . Elke inode is uniek geïdentificeerd binnen een partitie door zijn inodenummer . Elke naaminvoer in een directory verwijst naar precies één inode. Deze bevat de metadata van het bestand en verwijst naar de data van het bestand of de bestandenlijst van de directory.

De applicatiesoftware maakt bij het lezen of schrijven van gegevens geen onderscheid meer tussen apparaatstuurprogramma's en gewone bestanden. Vanwege het inode-concept telt alles als een bestand in de Unix-varianten ( "Op UNIX-systemen is het redelijk veilig om te zeggen dat alles een bestand is..." ; zie Alles is een bestand ). Hierdoor verschillen dergelijke besturingssystemen in het beheer van hun gegevensopslag van andere systemen zoals Microsoft Windows met NTFS , maar ook van VMS of MVS .

Basis

Als een bestand op een computer wordt opgeslagen, moet niet alleen de inhoud van het bestand (gebruikersgegevens) worden opgeslagen, maar ook metagegevens zoals het tijdstip waarop het bestand is gemaakt of de eigenaar van het bestand. Tegelijkertijd moet de computer in staat zijn om de relevante gebruikersdata en metadata efficiënt toe te wijzen aan een bestandsnaam - inclusief het bestandspad. De specificatie van hoe deze gegevens zijn georganiseerd en opgeslagen op een gegevensdrager wordt het bestandssysteem genoemd. Er zijn verschillende bestandssystemen afhankelijk van het toepassingsgebied en het besturingssysteem. De specificatie van het bestandssysteem wordt geïmplementeerd door een driver , die kan worden geïmplementeerd als een kernelmodule van de kernel van het besturingssysteem of, minder vaak, als een normaal programma in de gebruikersruimte .

Image
Ruwe structuur van het Unix-bestandssysteem

Bestandssystemen van Unixoid-besturingssystemen - zoals Linux en macOS - maken gebruik van zogenaamde inodes. Deze bevatten zowel de metadata als verwijzingen naar waar de gebruikersgegevens zijn opgeslagen. De grootte, het aantal en de locatie van de inodes worden opgeslagen op een speciale locatie in het bestandssysteem, het superblok . De inodes zijn genummerd en in één stuk op de gegevensdrager bewaard. De hoofdmap van een bestandssysteem heeft een vast inodenummer. Submappen zijn "normale" bestanden die een lijst bevatten van de bestanden die ze bevatten met de toewijzing van de bijbehorende inodenummers als gebruikersgegevens.

Als bijvoorbeeld het bestand / bin / ls moet worden geopend, wordt dit als volgt vereenvoudigd:

  • Het stuurprogramma van het bestandssysteem leest het superblok. Dit vertelt hem de startpositie van de inodes en hun lengte. Elke inode kan nu worden gevonden en gelezen.
  • Nu wordt de inode van de hoofdmap geopend. Aangezien dit een map is, is er een verwijzing naar de locatie van de lijst met alle bestanden erin, samen met hun inodenummers. Er wordt gezocht naar de bin-directory.
  • Nu kan de inode van de bin-directory worden gelezen en, analoog aan de laatste stap, de inode van het bestand ls.
  • Aangezien het bestand ls geen directory maar een gewoon bestand is, bevat zijn inode nu een verwijzing naar de opslaglocatie van de gewenste gegevens.

bouw

Elke naam van een schuine streep / ( beperkte schuine streep ) wordt toegewezen aan een inode. Hiermee wordt de volgende meta-informatie over het bestand opgeslagen, maar niet de werkelijke naam:

  • Het type bestand (regulier bestand, directory, symbolische link, ...), zie hieronder;
  • de numerieke identificatie van de eigenaar (UID, gebruikers-ID ) en de groep (GID, groeps-ID );
  • de toegangsrechten voor de eigenaar ( gebruiker ), de groep ( groep ) en alle anderen ( anderen );
    Het klassieke gebruikers- en rechtenbeheer wordt gedaan met de programma's chown( wijzig eigenaar ), chgrp( wijzig groep ) en chmod( wijzig modus ). Door Access Control Lists (ACL) is een fijnere toewijzing van rechten mogelijk.
  • verschillende tijden van het bestand: aanmaak, toegang ( toegangstijd , atime ) en laatste wijziging ( wijzigingstijd , mtime );
  • het tijdstip van de laatste statuswijziging van de inode ( status , ctime );
  • de grootte van het bestand;
  • de linkteller (zie hieronder );
  • een of meer verwijzingen naar de blokken waarin de feitelijke gegevens zijn opgeslagen.

gewone bestanden

Reguliere bestanden (Engl. Reguliere bestanden ) zijn zowel gebruikersgegevens als uitvoerbare programma's . Deze laatste zijn te herkennen aan de e x ecutable rechts en zijn gestart in een afzonderlijk proces toen opgeroepen door het systeem. Niet alleen gecompileerde programma's worden beschouwd als "uitvoerbaar" , maar ook scripts waarvoor de keet specificeert de tolk te gebruiken . In het geval van “sparse files”, zogenaamde sparse files , wijkt de logische grootte af van de harde schijfruimte die daadwerkelijk door de datablokken wordt ingenomen.

Directory's

Directory's zijn bestanden waarvan de "bestandsinhoud" bestaat uit een tabel met de bestanden die ze bevatten. De tabel bevat een kolom met de bestandsnamen en een kolom met de bijbehorende inodenummers. Voor sommige bestandssystemen geeft de tabel aanvullende informatie. Op deze manier slaat ext4 ook het bestandstype op van alle bestanden die het bevat, zodat het niet uit de inodes van alle bestanden hoeft te worden gelezen bij het weergeven van een directory-inhoud. De vermeldingen .en ..verwijzingen naar de huidige of hogere directory bestaan ​​altijd voor elke directory.

Harde en symbolische links

Bij symbolische links zijn er speciale bestanden die in plaats van data een bestandspad verwijzingen naar de link bevat. Afhankelijk van het bestandssysteem en de lengte van het bestandspad wordt de link ofwel direct in de inode opgeslagen of in een datablok waarnaar de inode verwijst.

Bij harde links zijn het echter geen specifieke bestanden. Een harde link is wanneer er meerdere keren naar een inode wordt verwezen door verschillende mappen of verschillende bestanden. Alle verwijzingen (links) naar de inode zijn gelijkwaardig; dus origineel is er niet. In de inode geeft de linkteller aan hoeveel bestandsnamen ernaar verwijzen. Na het maken van een bestand staat het op 1 en wordt het verhoogd zodra er meer harde koppelingen voor dit bestand worden gemaakt. In het geval van een directory zijn dat er twee meer dan de submappen die het bevat, want naast het item in de bovenstaande map en het item '. in de map verwijzen de vermeldingen '..' in alle submappen ernaar. Als een bestand wordt verwijderd, wordt het item verwijderd uit de map op een hoger niveau en wordt de linkteller met één verminderd. Als de linkteller dan 0 is, kan er een wachttijd zijn totdat het bestand door geen enkel programma meer wordt geopend en pas dan wordt de opslagruimte vrijgegeven.

Meer soorten bestanden

Naast deze veelvoorkomende bestanden zijn er nog andere bestandstypen:

Verwijzing naar de gegevens

In oudere bestandssystemen bevat de inode meestal een beperkt aantal vermeldingen in datablokken waarin de gebruikersgegevens van het bestand zich bevinden. Aangezien het aantal vermeldingen in de inode de bestandsgrootte ernstig zou beperken, wordt voor grotere bestanden in de inode een verwijzing naar een datablok opgeslagen, waarin een lijst met verwijzingen naar datablokken wordt opgeslagen in plaats van gebruikersgegevens. Theoretisch kan dit principe worden herhaald als in elkaar genest.

Als alternatief hebben modernere bestandssystemen zogenaamde extents , waarbij alleen het nummer van het eerste en het laatste blok van een aaneengesloten gebied van datablokken in de inode worden opgeslagen. Als het bestand niet gefragmenteerd is, hoeven er slechts twee blok-ID's te worden opgeslagen, ongeacht de bestandsgrootte: het nummer van het eerste gegevensblok en het nummer van het laatste gegevensblok.

voorbeeld

In het ext2- bestandssysteem is de standaardgrootte van een inode 128 bytes. Maximaal 12 vermeldingen in een normaal bestand verwijzen elk naar een gegevensblok waarin de feitelijke inhoud is opgeslagen. Als deze 12 blokken niet voldoende zijn, verwijst een vermelding in de inode naar een cluster, dat dan de verwijzingen naar de eigenlijke dataclusters bevat. Zo'n verwijzing wordt een eenvoudig indirect blok genoemd . Er zijn maximaal drie indirecte blokken mogelijk, zodat de maximale bestandsgrootte tussen 16 GiB en 4  TiB kan liggen , afhankelijk van de blokgrootte  .

Voorbeeld van een inodestructuur met 12  KiB in direct geadresseerde datablokken en ongeveer 16 miljoen KiB + 65536 KiB + 256 KiB in indirect geadresseerde datablokken / clusters, elk één KiB groot:

De 256 vermeldingen in de blokken waarnaar verwezen wordt, vloeien voort uit het feit dat een 1 KiB-blok precies 256 adressen met een lengte van 4 bytes (32-bits adresruimte) kan bevatten.

Inode structuur

praktijk

Het inodenummer van een bestand kan worden weergegeven met het commando . Het programma biedt de mogelijkheid om te zoeken naar bestanden met een specifiek inodenummer. ls -i Dateinamefind-inum

De metadata die zijn opgeslagen in een inode kunnen worden statweergegeven met het commando . De tool debugfskent de opdracht stat <[inodenumer]>om de gegevens die zijn opgeslagen in de inode weer te geven.

Het aantal mogelijke inodes en dus de mogelijke bestanden is in sommige bestandssystemen beperkt; als het maximale aantal is bereikt, kunnen er geen bestanden meer worden aangemaakt. Het aantal inodes kan worden ingesteld bij het maken van ext2 / ext3 / ext4 bestandssystemen. Bij gegevensdragers met een groot aantal kleine bestanden moet je bij het formatteren oppassen dat het aantal inodes hoog genoeg is. Met de optie toont het programma df( vrije schijfruimte weergeven ) -ihet aantal bezette en beschikbare inodes op alle gekoppelde bestandssystemen.

Bestandssystemen hebben meestal controlesoftware die onder andere de inodes controleert op inconsistenties. Het wordt hiervoor gebruikt op Linux en sommige andere Unixoid-systemen fsck. fsckprobeert het type bestandssysteem te bepalen en controleert vervolgens alle inodes op juistheid.

Het aantal beschikbare inodes wordt voor de meeste bestandssystemen bepaald wanneer ze worden gemaakt en kan i. d. Verander daarna meestal niet. Het aantal inodes beperkt dus ook het maximale aantal bestanden dat op het bestandssysteem kan worden opgeslagen (inclusief alle mappen, speciale bestanden, enz.).

literatuur

web links

Individueel bewijs

  1. AEleen vers: Essentiele System Administration . 2e editie. O'Reilly Verlag, 1995, ISBN 1-56592-127-5 , blz. 37 .
  2. AEleen vers: Essentiele System Administration . 2e editie. O'Reilly Verlag, 1995, ISBN 1-56592-127-5 , blz. 38 .
  3. ^ Het tweede uitgebreide bestandssysteem, interne lay-out door Dave Poirier, sectie s_inode_size
  4. a b c Het tweede uitgebreide bestandssysteem, interne lay-out door Dave Poirier, sectie i_block