Inode
Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från
versionen som granskades den 22 januari 2022; kontroller kräver
2 redigeringar .
Inom datavetenskap , inode (uttalas ainod eller inode), är en inode en datastruktur i traditionella UNIX -filsystem (FS), såsom UFS , ext4 . Den här strukturen lagrar metainformation om standardfiler , kataloger eller andra filsystemobjekt, förutom själva data och namn
.
Detaljer
När ett filsystem skapas skapas även datastrukturer som innehåller information om filer. Varje fil har sin egen inod, identifierad med ett unikt nummer (ofta kallat ett "i-nummer" eller "inod") på filsystemet där själva filen finns.
Inoder lagrar information om filer, såsom ägande (användare och grupp), åtkomstläge (läs, skriv, kör) och filtyp. Det finns ett visst antal inoder som anger det maximala antalet filer som tillåts av ett visst filsystem. Vanligtvis, när du skapar ett filsystem, allokeras ungefär 1 % av dess volym till inoder.
Termen inod syftar vanligtvis på blockenhetsinoder som hanterar beständiga filer, kataloger och, om möjligt, symboliska länkar . Detta koncept spelar en viktig roll för att återställa skadade filsystem.
- Inodnumret matas in i inodtabellen på en specifik plats på enheten; genom inodnumret kan systemkärnan läsa innehållet i inoden, inklusive datapekare och annan filkontext.
- Inodnumret för en fil kan ses med kommandot ls -i , och kommandot ls -l visar informationen som är lagrad i inoden.
- Icke-traditionella UNIX-filsystem, som ReiserFS , klarar sig utan en inodtabell, men måste lagra liknande information på ett liknande sätt som ger likvärdig funktionalitet. Sådan data kan kallas statistisk information , i analogi med stat ett systemanrop som tillhandahåller information till program.
Filnamn och kataloginnehåll:
- inoder lagrar inte filnamn, endast information om deras innehåll;
- kataloger i Unix är listor med "referens"-strukturer, som var och en innehåller ett filnamn och ett inodnummer;
- kärnan måste söka i katalogen efter ett filnamn och sedan konvertera det namnet till lämpligt inodnummer, om det lyckas;
- innehållet i filer finns i datablock som refereras av inoder.
Kärnans representation av dessa data i minnet kallas struct inodeen (strukturell inod) (i Linux OS ). BSD - system använder termen , där vnodebokstaven v indikerar ett virtuellt filsystem på kärnnivå
.
Beskrivning av en inod i POSIX
POSIX - standarderna beskriver beteendet hos ett filsystem som en ättling till de traditionella UNIX-filsystemen, UFS. Vanliga filer måste ha följande attribut:
- fillängd i byte ;
- enhetsidentifierare (ID) (denna identifierar enheten som innehåller filen);
- ID för användaren som äger filen;
- Filgrupp -ID ;
- filläge , som bestämmer vilka användare som kan läsa, skriva och köra filen ;
- Tidsstämpeln anger datumet då inoden senast ändrades ( ctime , change time ), innehållet i filen senast ändrades ( mtime , modification time ) och senast användes ( atime , access time );
- länkantalet indikerar antalet hårda länkar som pekar mot inoden;
- pekare till diskblock som lagrar innehållet i filen ( mer... ).
Systemanropet statläser filens inodnummer och viss information från den.
Etymologi av inode
Vad i namnet "i-nod" betyder "och" är okänt. Som svar på en fråga om detta svarade Unix medskapare Dennis Ritchie :
För att vara ärlig så vet jag inte heller. Det var bara en term vi började använda. På grund av filsystemets något ovanliga struktur, där filåtkomstinformation lagras som en platt array på disk, separat från all kataloghierarkiinformation, är det bästa jag kan gissa (för "och") "index". Således var i-nummer ett index i denna array, och i-nod var ett valbart element i arrayen. (Prefixet "och-" användes i den första versionen av manualen; med tiden användes bindestrecket inte längre).
Originaltext (engelska)
[ visaDölj]
I sanning vet jag inte heller. Det var bara en term som vi började använda. "Index" är min bästa gissning, på grund av den något ovanliga filsystemstrukturen som lagrade åtkomstinformationen för filer som en platt array på disken, med all hierarkisk kataloginformation som lever bortsett från detta. Således är i-numret ett index i denna array, i-noden är det valda elementet
av arrayen. (Beteckningen "i-" användes i den första upplagan av manualen; bindestrecket försvann gradvis).
Vad står "i" i inod för ?
Dennis Ritchie vet inte heller. (inte tillgänglig länk) . Hämtad 3 augusti 2010. Arkiverad från originalet 23 augusti 2011. (obestämd)
Det vill säga indexnod (indexnod, element) → index-nod → i-nod → inod - en gradvis förkortning och sammanslagning av frasen indexnod . Enligt andra versioner kan initialbokstaven i i i -noden också komma från orden information (information), incore, indirection.
Betydelse
Filsystem som använder inoder har flera subtila funktioner:
- Om flera namn pekar på samma inod ( hårda länkar ), så anses alla namn vara likvärdiga. Det först skapade namnet har ingen särställning. Detta skiljer sig från beteendet hos liknande symboliska länkar , som beror på det ursprungliga namnet.
- En inod kanske inte har några referenser alls. Normalt bör en sådan fil tas bort från disken (vilket är anledningen till att program som återställ i Unix inte tillåter dig att bestämma det exakta namnet på en raderad fil), och dess resurser bör frigöras (detta är den normala processen att ta bort en fil ), men om några processer ännu inte har stängt filen kan de behålla åtkomsten till den, och filen kommer bara att raderas permanent efter att den senaste åtkomsten till den stängts. Detta gäller även för körbara kopior, som hålls öppna av de processer som kör dem. Av denna anledning, när du uppdaterar ett program, rekommenderas att du tar bort den gamla kopian och skapar en ny inod för den uppdaterade versionen så att inga instanser av den gamla versionen fortsätter att köras.
- Det finns vanligtvis inget sätt att matcha en öppen fil med dess namn som den öppnades med. Operativsystemet konverterar filnamnet till ett inodnummer vid första tillfället och "glömmer" sedan filnamnet som används. Således börjar biblioteksfunktionerna getcwd() och getwd() att leta i den överordnade katalogen efter en fil med en inod som matchar " . » katalog ; leta sedan efter den överordnade katalogen för den aktuella, och så vidare tills " / "-katalogen nås . SVR4 och Linux använder extra information (fält) i inoder för att undvika detta besvär.
- Tidigare var det möjligt att hårdlänka kataloger. Detta gjorde katalogstrukturen till en riktad graf istället för ett träd (det vill säga en sammankopplad graf med N-1 kanter och N noder). Till exempel kan en katalog vara sin egen förälder. Moderna filsystem tillåter inte sådana oklarheter, med undantag för rotkatalogen, som anses vara sin egen förälder.
- Filens inodnummer förblir detsamma när filen flyttas till en annan katalog på samma enhet eller när disken defragmenteras . Därför är det inte tillräckligt att flytta antingen katalogen som innehåller filen eller dess innehåll (eller båda) för att förhindra åtkomst till den från en redan pågående process, om processen har förmågan att beräkna inodnumret. Detta innebär också att helt kontrollerat beteende hos inoder inte kan implementeras på många icke-standardiserade UNIX-filsystem, såsom FAT och dess efterföljare, som inte har förmågan att upprätthålla en sådan ihållande "oföränderlighet" när en fils katalog och dess innehåll flyttas.
Praktisk tillämpning
Många program som används av systemadministratörer i UNIX- operativsystemet (OS) använder ofta inodnummer för att referera till filer. Den populära inbyggda hårddiskkontrollen eller fsckkommandot pfileskan tjäna som exempel här, eftersom det har ett behov av att naturligt konvertera inodnummer till och från filsökvägar . Detta kan utökas genom att använda en filsökare med nyckeln eller ett kommando med lämplig nyckel (som på de flesta plattformar är ).
find-inumls-i
Dynamisk inodallokering
Ett av problemen är att inoder kan "ta slut". I det här fallet kommer du inte att kunna skapa en ny fil eller katalog på enheten, även om det finns tillräckligt med ledigt utrymme. I det här fallet kan befintliga filer modifieras helt.
Således kan filsystem delas in i två grupper
- Statiskt antal inoder: ext2-ext4 ...
- Dynamiskt antal inoder: jfs, xfs, btrfs, zfs...
Vissa inodbaserade filsystem är immuna mot Y2038-problemet (känd som Unix-tid ) för att förhindra datumspill, men inte alla. När du ställer in en server blir det viktigare att undvika användningen av sådana POSIX -inkompatibla filsystem. Den senaste versionen av POSIX stöder systemtid- och datumanrop som är resistenta mot problem Y2038 .
Se även
Litteratur
- 7. Inoder och operationer (engelska) (inte tillgänglig länk) (11.1999). - Lager av virtuellt filsystem i Linux: Inoder och åtgärder - Inoder i Linux . Hämtad 3 augusti 2010. Arkiverad från originalet 7 februari 2008.
- Robachevsky A. N., Nemnyugin S. A., Stesik O. L. Indexbeskrivningar / System V grundläggande filsystem / Kapitel 4. Filsystem // UNIX operativsystem. - 2:a uppl. - St Petersburg. : BHV-Petersburg, 2008. - S. 334-. — 656 sid. - ISBN 978-5-94157-538-1 .