Кіріспе
Файл жүйесіндегі нысанды сипаттайтын дерек құрылымы және нысан деректерінің дискілік блоктарының орналасуы. Инод (индекстік түйін) – Unix жүйесіндегі файл немесе каталог сияқты файл жүйесі нысанын сипаттайтын дерек құрылымы. Әрбір инод нысанның атрибуттары мен деректерінің дискілік блоктарының орналасуын сақтайды. Файл жүйесі нысанының атрибуттарына метадеректер (соңғы өзгертілген, қол жеткен, түзетілген уақыттар), сондай-ақ иесі және рұқсат туралы деректер кіруі мүмкін. Каталог – бұл оларға тағайындалған аттары бар инодтар тізімі. Бұл тізімде өзіне, ата-анасына және барлық балама нысандарына жазбалар бар.
The inode (index node) is a data structure in a Unix style file system that describes a file system object such as a file or a directory. Each inode stores the attributes and disk block locations of the object's data. File system object attributes may include metadata (times of last change, access, modification), as well as owner and permission data. A directory is a list of inodes with their assigned names. The list includes an entry for itself, its parent, and each of its children.
Этимология
Linux ядросының пошталық тізімінде "inode" атауындағы "i" әрпінің себебіне қатысты белгісіздік болды. 2002 жылы бұл сұрақ Unix пионері Деннис Ричиге жеткізілді, ол былай деп жауап берді: 1978 жылғы Ричи мен Кен Томпсонның мақаласы "inode" сөзінің этимологиялық түбірі "индекс" екенін көрсетеді. Олар былай деп жазды: Сонымен қатар, Морис Бах inode сөзінің "индекс түйіні" терминінің қысқартылған түрі екенін және UNIX жүйесі туралы әдебиетте кеңінен қолданылатынын айтты.
A 1978 paper by Ritchie and Ken Thompson bolsters the notion of "index" being the etymological origin of inodes. They wrote: Additionally, Maurice J. Bach wrote that the word inode "is a contraction of the term index node and is commonly used in literature on the UNIX system".
POSIX- инодтың сипаттамасы
POSIX стандарты файлдық жүйенің мінез-құлқына талап қояды, ол дәстүрлі UNIX файлдық жүйелерінің күшті әсеріне тап болады. Инод – «файлдың сериялық нөмірі» деп аталады, ол файл үшін файлдық жүйеде бірегей идентификатор ретінде анықталады. Бұл файлдың сериялық нөмірі, файлды қамтитын құрылғының идентификаторымен бірге, бүкіл жүйеде файлды бірегей түрде анықтайды, оны stat жүйелік шақыру арқылы алуға болады: құрылғы идентификаторы (бұл файлды қамтитын құрылғыны анықтайды, яғни сериялық нөмірдің бірегейлігінің шеңбері). Файлдың сериялық нөмірлері. Файл түрін және файл иесінің, оның тобының және басқалардың файлға қалай қол жеткізуін анықтайтын файл режимі. Инодқа қанша қатты сілтеме көрсетілетінін көрсететін сілтемелер саны. Файл иесінің пайдаланушы идентификаторы. Файлдың топ идентификаторы. Егер бұл құрылғы файлы болса, файлдың құрылғы идентификаторы. Файлдың байттармен өлшемi. Инодтың соңғы өзгертілген уақыты (инодты өзгерту уақыты), файл мазмұнының соңғы өзгертілген уақыты (өзгерту уақыты) және соңғы қол жеткізілген уақыты (қол жеткізу уақыты) туралы ақпаратты сақтайтын уақыт белгілері. I/O блогының қалаулы өлшемі. Бұл файлға бөлінген блоктардың саны.
Device ID (this identifies the device containing the file; that is, the scope of uniqueness of the serial number). File serial numbers. The file mode which determines the file type and how the file's owner, its group, and others can access the file. A link count telling how many hard links point to the inode. The User ID of the file's owner. The Group ID of the file. The device ID of the file if it is a device file. The size of the file in bytes. Timestamps telling when the inode itself was last modified (, inode change time), the file content last modified (, modification time), and last accessed (, access time). The preferred I/O block size. The number of blocks allocated to this file.
Көп атаулы файлдар мен қатты сілтемелер
Файлдардың бірнеше атауы болуы мүмкін. Егер бірнеше атау бір inode-қа қатты сілтеме жасаса, онда бұл атаулар эквивалентті болып саналады; яғни, алғаш құрылған атаудың ешқандай артықшылығы жоқ. Бұл символдық сілтемелерден өзгеше, себебі символдық сілтемелер inode (нөміріне) емес, бастапқы атауға тәуелді болады.
Инодтың тұрақтылығы және байланысы жоқ файлдар
Инодтың сілтемелері болмауы мүмкін. Сілтемесіз инод – файл жүйесінде оған бағытталатын ешқандай каталог жазбасы немесе жол болмаған файлды білдіреді. Өшірілген немесе оған сілтеме жасайтын каталог жазбалары жоқ файл «байланысы үзілген» файл деп аталады. Мұндай файлдар файл жүйесінен алынып тасталады, бұл дискідегі бос орынды қайта пайдалануға мүмкіндік береді. Байланысы үзілген файлтан босатылған ресурстар (дискідегі орын және блоктар) бөлінбей немесе файл жүйесі өзгертілмейінше файл жүйесінде сақталады. Байланысы үзілген файл файл жүйесінде көрінбейтін болса да, оның жойылуы файлға қол жеткізе алатын барлық процестер оны пайдалануын аяқтағанға дейін кейінге шегеріледі, соның ішінде оларды іске қосатын процестер ашық ұстайтын орындалатын файлдар да осыған жатады.
Инод нөмірін түрлендіру және файлдар каталогының жолын іздеу
Әдетте, ашық файлдан оны ашу үшін қолданылған файл атауын анықтау мүмкін емес. Бағдарлама файлды ашқанда, операциялық жүйе файл атауын inode нөміріне түрлендіріп, файл атауын жойып жібереді. Осының салдарынан, процестің ағымдағы жұмыс каталогын анықтайтын және оған ұқсас функциялар файл атауына тікелей қол жеткізе алмайды. Бұл функциялар қазіргі каталогтан бастап, оның жоғарғы каталогына, содан кейін оның жоғарғы каталогына және т.б. дейін іздейді. Әр деңгейде функция, жаңа ғана көтерілген каталогтың inode-ымен сәйкес келетін каталог жазбасын іздейді. Бала каталогтың inode-ы әлі де оның аталық каталогында жазба ретінде сақталып тұрғандықтан, бұл функцияға ағымдағы жұмыс каталогының абсолютті жолын қайта құруға мүмкіндік береді. Кейбір операциялық жүйелер осы операцияны жылдамдату үшін қосымша ақпаратты сақтайды. Мысалы, Linux VFS-де каталогты кэшке енгізу, сондай-ақ dentry немесе dcache деп аталатын, каталогты сілтемелер туралы ақпаратты RAM-да сақтау арқылы файлдық жүйенің операцияларын жылдамдату үшін ядро қолданатын кэш жазбалары бар.
Каталогты қатты байланыстырудың тарихи мүмкіндігі
Тарихи тұрғыдан алғанда, каталогтарға қатты сілтеме жасау мүмкін болды. Бұл каталог құрылымын бағытталған ациклді графикке қарама-қайшы, ерікке келген бағытталған графқа айналдырды. Тіпті каталог өзінің ата-анасы болуы да мүмкін еді. Қазіргі заманғы жүйелер мұндай шатастыратын жағдайға көбінесе тыйым салады, бірақ түбірдің (root) ата-анасы түбір ретінде қалады. Бұл тыйымға ең маңызды ерекшелік Mac OS X (10.5 нұсқасы және одан жоғары) жүйесінде кездеседі, ол супер пайдаланушыға каталогтардың қатты сілтемелерін жасауға рұқсат береді.
Инодтар санының тұрақтылығы және Unix емес файл жүйелері
Файл бір файлдық жүйедегі басқа каталогқа көшірілгенде немесе дискіні фрагментациялау оның физикалық орнын өзгерткенде, файлдың inode нөмірі өзгеріссіз қалады. Бұл ерекшелік файлды оқу немесе жазу операциялары кезінде де жылжытуға немесе атауын өзгертуге мүмкіндік береді, соның арқасында қолжетімділік үздірілмейді. Бұл мүмкіндік – файлдың метадеректері мен дерек блоктарының орналасуы файлдың атауы өзгертілгеніне немесе жылжытылғанына қарамастан, орталық дерек құрылымында сақталады. FAT және оның туындылары сияқты көптеген Unix емес файлдық жүйелерде мұны толыққанды қайта жасау мүмкін емес, себебі оларда файлдың каталог жазбасы мен деректері бір уақытта көшірілген кезде осы өзгермейтін қасиетті сақтау механизмі жоқ. Осы файлдық жүйелерде файлды жылжыту немесе атауын өзгерту файлды көрсететін дерек құрылымында маңызды өзгерістерге алып келуі мүмкін, ал жүйе Unix сияқты жүйелерде inode-тар жасайтындай файлдың дерек блоктарының орналасуы мен метадеректерінің жеке, орталық тізімін сақтамайды.
Кітапханаларды инод файл жүйелерімен оңай орнату
inode файлдық жүйелер жұмыс істеп тұрған процестің кітапхана файлына басқа процесс сол файлды алмастырған кезде де қатынауын жалғастыруға мүмкіндік береді. Бұл операция атомдық түрде орындалуы керек, яғни ол басқа процестерге көрінетін аралық күйсіз, толығымен аяқталған немесе мүлдем орындалмаған бір операция ретінде көрінуі тиіс. Алмастыру кезінде жаңа кітапхана файлы үшін жаңа inode құрылады, бұл толығымен жаңа байланыстыруды қамтамасыз етеді. Кейіннен, осы кітапханаға қатынау туралы болашақ сұраулар жаңа орнатылған нұсқаны алады. Операциялық жүйе файлды алмастырып (жаңа inode құрып) жатқанда, ол inode-ты және мүмкін, оны қамтитын каталогты құлыптап қояды. Бұл жаңарту операциясы кезінде басқа процестердің файлды (inode-ты) оқуына немесе жазуына жол бермейді, осылайша деректердің сәйкессіздігіне немесе зақымдануына жол бермейді. Жаңарту операциясы аяқталғаннан кейін құлып ашылады. Кез келген процестің файлға inode арқылы жасаған кез келген қатынасы енді кітапхананың жаңа нұсқасына бағытталатын болады. Осылайша, кітапхананы басқа процесс пайдаланып жатқанда да жаңартуларды орындау мүмкін болады. Бұл механизмнің маңызды артықшылығы – қазіргі уақытта қолданылып жатқан кітапханаларды алмастыру үшін жүйені қайта іске қосу қажеттілігін жояды. Нәтижесінде жүйелер бағдарламалық кітапханаларды жұмыс істеп тұрған процестерді немесе операцияларды тоқтатпай, үздіксіз жаңарта немесе жаңарта алады.
Инодтық тозу және шешімдер әлеуеті
Файл жүйесі құрылған кезде, кейбір файл жүйелері белгілі бір мөлшерде инодтарды бөліп алады. Бұл, файл жүйесінде бос орын болса да, инодтардың таусылуына әкелуі мүмкін. Мұндай жағдай көбінесе көптеген кішкентай файлдар бар сценарийлерде, мысалы электрондық пошта хабарламаларын сақтайтын серверлерде кездеседі, себебі әрбір файл, оның мөлшеріне қарамастан, жеке инодты қажет етеді. Басқа файл жүйелері бұл шектеуден динамикалық инодтарды бөлу арқылы сақталады. Динамикалық инодтарды бөлу, файл жүйесін құру кезінде белгіленген тұрақты санға тәуелді болмай, қажет болған жағдайда көбірек инодтар құруға мүмкіндік береді. Бұл, жаңа файлдар мен каталогтар үшін қолжетімді инодтар санын арттыру арқылы файл жүйесін "өсіруге" және инодтардың таусылуы мәселесін болдырмауға мүмкіндік береді.
Ішіп қалау
Өте кішкентай файлдарды орынды үнемдеу (деректер блогы қажет емес) және іздеу уақытын қысқарту (дискіге қосымша кіру қажет емес) үшін инодтың өзінде сақтаудың мәні болуы мүмкін. Бұл файлдық жүйенің инлайнинг деп аталатын мүмкіндігі. Қазіргі заманғы файлдық жүйелерді пайдаланғанда инод пен файл деректерінің қатаң ажыратылуын болжау мүмкін емес. Егер файлдың деректері деректерге сілтемелер үшін бөлінген орынға сыйып кетсе, бұл орынды тиімді пайдалануға болады. Мысалы, ext2 және оның кейінгі нұсқалары символдық сілтемелердің (әдетте файл атаулары) деректерін осылай сақтайды, егер деректер 60 байттан аспаса ("жылдам символды сілтемелер"). Ext4-те файлдық жүйені құру кезінде қосылса, ext4-ке инлайнинг жасауға мүмкіндік беретін "inline data" деп аталатын файлдық жүйе опциясы бар. Инодтың көлемі шектеулі болғандықтан, бұл мүмкіндік тек өте кішкентай файлдар үшін ғана қолданылады.
Unix емес жүйелерде
NTFS-те файлдарды B ағашында сақтайтын негізгі файл кестесі (MFT) бар. Әрбір жазбада "fileID" болады, ол inode нөміріне ұқсас, бұл жазбаны бірегей түрде анықтайды. Үш уақыт белгісі, құрылғы идентификаторы, атрибуттар, сілтемелер саны және файл көлемі жазбада кездеседі, бірақ POSIX-тен айырмашылығы, рұқсаттар басқа API арқылы беріледі. Дискідегі құрылымы күрделірек. Ескі FAT файлдық жүйелерінде мұндай кесте болмағандықтан, қатты сілтемелер жасау мүмкін болмады. NTFS MFT жазбасына кішкентай файлдарды тікелей ендіру мүмкіндігін де ұсынады. ReFS жүйесінде MFT-ге ұқсас кесте бар. ReFS файл ID-сі 128 биттік, ал бұл кеңейту бастапқыда 64 биттік файл ID-сі болған NTFS-ке де қосылды. Cluster Shared Volumes және SMB 3.0 жүйелерінде де stat сияқты API қолданылуы мүмкін, сондықтан оларда да файл ID-сінің ұқсас тұжырымдамасы бар болады.