Све што сте икада желели да знате о инодима на Линуку
Линук систем датотека ослања се на иноде. Ови витални делови унутрашњег деловања система датотека често се погрешно разумеју. Погледајмо тачно шта су они и шта раде.
Елементи система датотека
По дефиницији, систем датотека треба да складишти датотеке, а садрже и директоријуме. Датотеке се чувају у директоријумима и ови директоријуми могу имати поддиректоријуме. Нешто негде мора да забележи где се све датотеке налазе у систему датотека, како се зову, којим налозима припадају, које дозволе имају и још много тога. Ове информације се зову метаподаци јер су то подаци који описују друге податке.
У Линук ект4 систему датотека, структуре инода и директорија раде заједно како би обезбедиле основни оквир који чува све метаподатке за сваку датотеку и директоријум. Они метаподатке чине доступним свима којима је потребан, било да је то језгро, корисничке апликације или Линук услужни програми, као што је нпр. лс
, стат
, и дф
.
Иноде и величина система датотека
Иако је тачно да постоји пар структура, систем датотека захтева много више од тога. Постоје хиљаде и хиљаде сваке структуре. Свака датотека и директоријум захтевају иноде, а будући да је свака датотека у директоријуму, свака датотека такође захтева структуру директоријума. Структуре именика називају се и уноси у директоријум, или „зубни картони“.
Сваки иноде има свој број, који је јединствен у систему датотека. Исти број инода може се појавити у више система датотека. Међутим, ИД система датотека и број иноде комбинују се да би направили јединствени идентификатор, без обзира на то колико је система датотека монтирано на ваш Линук систем.
Запамтите, у Линук не монтирате чврсти диск или партицију. Систем датотека монтирате на партицију, тако да је лако имати више система датотека, а да тога не знате. Ако имате више чврстих дискова или партиција на једном диску, имате више система датотека. Можда су истог типа - на пример сви ект4 - али и даље ће бити различити системи датотека.
Сви иноди се држе у једној табели. Користећи број инода, систем датотека лако израчунава помак у иноде табели у којој се налази тај иноде. Можете видети зашто „и“ у иноде означава индекс.
Променљива која садржи број иноде декларисана је у изворном коду као 32-битни, непотписани дуги цели број. То значи да је број иноде целобројна вредност са максималном величином од 2 ^ 32, што израчунава 4.294.967.295 - знатно више од 4 милијарде инода.
То је теоретски максимум. У пракси се број инода у систему датотека ект4 одређује када се систем датотека креира у заданом омјеру од једног инода по 16 КБ капацитета система датотека. Структуре директорија се креирају у ходу када се користи систем датотека, пошто се датотеке и директоријуми креирају у систему датотека.
Постоји наредба помоћу које можете да видите колико је инода у систему датотека на рачунару. Тхе -и
(инодес) опција дф
наредба му налаже да свој излаз прикаже у броју инода.
Погледаћемо систем датотека на првој партицији на првом чврстом диску, па ћемо откуцати следеће:
дф -и / дев / сда1
Излаз нам даје:
- Систем датотека: Систем датотека о коме се извештава.
- Иноде: Укупан број инода у овом систему датотека.
- Користио сам: Број инода у употреби.
- ИФрее: Број преосталих инода доступних за употребу.
- Ја користим%: Проценат употребљених инода.
- Постављена на: Тачка монтирања за овај систем датотека.
У овом систему датотека користили смо 10 посто инода. Датотеке се чувају на чврстом диску у блоковима диска. Сваки иноде показује на блокове диска који чувају садржај датотеке коју представљају. Ако имате милионе ситних датотека, можете остати без инода пре него што вам понестане простора на чврстом диску. Међутим, то је врло тежак проблем.
У прошлости су неки сервери поште који су поруке е-поште чували као засебне датотеке (што је брзо довело до великих колекција малих датотека) имали овај проблем. Међутим, када су те апликације претвориле своје базе у базе података, то је проблем решило. Просечни кућни систем неће остати без инода, што је подједнако добро, јер са системом датотека ект4 не можете додати више инода без поновне инсталације система датотека.
Да бисте видели величину блокова диска у систему датотека, можете да користите блоцкдев
команда са --гетбсз
опција (прибавите величину блока):
судо блоцкдев --гетбсз / дев / сда
Величина блока је 4096 бајтова.
Користимо -Б
Опција (величина блока) за одређивање величине блока од 4096 бајтова и проверу уобичајене употребе диска:
дф -Б 4096 / дев / сда1
Овај излаз нам показује:
- Систем датотека: Систем датотека о којем извештавамо.
- 4К-блокови: Укупан број блокова од 4 КБ у овом систему датотека.
- Користи се: Колико је 4К блокова у употреби.
- Доступан: Број преосталих 4 КБ блокова који су доступни за употребу.
- Користите%: Проценат употребљених блокова од 4 КБ.
- Постављена на: Тачка монтирања за овај систем датотека.
У нашем примеру, складиштење датотека (и складиштење инода и структура директоријума) заузело је 28 процената простора на овом систему датотека по цени од 10 процената инода, тако да смо у доброј форми.
Иноде метаподаци
Да бисмо видели број иноде датотеке, можемо да користимо лс
са -и
(иноде) опција:
лс -и геек.ткт
Број инода за ову датотеку је 1441801, тако да овај иноде садржи метаподатке за ову датотеку и, традиционално, показиваче на блокове диска у којима се датотека налази на чврстом диску. Ако је датотека фрагментирана, врло велика или обоје, неки од блокова на које указује иноде могу садржати даљње показиваче на друге блокове диска. А неки од тих других блокова диска такође могу држати показиваче на други скуп блокова диска. Ово превазилази проблем да иноде буде фиксне величине и да може да задржи коначан број показивача на блокове дискова.
Ту методу је заменила нова шема која користи „екстензије“. Они бележе почетак и крај блока сваког скупа суседних блокова који се користе за чување датотеке. Ако је датотека нефрагментирана, мораћете да сачувате само први блок и дужину датотеке. Ако је датотека фрагментирана, морате да сачувате први и последњи блок сваког дела датотеке. Ова метода је (очигледно) ефикаснија.
Ако желите да видите да ли ваш систем датотека користи показиваче или екстензије блокова диска, можете погледати у иноде. Да бисмо то урадили, користићемо дебугфс
команда са -Р
(рекуест) и проследите јој иноде датотеке која вас занима. Ово питадебугфс
да користи своју интерну наредбу „стат“ за приказ садржаја иноде. Будући да су бројеви инодеа јединствени само у систему датотека, такође морамо рећи дебугфс
систем датотека на којем се налази иноде.
Ево како би изгледала ова примера наредбе:
судо дебугфс -Р "стат" / дев / сда1
Као што је приказано доле, дебугфс
наредба извлачи информације из инода и представља нам их у мање
:
Приказане су нам следеће информације:
- Иноде: Број инода који гледамо.
- Тип: Ово је уобичајена датотека, а не директоријум или симболична веза.
- Моде: Дозволе за датотеку у осмици.
- Заставе: Индикатори који представљају различите особине или функционалност. 0к80000 је заставица „ектентс“ (више о овоме у наставку).
- Генерација: Мрежни систем датотека (НФС) ово користи када неко приступа удаљеним системима датотека преко мрежне везе као да су монтирани на локалну машину. Бројеви инода и генерације користе се као облик ручице датотеке.
- Верзија: Верзија иноде.
- Корисник: Власник датотеке.
- Група: Власник групе датотеке.
- Пројекат: Увек треба да буде нула.
- Величина: Величина датотеке.
- Датотека АЦЛ: Листа за контролу приступа датотекама. Они су дизајнирани да вам омогуће контролисани приступ људима који нису у групи власника.
- Везе: Број чврстих веза до датотеке.
- Блоцкцоунт: Количина простора на чврстом диску додељена овој датотеци дата у одељцима од 512 бајтова. Нашој датотеци је додељено осам од њих, што је 4.096 бајтова. Дакле, наша 98-бајтна датотека налази се у једном блоку диска од 4.096 бајта.
- Фрагмент: Ова датотека није фрагментирана. (Ово је застарела застава.)
- Цтиме: Време када је датотека креирана.
- Време: Време када је последњи пут приступљено овој датотеци.
- Мтиме: Време када је ова датотека последњи пут измењена.
- Цртиме: Време када је датотека креирана.
- Величина додатних иноде поља: Систем датотека ект4 увео је могућност додељивања већег инода на диску у време формата. Ова вредност је број додатних бајтова које иноде користи. Овај додатни простор се такође може користити за прилагођавање будућим захтевима за новим језгрима или за складиштење проширених атрибута.
- Контролна сума инода: Контролна сума за овај иноде, што омогућава откривање да ли је иноде оштећен.
- Ектентс: Ако се користе екстензиви (на ект4, они су подразумевано), метаподаци у вези са употребом датотека блока диска имају два броја који означавају почетни и крајњи блок сваког дела фрагментиране датотеке. Ово је ефикасније од складиштења сваког блока диска који заузима сваки део датотеке. Имамо један степен, јер се наша мала датотека налази у једном блоку диска на овом помаку блока.
Где је назив датотеке?
Сада имамо пуно информација о датотеци, али, као што сте могли приметити, нисмо добили име датотеке. Овде се појављује структура директорија. У Линуку, баш као и датотека, директоријум има иноде. Уместо да показује на блокове диска који садрже податке о датотекама, иноде директорија указују на блокове диска који садрже структуре директоријума.
У поређењу са инодеом, структура директоријума садржи ограничену количину информација о датотеци. Садржи само број иноде датотеке, име и дужину имена.
Иноде и структура директоријума садрже све што (или апликација) треба да знате о датотеци или директоријуму. Структура директоријума налази се у блоку директоријумског диска, тако да знамо директоријум у којем се датотека налази. Структура директоријума даје нам име датотеке и број иноде. Иноде нам говори све остало о датотеци, укључујући временске ознаке, дозволе и где можемо пронаћи податке о датотеци у систему датотека.
Дирецтори Инодес
Број иноде директоријума можете видети једнако лако као и датотеке.
У следећем примеру ћемо користити лс
са -л
(дуги формат), -и
(иноде) и -д
(директоријум) и погледајте радити
именик:
лс -лид посао /
Јер смо користили -д
опција (директоријум),лс
извештаје о самом директоријуму, а не о његовом садржају. Иноде за овај директоријум је 1443016.
Да поновим то за кућа
директоријум, укуцавамо следеће:
лс -лид ~
Иноде за кућа
именик је 1447510, а радити
директоријум је у матичном директоријуму. Сада, погледајмо садржај радити
именик. Уместо-д
(директоријум), користићемо -а
(све) опције. Ово ће нам показати уносе у директоријум који су обично скривени.
Куцамо следеће:
лс -лиа посао /
Јер смо користили -а
опција (све), приказују се уноси са једном (.) и двоструком тачком (..). Ови уноси представљају сам директоријум (са једном тачком) и његов надређени директоријум (са две тачке)
Ако погледате број иноде за унос са једном тачком, ви ћете рећи да је то 1443016 - исти број иноде који смо добили када смо открили број иноде за радити
именик. Такође, број иноде за унос са две тачке је исти као и број иноде за кућа
именик.
Због тога можете да користите цд ..
наредба за помицање нивоа у стаблу директорија. Исто тако, када испред имена апликације или скрипте пређете са./
, јављате љусци одакле ће покренути апликацију или скрипту.
Иноди и везе
Као што смо покрили, три компоненте морају имати добро обликовану и приступачну датотеку у систему датотека: датотеку, структуру директоријума и иноде. Датотека су подаци сачувани на чврстом диску, структура директоријума садржи име датотеке и њен број иноде, а иноде садржи све метаподатке за датотеку.
Симболичке везе су уноси система датотека који изгледају попут датотека, али то су заиста пречице које воде до постојеће датотеке или директоријума. Погледајмо како они управљају овим и како се три елемента користе за постизање овога.
Рецимо да имамо директоријум у коме су две датотеке: једна је скрипта, а друга апликација, као што је приказано доле.
Можемо користити команду лн и -с
(симболична) опција за стварање меке везе до датотеке скрипте, на следећи начин:
лс -с ми_сцрипт геек.сх
Направили смо везу до ми_сцрипт.сх
позвао геек.сх
. Можемо откуцати следеће и користитилс
да погледамо две датотеке скрипте:
лс -ли * .сх
Унос за геек.сх
појављује се у плавој боји. Први знак застава дозвола је "л" за везу и->
указује на ми_сцрипт.сх
. Све ово указује на то геек.сх
је веза.
Као што вероватно очекујете, две датотеке скрипти имају различите бројеве иноде. Оно што би можда могло да изненади је мека веза, геек.сх
, нема исте корисничке дозволе као оригинална датотека скрипте. У ствари, дозволе загеек.сх
су много либералнији - сви корисници имају пуне дозволе.
Структура директоријума за геек.сх
садржи име везе и њен иноде. Када покушате да користите везу, наводи се њен иноде, баш као и обична датотека. Иноде везе ће усмерити на блок диска, али уместо да садржи податке о садржају датотеке, блок диска садржи име оригиналне датотеке. Систем датотека преусмерава на оригиналну датотеку.
Избрисаћемо оригиналну датотеку и видети шта ће се догодити када откуцамо следеће да бисмо погледали садржајгеек.сх
:
рм ми_сцрипт.сх
мачка геек.ш
Симболична веза је прекинута, а преусмеравање не успева.
Сада куцамо следеће да бисмо креирали чврсту везу до датотеке апликације:
У посебној апликацији за геек
Да бисмо погледали иноде за ове две датотеке, откуцавамо следеће:
лс -ли
Обе изгледају као уобичајене датотеке. Ништа о томе геек-апп
указује да је то веза на начин на који лс
списак за геек.сх
јесте. Плус,геек-апп
има исте корисничке дозволе као и оригинална датотека. Међутим, оно што би могло изненадити је да обе апликације имају исти број иноде: 1441797.
Унос директоријума за геек-апп
садржи назив „геек-апп“ и број иноде, али је исти као број иноде оригиналне датотеке. Дакле, имамо два уноса система датотека са различитим именима који оба упућују на исти иноде. У ствари, било који број предмета може усмерити на исти иноде.
Укуцаћемо следеће и користити стат
програм за гледање циљне датотеке:
стат специал-апп
Видимо да две чврсте везе упућују на ову датотеку. Ово се чува у инодеу.
У следећем примеру бришемо оригиналну датотеку и покушавамо да користимо везу са тајном, сигурном лозинком:
рм специал-апп
,
Изненађујуће, апликација ради како се очекивало, али како? Ради, јер када избришете датотеку, иноде се може поново користити. Структура директоријума је означена као да има број иноде нула, а блокови диска су тада доступни за другу датотеку која ће бити ускладиштена у том простору.
Ако је број чврстих веза до иноде већи од један, број чврстих веза смањује се за један, а број иноде структуре директоријума избрисане датотеке поставља се на нулу. Садржај датотеке на чврстом диску и инодеу и даље је доступан постојећим чврстим везама.
Укуцаћемо следеће и још једном ћемо користити статистику - овај пут поново геек-апп
:
стат геек-апп
Ови детаљи су извучени из истог иноде (1441797) као и претходни стат
команда. Број веза смањен је за један.
Зато што смо дошли до једне чврсте везе до овог иноде-а, ако га избришемогеек-апп
, заиста би обрисао датотеку. Систем датотека ће ослободити иноде и означити структуру директоријума инодеом нула. Нова датотека тада може да препише складиште података на чврстом диску.
ПОВЕЗАН:Како се користи наредба стат на Линуку
Иноде Оверхеадс
то је уредан систем, али постоје режије. Да би прочитао датотеку, систем датотека мора урадити све следеће:
- Пронађите праву структуру директоријума
- Прочитајте број иноде
- Пронађите прави иноде
- Прочитајте информације о инодеу
- Пратите везе иноде или екстензије до релевантних блокова диска
- Прочитајте податке из датотеке
Неопходно је мало више скакања ако су подаци нестални.
Замислите посао за који се мора обавитилс
да бисте извршили списак датотека у великом формату. Много је напред и назад само за лс
да би добили информације потребне за генерисање резултата.
Наравно, убрзавање приступа систему датотека је разлог зашто Линук покушава да уради што више превентивног кеширања датотека. Ово у великој мери помаже, али понекад - као и код било ког система датотека - општи трошкови могу постати очигледни.
Сад ћете знати зашто.