inode - inode

Inode (index uzlu) je datová struktura v souborovém systému Unix-styl , který popisuje systému souborů objekt, například soubor nebo adresář . Každý inode ukládá atributy a umístění diskových bloků dat objektu. Atributy objektu systému souborů mohou zahrnovat metadata (časy poslední změny, přístupu, úpravy), stejně jako údaje o vlastníkovi a povolení .

Adresář je seznam inodů s přiřazenými názvy. Seznam obsahuje záznam pro sebe, svého rodiče a každé z jeho podřízených.

Etymologie

V seznamu adresářů jádra Linuxu byla nejistota ohledně důvodu „i“ v „inode“. V roce 2002 byla otázka položena průkopníkovi Unixu Dennisovi Ritchie , který odpověděl:

Po pravdě řečeno, ani já nevím. Byl to jen termín, který jsme začali používat. „Rejstřík“ je můj nejlepší odhad kvůli mírně neobvyklé struktuře systému souborů, která ukládala informace o přístupu k souborům jako ploché pole na disku, přičemž kromě toho zůstávaly všechny hierarchické informace o adresáři. I-číslo je tedy indexem v tomto poli, i-uzel je vybraným prvkem pole. (Označení „i-“ bylo použito v 1. vydání manuálu; jeho pomlčka byla postupně zrušena.)

Papír z roku 1978 od Ritchieho a Kena Thompsona posiluje představu, že „index“ je etymologický původ inodů. Oni psali:

[…] Položka v adresáři obsahuje pouze název přidruženého souboru a ukazatel na samotný soubor. Tento ukazatel je celé číslo, které se nazývá i-číslo (pro indexové číslo) souboru. Při přístupu k souboru se jeho i-číslo použije jako index do systémové tabulky ( i-seznamu ) uložené ve známé části zařízení, ve kterém je umístěn adresář. Nalezená položka ( i-uzel souboru ) obsahuje popis souboru.

Maurice J. Bach dále napsal, že inode „je kontrakcí termínu indexový uzel a běžně se používá v literatuře o systému UNIX“.

Detaily

Deskriptory souborů, tabulka souborů a tabulka inode v Unixu

Souborový systém se opírá o datových struktur o souborech, na rozdíl od obsahu tohoto souboru. První se nazývají metadata - data, která popisují data. Každý soubor je spojen s inodem , který je identifikován celým číslem, často označovaným jako číslo i nebo inode .

Inodes ukládá informace o souborech a adresářích (složkách), jako je vlastnictví souborů, režim přístupu (čtení, zápis, provádění oprávnění) a typ souboru. U mnoha starších implementací systému souborů je maximální počet inodů stanoven při vytváření systému souborů, což omezuje maximální počet souborů, které může systém souborů pojmout. Typická heuristika přidělování pro inody v systému souborů je jeden inode pro každé 2 kB bajtů obsažených v souborovém systému.

Číslo inodu indexuje tabulku inodů ve známém umístění v zařízení. Z čísla inodu může ovladač systému souborů jádra přistupovat k obsahu inode, včetně umístění souboru, čímž umožňuje přístup k souboru. Číslo inodu souboru najdete pomocí ls -ipříkazu. ls -iPříkaz vytiskne číslo i-uzlu v prvním sloupci této zprávy.

Některé souborové systémy ve stylu Unixu, jako jsou ReiserFS , btrfs a APFS, vynechávají inode tabulku s pevnou velikostí, ale musí poskytovat ekvivalentní data, aby poskytly ekvivalentní funkce. Data mohou být nazývána stat data, ve vztahu k stat systémovému volání, které poskytuje data programům. Mezi běžné alternativy tabulky pevné velikosti patří B-stromy a odvozené B + stromy .

Názvy souborů a důsledky pro adresář:

  • Inodes neobsahuje názvy svých pevných odkazů, pouze další metadata souborů.
  • Adresáře Unix jsou seznamy asociačních struktur, z nichž každý obsahuje jeden název souboru a jedno číslo inodu.
  • Ovladač systému souborů musí hledat adresář hledající konkrétní název souboru a poté převést název souboru na správné odpovídající číslo inodu.

Reprezentace těchto dat v paměti jádra operačního systému se struct inodev systému Linux nazývá . Systémy odvozené od BSD používají tento výraz vnode(„v“ označuje vrstvu virtuálního systému souborů jádra ).

Popis inodu POSIX

Standard POSIX nařizuje chování systému souborů, které je silně ovlivněno tradičními systémy souborů UNIX . Inode je označen frází „souboru pořadové číslo“, která je definována jako per-systémovém souboru jedinečný identifikátor souboru. Toto sériové číslo souboru spolu s ID zařízení obsahujícího soubor jednoznačně identifikuje soubor v celém systému.

V systému POSIX má soubor následující atributy, které lze načíst statsystémovým voláním:

  • ID zařízení (identifikuje zařízení obsahující soubor; tj. Rozsah jedinečnosti sériového čísla).
  • Sériová čísla souborů.
  • Soubor režim , který určuje typ souboru a jak majitel spisu, jeho skupina, a ostatní mohou získat přístup k souboru.
  • Link Počet vyprávění, kolik hard linky směřují k inode.
  • User ID vlastníka souboru.
  • Group ID souboru.
  • ID zařízení souboru, pokud se jedná o soubor zařízení .
  • Velikost souboru v bajtech .
  • Časová razítka informující o tom, kdy byl samotný inode naposledy změněn ( ctime , čas změny inode ), naposledy změněn obsah souboru ( mtime , čas úpravy ) a poslední přístup ( atime , čas přístupu ).
  • Upřednostňovaná velikost I / O bloku.
  • Počet bloků přidělených tomuto souboru.

Dopady

Souborové systémy navržené s inody budou mít následující administrativní charakteristiky.

  • Soubory mohou mít více jmen. Pokud více jmen pevně odkazuje na stejný inode, pak jsou jména ekvivalentní; tj. první vytvořený nemá žádný zvláštní status. To je na rozdíl od symbolických odkazů , které závisí na původním názvu, nikoli na inode (čísle).
  • Inode nemusí mít žádné odkazy. Nepřipojený soubor je odstraněn z disku a jeho prostředky jsou uvolněny pro opětovné přidělení, ale odstranění musí počkat, dokud všechny procesy, které jej otevřely, k němu nedojdou. To zahrnuje spustitelné soubory, které jsou implicitně drženy otevřené procesy, které je provádějí.
  • Obvykle není možné mapovat z otevřeného souboru na název souboru, který byl použit k jeho otevření. Operační systém okamžitě převede název souboru na číslo inodu a poté název souboru zahodí. To znamená, že funkce knihovny getcwd () a getwd () prohledávají nadřazený adresář a hledají soubor s inodem odpovídajícím pracovnímu adresáři , poté prohledávají nadřazený adresář tohoto adresáře atd., Dokud se nedostanou do kořenového adresáře . Systémy SVR4 a Linux udržují další informace, aby to bylo možné.
  • Historicky bylo možné adresáře pevně propojit . Díky tomu se adresářová struktura změnila v libovolný směrovaný graf na rozdíl od směrovaného acyklického grafu . Dokonce bylo možné, aby adresář byl jeho vlastní rodič. Moderní systémy obecně tento matoucí stav zakazují, kromě toho, že rodič root je stále definován jako root. Nejvýznamnější výjimka z tohoto zákazu se nachází v systému Mac OS X (verze 10.5 a vyšší), který umožňuje superuživatelům vytvářet pevné odkazy na adresáře.
  • Číslo inodu souboru zůstává stejné, když je přesunuto do jiného adresáře na stejném zařízení, nebo když je disk defragmentován, což může změnit jeho fyzické umístění, což umožňuje jeho přesun a přejmenování, i když je čteno a zapisováno do bez přerušení . To také znamená, že zcela vyhovující chování inodů je nemožné implementovat u mnoha souborových systémů jiných než Unix, jako je FAT a jeho potomci, kteří nemají způsob ukládání této invariance, když se přesouvá jak položka adresáře souboru, tak jeho data .
  • Instalace nových knihoven je u systémů souborů inode jednoduchá. Spuštěný proces může přistupovat k souboru knihovny, zatímco jiný soubor tento soubor nahradí, vytvoří nový inode a pro nový soubor bude existovat zcela nové mapování, aby následné pokusy o přístup do knihovny získaly novou verzi. Toto zařízení eliminuje nutnost restartu, aby se nahradily aktuálně mapované knihovny.
  • Je možné, že zařízení dojde inody. V takovém případě nelze v zařízení vytvořit nové soubory, i když může být k dispozici volné místo. To je nejběžnější pro případy použití, jako jsou poštovní servery, které obsahují mnoho malých souborů. Souborové systémy (například JFS nebo XFS ) unikají tomuto omezení s rozsahy nebo dynamickým přidělením inodů, které mohou „zvětšit“ souborový systém nebo zvýšit počet inodů.

Inlining

Může mít smysl ukládat velmi malé soubory do samotného inodu, aby se ušetřilo jak místo (není nutný žádný datový blok), tak čas vyhledávání (není nutný žádný další přístup na disk). Tato funkce systému souborů se nazývá vložení. Při použití moderních souborových systémů tedy již nelze předpokládat přísné oddělení dat inodu a souborů.

Pokud se data souboru vejdou do prostoru přiděleného pro ukazatele na data, lze tento prostor pohodlně použít. Například ext2 a jeho následníci ukládají data symbolických odkazů (obvykle názvy souborů) tímto způsobem, pokud data nepřesahují 60 bajtů („rychlé symbolické odkazy“).

Ext4 má možnost systému souborů s názvem, inline_datakterá umožňuje ext4 provádět inlining, pokud je povolen během vytváření systému souborů. Protože velikost inody je omezená, funguje to pouze pro velmi malé soubory.

V systémech jiných než Unix

  • NTFS má tabulku hlavních souborů (MFT), která ukládá soubory do B-stromu. Každá položka má „fileID“, analogické číslu inodu, které jedinečně odkazuje na tuto položku. Tři časová razítka, ID zařízení, atributy, počet odkazů a velikosti souborů se nacházejí v položce, ale na rozdíl od POSIXu jsou oprávnění vyjádřena prostřednictvím jiného API. Rozložení na disku je složitější. Dřívější souborové systémy FAT takovou tabulku neměly a nebyly schopny vytvářet pevné odkazy .
    • NTFS má také koncept vložení malých souborů do položky MFT.
    • Odvozený ReFS má homologní MFT. ReFS má 128bitové ID souboru; tato přípona byla také backportována na NTFS, který měl původně 64bitové ID souboru.
  • Stejné rozhraní API GetFileInformationByHandle podobné stati lze použít na sdílených svazcích clusteru a SMB 3.0 , takže tyto systémy pravděpodobně mají podobný koncept ID souboru.

Viz také

Reference

externí odkazy