inode

Wikipediasta
Siirry navigaatioon Siirry hakuun

inode on Unixin kaltaisten käyttöjärjestelmien tiedostojärjestelmissä käytetty massamuistille tallennettu tietorakenne, joka säilyttää metadataa tiedostosta. Unixissa tiedostojärjestelmän hakemisto säilyttää ainoastaan tiedoston nimen, ja linkin sen inodeen, jossa muut tiedot sijaitsevat.

Tallennetut tiedot[muokkaa | muokkaa wikitekstiä]

POSIX-standardin mukaan inode pitää kirjaa laitteesta (tiedostojärjestelmästä) jolla tiedosto sijaitsee, inoden numeron, käyttöoikeusbitit, tiedoston omistavan käyttäjän ja ryhmän numeron, tiedoston koon ja sille varattujen lohkojen määrän, aikaleimat. Unix pitää myös kirjaa inoden linkkien määrästä ja stardardin mukaan inode kertoo lisäksi suositellun blokkikoon tiedoston lukemiseksi.[1] inode voi käyttöjärjestelmästä sen tukemista tiedostojärjestelmästä riippuen sisältää myös muita tietoja, joita varten inodelle varataan lisää tilaa.

Tiedoston omistaja ja ryhmä on ilmoitettu kokonaislukuna. Tämän vuoksi käyttäjien tiedostot sisältävää tiedostojärjestelmää ei usein voi siirtää toiseen järjestelmään, jos niillä ei käytetä yhteisiä kirjautumistietoja, jotka on haettu jostain hakemistopalvelusta kuten NIS. Ilman tätä käyttöjärjestelmän passwd- ja group-tietokannat sisältävät käyttäjänimien ja numeroiden välisen yhteyden.

POSIX-järjestelmä tallentaa tiedostolle kolme aikaleimaa (Unix-ajan time_t-muodossa):

  • mtime on viimeinen tiedoston muutospäivä
  • ctime on "status change", mikä viittaa inode muuttamiseen
  • atime on viimeinen tiedoston avauspäivä

On huomattava että Unix ei tallenna tiedoston alkuperäistä luomispäivää kuten MS-DOS tai Windows. atime on osoittautunut ongelmalliseksi sen vaatiman levy-I/O:n vuoksi ja flash-muisteilla, joita kirjoitus levylle aikaleimojen päivittämiseksi kuluttaa.

inoden tietoja luetaan stat(2)-järjestelmäkutsulla.

Ominaisuuksia[muokkaa | muokkaa wikitekstiä]

Unixin tavasta käsitellä tiedostoja inoden kautta seuraa muutamia erikoisuuksia. Tiedostolla voi olla useita nimiä ja se voi esiintyä eri paikoissa tiedostojärjestelmässä varaamatta tilaa useaan kertaan. Tämä on Unixissa kova linkki tiedostoon.

Unix vaatii että jokaiselle inodella pitää olla ainutkertainen inoden numero (POSIX-standardissa "File serial number"). Joissain tapauksissa käyttöjärjestelmä joutuu simuloimaan tätä ominaisuutta ja keksimään inode-numerot tiedostojärjestelmissä, missä niitä ei ole (kuten MS-DOS:in FAT).

Monissa vanhemmissa tiedostojärjestelmissä inodet varataan kiinteästi, kun tiedostojärjestelmä alustetaan. Täten ne voivat loppua kesken, eikä uusia tiedostoja voi luoda, vaikka levyllä olisi tilaa. Tämän vuoksi levylle luotavien inodejen määrää voi säätää.

Esimerkiksi Linuxin ext2- ja ext3-tiedostojärjestelmissä inoden koko on 128 tavua ja oletusasetuksilla oletetaan että levyn voi tallentaa täyteen kahden kilotavun tiedostoja inodejen loppumatta.[2][3]

Tilanvaraus[muokkaa | muokkaa wikitekstiä]

inoden ylimääräistä tilaa käytetään useissa tiedostojärjestelmissä myös tilanvaraukseen. Tämä on käyttöjärjestelmän sisäinen käytäntö, eikä näitä tietoja voi välttämättä lukea järjestelmäkutsuilla.

Alkuperäinen Unix File System tallensi inoden perään osoittimet tiedostolle varattuihin lohkoihin. Näitä nimitetään suoriksi datalohkoiksi (Direct Data Blocks). Koska UFS:n toteutuksessa inodeen ei mahdu kuin 11 tai 13 osoitinta, pitää lisätilalle varata epäsuoria lohkoja (Indirect Data Blocks) ja edelleen kahdesti epäsuoria lohkoja. Epäsuorat lohkot varataan tarvittaessa, eivätkä ne vähennä inodejen määrää.[4]

Toteutus on kopioitu Linuxin ext2, ext3 -sarjan tiedostojärjestelmiin.[5]

Jossain tiedostojärjestelmissä inoden tilaan voi suoraan tallentaa dataa. Esimerkiksi XFS mahdollistaa pienen tiedoston, hakemiston ja symbolisen linkin kohteen tallentamisen suoraan inodeen (data fork), jolloin niille ei tarvitse varata levylohkoa.[6]

Lähteet[muokkaa | muokkaa wikitekstiä]

  1. https://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/stat.h.html
  2. 4. Dynamic Structures — The Linux Kernel documentation docs.kernel.org. Viitattu 19.6.2023.
  3. Inode definition by The Linux Information Project (LINFO) www.linfo.org. Viitattu 19.6.2023.
  4. https://people.eecs.berkeley.edu/~brewer/cs262/FFS.pdf
  5. https://lwn.net/Articles/187321/
  6. http://ftp.ntu.edu.tw/linux/utils/fs/xfs/docs/xfs_filesystem_structure.pdf - XFS Algorithms & Data Structures, 15.3 Data Fork