inode - описание

Thank you for reading this post, don't forget to subscribe!

Inodes хра­нит мета­дан­ные для каж­до­го фай­ла в вашей систе­ме в виде таб­ли­цы, обыч­но рас­по­ло­жен­ной в нача­ле раз­де­ла. Они хра­нят всю инфор­ма­цию, кро­ме име­ни фай­ла и данных.

Каж­дый файл в дан­ном ката­ло­ге явля­ет­ся запи­сью с име­нем фай­ла и номе­ром индек­са. Вся осталь­ная инфор­ма­ция о фай­ле извле­ка­ет­ся из таб­ли­цы индек­сов путем ссыл­ки на номер индекса.

Номе­ра inodes уни­каль­ны на уровне раз­де­ла. Каж­дый раз­дел как соб­ствен­ная таб­ли­ца индексов.

Если у вас закон­чи­лись inode, вы не може­те созда­вать новые фай­лы, даже если у вас есть сво­бод­ное место на дан­ном разделе.

 

Что такое inode в Linux?

Inode озна­ча­ет индекс­ный узел. Хотя исто­рия не совсем уве­ре­на в этом, это самое логич­ное и луч­шее пред­по­ло­же­ние, кото­рое они при­ду­ма­ли. Рань­ше было напи­сан I-node, но дефис со вре­ме­нем потерялся.

Как напи­са­но на linfo.org :

Inode это струк­ту­ра дан­ных … … кото­рая хра­нит всю инфор­ма­цию о фай­ле, кро­ме его име­ни и его фак­ти­че­ских данных.

Inodes хра­нит мета­дан­ные о фай­ле, к кото­ро­му он отно­сит­ся. Эти мета­дан­ные содер­жат всю инфор­ма­цию об ука­зан­ном файле.

  • Раз­мер.
  • Раз­ре­ше­ние.
  • Владелец/группа.
  • Рас­по­ло­же­ние жест­ко­го диска.
  • Дата/время.
  • Любая дру­гая необ­хо­ди­мая информация.

Каж­дый исполь­зу­е­мый inod ссы­ла­ет­ся на 1 файл. Каж­дый файл име­ет 1 индекс. Ката­ло­ги, фай­лы сим­во­лов, блоч­ные устрой­ства, все это фай­лы. У каж­до­го из них есть 1 индекс.

Для каж­до­го фай­ла в ката­ло­ге есть запись, содер­жа­щая имя фай­ла и номер индек­са, свя­зан­ный с ним.

Inodes  явля­ют­ся уни­каль­ны­ми на уровне раз­де­лов. Вы може­те иметь два фай­ла с оди­на­ко­вым номе­ром inode, если они нахо­дят­ся в дру­гом раз­де­ле. Инфор­ма­ция inodes хра­нит­ся в виде таб­ли­цы в виде струк­ту­ры в стра­те­ги­че­ских частях каж­до­го раз­де­ла. Часто встре­ча­ет­ся в начале.

Как проверить inode в Linux?

Вы може­те лег­ко пере­чис­лить номер inode с помо­щью сле­ду­ю­щей команды:

 

На сле­ду­ю­щих рисун­ках пока­зан кор­не­вой ката­лог с соот­вет­ству­ю­щи­ми номе­ра­ми inodes.

Коли­че­ство inodes каж­дой фай­ло­вой систе­мы опре­де­ля­ет­ся при созда­нии фай­ло­вой систе­мы. Для боль­шин­ства поль­зо­ва­те­лей чис­ло inode по умол­ча­нию более чем достаточно.

Боль­шин­ство настро­ек по умол­ча­нию при созда­нии фай­ло­вой систе­мы созда­ет 1 inode на каж­дые 2 Кбайт про­стран­ства. Это дает мно­же­ство inodes для боль­шин­ства систем. Ско­рее все­го, вам не хва­тит места, преж­де чем закон­чат­ся inode. При необ­хо­ди­мо­сти вы може­те ука­зать, сколь­ко inodes созда­вать при созда­нии фай­ло­вой системы.

Если у вас закон­чи­лись inode, вы не смо­же­те создать новый файл. Ваша систе­ма так­же не смо­жет это сде­лать. Это не та ситу­а­ция, с кото­рой стал­ки­ва­ет­ся боль­шин­ство поль­зо­ва­те­лей, но это возможно.

Напри­мер, поч­то­вый сер­вер будет хра­нить огром­ное коли­че­ство очень малень­ких фай­лов. Мно­гие из этих фай­лов будут мень­ше 2K бай­тов. Так­же ожи­да­ет­ся посто­ян­ный рост. Поэто­му поч­то­во­му сер­ве­ру гро­зит нехват­ка inode, преж­де чем закон­чит­ся сво­бод­ное место.

В неко­то­рых фай­ло­вых систе­мах в Linux, таких как Btrfs, JFSXFS, реа­ли­зо­ва­ны дина­ми­че­ские inode. Они могут уве­ли­чить коли­че­ство доступ­ных inode, если это необходимо.

 

Как работает inode?

Когда созда­ет­ся новый файл, ему при­сва­и­ва­ет­ся номер inode  и имя фай­ла. Номер индек­са – это уни­каль­ный номер в этой фай­ло­вой систе­ме. И имя, и номер индек­са хра­нят­ся в виде запи­си в каталоге.

Когда запус­ка­е­те коман­ду ls « ls -li /», имя фай­ла и номер inode хра­ни­лось в ката­ло­ге /. Остав­ша­я­ся инфор­ма­ция поль­зо­ва­те­ля, груп­пы, прав досту­па к фай­лу , раз­ме­ра и т. д. была полу­че­на из таб­ли­цы индек­сов с исполь­зо­ва­ни­ем номе­ра индекса.

Вы може­те выве­сти инфор­ма­цию об индек­сах для каж­дой фай­ло­вой систе­мы с помо­щью этой команды:

Inodes & мягкая/жесткая связь

Мяг­кая ссыл­ка – извест­ная осо­бен­ность в Linux. Но что про­ис­хо­дит с Inodes, когда вы созда­е­те про­грамм­ную ссыл­ку? На сле­ду­ю­щем рисун­ке у нас есть ката­лог с име­нем «dir1», файл с име­нем «file1», а внут­ри «dir1» у нас есть мяг­кая ссыл­ка «slink1», кото­рая ука­зы­ва­ет на «../file1»

Теперь мы можем рекур­сив­но пере­чис­лять и пока­зы­вать инфор­ма­цию об inods.

Как и ожи­да­лось, dir1 и file1 име­ют раз­ные номе­ра inode. Но так же и мяг­кая ссыл­ка. Когда вы созда­е­те про­грамм­ную ссыл­ку, вы созда­е­те новый файл. В сво­их мета­дан­ных он ука­зы­ва­ет на цель. Для каж­дой создан­ной вами мяг­кой ссыл­ки вы исполь­зу­е­те один индекс.

После созда­ния жест­кой ссыл­ки в dir1 с помо­щью сле­ду­ю­щей команды:

 

Спи­сок номе­ров inode дает нам сле­ду­ю­щую информацию:

Вы може­те видеть, что « file1 ″ и« hlink1 »име­ют оди­на­ко­вый номер inod. По прав­де гово­ря, жест­кие ссыл­ки воз­мож­ны из-за inode. Жест­кая ссыл­ка не созда­ет новый файл. Он предо­став­ля­ет толь­ко новое имя для тех же данных.

В ста­рых вер­си­ях Linux мож­но было жест­ко свя­зать ката­лог. Было даже воз­мож­но, что­бы дан­ный ката­лог был его соб­ствен­ным роди­те­лем. Это ста­ло воз­мож­ным бла­го­да­ря реа­ли­за­ции inode. Теперь это огра­ни­че­но, что­бы поль­зо­ва­те­ли не мог­ли созда­вать очень запу­тан­ную струк­ту­ру каталогов.

 

Другие значения inode

Рабо­та inode так­же объ­яс­ня­ет, поче­му невоз­мож­но создать жест­кую ссыл­ку на дру­гую фай­ло­вую систе­му. Раз­ре­ше­ние такой зада­чи откро­ет воз­мож­ность нали­чия кон­флик­ту­ю­щих номе­ров inods. Мяг­кая ссыл­ка, с дру­гой сто­ро­ны, может быть созда­на в дру­гой фай­ло­вой системе.

Посколь­ку жест­кая ссыл­ка име­ет тот же номер inode, что и исход­ный файл, вы може­те уда­лить исход­ный файл, и дан­ные по-преж­не­му доступ­ны через жест­кую ссыл­ку. Все, что вы сде­ла­ли в этом слу­чае, это уда­ли­те одно из имен, ука­зы­ва­ю­щих на этот номер inode. Дан­ные, свя­зан­ные с этим номе­ром inode, будут оста­вать­ся доступ­ны­ми до тех пор, пока не будут уда­ле­ны все свя­зан­ные с ним имена.

Inode так­же явля­ют­ся важ­ной при­чи­ной, по кото­рой систе­ма Linux может обнов­лять­ся без пере­за­груз­ки. Это свя­за­но с тем, что один про­цесс может исполь­зо­вать файл биб­лио­те­ки, в то вре­мя как дру­гой про­цесс заме­ня­ет этот файл новой вер­си­ей. Поэто­му созда­ем новый индекс для ново­го фай­ла. Уже запу­щен­ный про­цесс будет про­дол­жать исполь­зо­вать ста­рый файл, в то вре­мя как каж­дый новый вызов при­ве­дет к исполь­зо­ва­нию новой версии.

Еще одна инте­рес­ная осо­бен­ность, кото­рая постав­ля­ет­ся с inode – это воз­мож­ность хра­нить дан­ные в самом inode. Это назы­ва­ет­ся Inlining. Пре­иму­ще­ство это­го мето­да хра­не­ния заклю­ча­ет­ся в эко­но­мии места, посколь­ку блок дан­ных не потре­бу­ет­ся. Это так­же уве­ли­чи­ва­ет вре­мя поис­ка, избе­гая боль­ше­го досту­па к дис­ку для полу­че­ния данных.

В неко­то­рых фай­ло­вых систе­мах, таких как ext4, есть опция inline_data. Когда он вклю­чен, он поз­во­ля­ет опе­ра­ци­он­ной систе­ме хра­нить дан­ные таким обра­зом. Из-за огра­ни­че­ния раз­ме­ра встав­ка рабо­та­ет толь­ко для очень малень­ких фай­лов. Ext2 и более позд­ние вер­сии часто сохра­ня­ют инфор­ма­цию о мяг­ких ссыл­ках таким обра­зом. То есть если раз­мер не более 60 байт.

 

Заклю­че­ние

Inode – это не то, с чем вы вза­и­мо­дей­ству­е­те напря­мую, но они игра­ют важ­ную роль. Если раз­дел дол­жен содер­жать мно­го очень малень­ких фай­лов, таких как поч­то­вый сер­вер, зна­ние того, что они из себя пред­став­ля­ют и как они рабо­та­ют, может спа­сти вас от мно­гих про­блем в будущем.