Inodul
Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită la 22 ianuarie 2022; verificările necesită
2 modificări .
În informatică , inode (pronunțat ainod sau inode), un inode este o structură de date în sistemele tradiționale de fișiere UNIX (FS), cum ar fi UFS , ext4 . Această structură stochează metainformații despre fișiere standard , directoare sau alte obiecte ale sistemului de fișiere, pe lângă datele și numele în sine.
Detalii
Când este creat un sistem de fișiere, sunt create și structuri de date care conțin informații despre fișiere. Fiecare fișier are propriul său inode, identificat printr-un număr unic (numit adesea „i-number” sau „inode”) pe sistemul de fișiere în care se află fișierul în sine.
Inodele stochează informații despre fișiere, cum ar fi proprietatea (utilizator și grup), modul de acces (citire, scriere, rulare) și tipul fișierului. Există un anumit număr de inoduri care specifică numărul maxim de fișiere permise de un anumit sistem de fișiere. De obicei, atunci când se creează un sistem de fișiere, aproximativ 1% din volumul acestuia este alocat inodurilor.
Termenul inode se referă de obicei la blocarea inodurilor de dispozitiv care gestionează fișiere persistente, directoare și, dacă este posibil, legături simbolice . Acest concept joacă un rol important în recuperarea sistemelor de fișiere deteriorate.
- Numărul de inoduri este introdus în tabelul de inoduri la o anumită locație de pe dispozitiv; după numărul inodului, nucleul sistemului poate citi conținutul inodului, inclusiv indicatori de date și alt context de fișier.
- Numărul de inod al unui fișier poate fi vizualizat folosind comanda ls -i , iar comanda ls -l va afișa informațiile stocate în inod.
- Sistemele de fișiere UNIX netradiționale, cum ar fi ReiserFS , se pot descurca fără un tabel de inoduri, dar trebuie să stocheze informații similare într-un mod similar, care oferă o funcționalitate echivalentă. Astfel de date pot fi numite informații statistice , prin analogie cu stat un apel de sistem care furnizează informații programelor.
Numele fișierelor și conținutul directorului:
- inodele nu stochează nume de fișiere, ci doar informații despre conținutul acestora;
- directoarele din Unix sunt liste de structuri de „referință”, fiecare conținând un nume de fișier și un număr de inod;
- nucleul trebuie să caute în director un nume de fișier, apoi să convertească acel nume în numărul de inod corespunzător, dacă reușește;
- conținutul fișierelor este localizat în blocuri de date la care se face referire prin inoduri.
Reprezentarea nucleului a acestor date în memorie se numește struct inode(inod structural) (în sistemul de operare Linux ). Sistemele BSD folosesc termenul , unde vnodelitera v indică un sistem de fișiere virtual la nivel de kernel
.
Descrierea unui inod în POSIX
Standardele POSIX descriu comportamentul unui sistem de fișiere ca descendent al sistemelor tradiționale de fișiere UNIX, UFS. Fișierele obișnuite trebuie să aibă următoarele atribute:
- lungimea fișierului în octeți ;
- identificatorul dispozitivului (ID) (acesta identifică dispozitivul care conține fișierul);
- ID-ul utilizatorului care deține fișierul;
- ID grup de fișiere ;
- modul fișier , care determină ce utilizatori pot citi, scrie și rula fișierul;
- Marca temporală specifică data la care inodul a fost modificat ultima dată ( ctime , oră de schimbare ), conținutul fișierului a fost modificat ultima dată ( mtime , ora modificării ) și ultima accesare ( atime , ora de acces );
- numărul de legături indică numărul de legături rigide care indică către inodul;
- pointeri către blocuri de disc care stochează conținutul fișierului ( mai multe... ).
Apelul de sistem statcitește numărul inodul fișierului și unele informații din acesta.
Etimologia lui inode
Ceea ce în numele „i-nod” înseamnă „și” este necunoscut. Ca răspuns la o întrebare despre asta, co-creatorul Unix Dennis Ritchie a răspuns:
Sincer să fiu, nici eu nu știu. A fost doar un termen pe care am început să-l folosim. Datorită structurii puțin neobișnuite a sistemului de fișiere, în care informațiile de acces la fișiere sunt stocate ca o matrice plată pe disc, separată de toate informațiile despre ierarhia directoarelor, cel mai bun lucru pe care îl pot ghici (pentru „și”) este „index”. Astfel, i-number a fost un index în această matrice, iar i-node a fost un element selectabil al matricei. (Prefixul „și-” a fost folosit în prima versiune a manualului; de-a lungul timpului, cratima nu a mai fost folosită).
Text original (engleză)
[ arataascunde]
De fapt, nici eu nu știu. A fost doar un termen pe care am început să-l folosim. „Index” este cea mai bună presupunere a mea, din cauza structurii de sistem de fișiere puțin neobișnuite care stoca informațiile de acces ale fișierelor ca o matrice plată pe disc, cu toate informațiile despre directorul ierarhic care trăiesc în afară de aceasta. Astfel, numărul i este un index în această matrice, nodul i este elementul selectat
a matricei. (Notația „i-” a fost folosită în manualul ediției I; cratima sa a fost renunțată treptat).
Ce înseamnă „i” din inode ?
Nici Dennis Ritchie nu știe. (link indisponibil) . Preluat la 3 august 2010. Arhivat din original la 23 august 2011. (nedefinit)
Adică, nod index (nod index, element) → nod-index → i-node → inode - o scurtare treptată și o îmbinare a expresiei nod index . Conform altor versiuni, litera inițială i din nodul i poate proveni și din cuvintele informație (informație), incore, indirecte.
Înțeles
Sistemele de fișiere care folosesc inoduri au câteva caracteristici subtile:
- Dacă mai multe nume indică același inod ( linkuri hard ), atunci toate numele sunt considerate echivalente. Primul nume creat nu are o poziție specială. Acesta este diferit de comportamentul legăturilor simbolice similare , care depind de numele original.
- Este posibil ca un inod să nu aibă deloc referințe. În mod normal, un astfel de fișier ar trebui să fie șters de pe disc (de aceea programe precum undelete în Unix nu vă permit să determinați numele exact al fișierului șters), iar resursele acestuia ar trebui eliberate (acesta este procesul normal de ștergere a unui fișier). ), dar dacă vreun proces nu a închis încă fișierul, atunci poate păstra accesul la acesta, iar fișierul va fi șters definitiv numai după ce ultimul acces la acesta este închis. Acest lucru se aplică și copiilor executabile, care sunt ținute deschise de procesele care le execută. Din acest motiv, atunci când actualizați un program, este recomandat să ștergeți copia veche și să creați un nou inod pentru versiunea actualizată, astfel încât nicio instanță a versiunii vechi să nu continue să ruleze.
- De obicei, nu există nicio modalitate de a potrivi un fișier deschis cu numele său cu care a fost deschis. Sistemul de operare convertește numele fișierului într-un număr de inod la prima ocazie și apoi „uită” numele fișierului folosit. Astfel, funcțiile de bibliotecă getcwd() și getwd() încep să caute în directorul părinte un fișier cu un inod care se potrivește cu „ . » director ; apoi căutați directorul părinte pentru cel curent și așa mai departe până când se ajunge la directorul " / " . SVR4 și Linux folosesc informații suplimentare (câmpuri) în inoduri pentru a evita acest inconvenient.
- Anterior, era posibil să se legă direct directoarele. Acest lucru a făcut din structura directorului un graf direcționat în loc de un arbore (adică un graf conectat cu N-1 muchii și N noduri). De exemplu, un director ar putea fi propriul său părinte. Sistemele de fișiere moderne nu permit astfel de ambiguități, cu excepția directorului rădăcină, care este considerat a fi propriul părinte.
- Numărul inodul fișierului rămâne același atunci când fișierul este mutat într-un director diferit de pe același dispozitiv sau când discul este defragmentat . Prin urmare, mutarea fie a directorului care conține fișierul, fie a conținutului acestuia (sau ambele) nu este suficientă pentru a împiedica accesul la acesta de la un proces care rulează deja, dacă procesul are capacitatea de a calcula numărul inodului. Acest lucru înseamnă, de asemenea, că comportamentul controlat complet al inodurilor nu poate fi implementat pe multe sisteme de fișiere UNIX non-standard, cum ar fi FAT și succesorii săi, care nu au capacitatea de a menține o astfel de „imuabilitate” persistentă atunci când directorul unui fișier și conținutul acestuia se mută.
Aplicație practică
Multe programe utilizate de administratorii de sistem pe sistemul de operare (OS) UNIX folosesc adesea numere de inoduri pentru a se referi la fișiere. Populara comandă sau verificarea hard diskului încorporată poate servi drept exemple aici, deoarece are nevoie să convertească în mod natural numerele de inoduri în și din căile fișierelor . Acest lucru poate fi mărit prin utilizarea unui instrument de căutare de fișiere cu cheia , sau a unei comenzi cu cheia corespunzătoare (care pe majoritatea platformelor este ).
fsckpfiles find-inumls-i
Alocarea dinamică a inodelor
Una dintre probleme este că inodurile se pot „epuiza”. În acest caz, nu veți putea crea un nou fișier sau director pe dispozitiv, chiar dacă există suficient spațiu liber. În acest caz, fișierele existente pot fi modificate complet.
Astfel, sistemele de fișiere pot fi împărțite în două grupuri
- Număr static de inoduri: ext2-ext4...
- Număr dinamic de inoduri: jfs, xfs, btrfs, zfs...
Unele sisteme de fișiere bazate pe inode sunt imune la problema Y2038 (cunoscută ca timp Unix ) pentru a preveni depășirile de date, dar nu toate. Când configurați un server, evitarea utilizării unor astfel de sisteme de fișiere incompatibile cu POSIX devine mai importantă. Cea mai recentă versiune a POSIX acceptă apeluri de oră și dată de sistem care sunt rezistente la problema Y2038 .
Vezi și
Literatură
- 7. Inodes and Operations (engleză) (link indisponibil) (11.1999). - Stratul sistemului de fișiere virtual Linux: Inode și acțiuni - Inode în Linux . Preluat la 3 august 2010. Arhivat din original la 7 februarie 2008.
- Robachevsky A. N., Nemnyugin S. A., Stesik O. L. Descriptori de index / Sistemul de fișiere de bază System V / Capitolul 4. Sistemul de fișiere // Sistemul de operare UNIX. - Ed. a II-a. - Sankt Petersburg. : BHV-Petersburg, 2008. - S. 334-. — 656 p. - ISBN 978-5-94157-538-1 .