Lahat ng Nais Mong Malaman Tungkol sa mga inode sa Linux

Ang Linux file system ay umaasa sa mga inode. Ang mga mahahalagang piraso ng paggana ng panloob na file ay madalas na hindi maintindihan. Tingnan natin nang eksakto kung ano sila, at kung ano ang ginagawa nila.

Ang Mga Sangkap ng isang File System

Sa pamamagitan ng kahulugan, ang isang file system ay kailangang mag-imbak ng mga file, at naglalaman din ang mga ito ng mga direktoryo. Ang mga file ay nakaimbak sa loob ng mga direktoryo, at ang mga direktoryo na ito ay maaaring magkaroon ng mga subdirectory. May isang bagay, sa kung saan, kailangang maitala kung saan matatagpuan ang lahat ng mga file sa loob ng file system, kung ano ang tawag sa kanila, kung aling mga account sila kabilang, kung aling mga pahintulot ang mayroon sila, at marami pa. Ang impormasyong ito ay tinatawag na metadata sapagkat ito ay data na naglalarawan sa iba pang data.

Sa sistemang file ng Linux ext4, gumagana ang mga istraktura ng inode at direktoryo upang makapagbigay ng isang underpinning na balangkas na nag-iimbak ng lahat ng metadata para sa bawat file at direktoryo. Ginagawa nilang magagamit ang metadata sa sinumang nangangailangan nito, maging ang kernel, mga application ng gumagamit, o mga kagamitan sa Linux, tulad ng ls, stat, at df.

Mga Laki ng Inode at Laki ng File System

Habang totoo na mayroong isang pares ng mga istraktura, ang isang file system ay nangangailangan ng higit pa rito. Mayroong libo-libo at libu-libong bawat istraktura. Ang bawat file at direktoryo ay nangangailangan ng isang inode, at dahil ang bawat file ay nasa isang direktoryo, ang bawat file ay nangangailangan din ng isang istraktura ng direktoryo. Ang mga istruktura ng direktoryo ay tinatawag ding mga entry sa direktoryo o "dentries."

Ang bawat inode ay may isang inode number, na kakaiba sa loob ng isang file system. Ang parehong numero ng inode ay maaaring lumitaw sa higit sa isang file system. Gayunpaman, ang file system ID at numero ng inode ay nagsasama upang makagawa ng isang natatanging pagkakakilanlan, hindi alintana kung gaano karaming mga file system ang naka-mount sa iyong Linux system.

Tandaan, sa Linux, hindi ka makakabit ng isang hard drive o pagkahati. I-mount mo ang file system na nasa pagkahati, kaya madaling magkaroon ng maraming mga file system nang hindi napagtanto. Kung mayroon kang maraming mga hard drive o partisyon sa isang solong drive, mayroon kang higit sa isang file system. Maaari silang magkatulad na uri — lahat ng ext4, halimbawa — ngunit magkakaiba pa rin ang mga ito ng mga file system.

Ang lahat ng mga inode ay gaganapin sa isang mesa. Gamit ang isang numero ng inode, madaling kalkulahin ng file system ang offset sa talahanayan ng inode kung saan matatagpuan ang inode na iyon. Maaari mong makita kung bakit ang "i" inode ay nangangahulugang index.

Ang variable na naglalaman ng numero ng inode ay ipinahayag sa source code bilang isang 32-bit, unsigned long integer. Nangangahulugan ito na ang numero ng inode ay isang halaga ng integer na may maximum na laki ng 2 ^ 32, na kinakalkula sa 4,294,967,295 — higit sa 4 bilyong inode.

Iyon ang maximum na teoretikal. Sa pagsasagawa, ang bilang ng mga inode sa isang ext4 file system ay natutukoy kapag ang file system ay nilikha sa isang default na ratio ng isang inode bawat 16 KB ng file system na kapasidad. Ang mga istraktura ng direktoryo ay nilikha nang mabilis kapag ang file system ay ginagamit, dahil ang mga file at direktoryo ay nilikha sa loob ng file system.

Mayroong isang utos na maaari mong gamitin upang makita kung gaano karaming mga inode ang nasa isang file system sa iyong computer. Ang -ako (Inode) na pagpipilian ng df inuutusan ito ng utos upang ipakita ang output nito sa bilang ng mga inode.

Titingnan namin ang file system sa unang pagkahati sa unang hard drive, kaya nai-type namin ang sumusunod:

df -i / dev / sda1

Ang output ay nagbibigay sa amin:

  • File system: Ang system ng file na iniulat.
  • Inode: Ang kabuuang bilang ng mga inode sa file system na ito.
  • Nag-gamit ako: Ang bilang ng mga inode na ginagamit.
  • Ako libre: Ang bilang ng mga natitirang inode na magagamit para magamit.
  • Gumagamit ako%: Ang porsyento ng mga ginamit na inode.
  • Naka-mount sa: Ang mount point para sa file system na ito.

Gumamit kami ng 10 porsyento ng mga inode sa file system na ito. Ang mga file ay nakaimbak sa hard drive sa mga disk block. Ang bawat inode ay tumuturo sa mga bloke ng disk na nag-iimbak ng mga nilalaman ng file na kinakatawan nila. Kung mayroon kang milyun-milyong maliliit na mga file, maaari kang maubusan ng inode bago ka maubusan ng puwang ng hard drive. Gayunpaman, iyon ay isang napakahirap na problema upang tumakbo sa.

Noong nakaraan, ang ilang mga mail server na nakaimbak ng mga mensahe sa email bilang mga discrete file (na mabilis na humantong sa malalaking koleksyon ng maliliit na mga file) ay nagkaroon ng isyung ito. Kapag binago ng mga application na iyon ang kanilang mga dulo sa likod sa mga database, nalutas nito ang problema. Ang average na system ng bahay ay hindi mauubusan ng mga inode, na kung saan ay dahil din sa, sa ext4 file system, hindi ka maaaring magdagdag ng higit pang mga inode nang hindi muling nai-install ang file system.

Upang makita ang laki ng mga bloke ng disk sa iyong file system, maaari mong gamitin ang blockdev utos kasama ang --getbsz (Kunin ang laki ng block) na pagpipilian:

sudo blockdev --getbsz / dev / sda

Ang laki ng block ay 4096 bytes.

Gamitin natin ang -B (Laki ng pag-block) na pagpipilian upang tukuyin ang isang laki ng block na 4096 bytes at suriin ang regular na paggamit ng disk:

df -B 4096 / dev / sda1

Ipinapakita sa amin ng output na ito:

  • File system: Ang system ng file kung saan kami nag-uulat.
  • 4K-blocks: Ang kabuuang bilang ng mga 4 na bloke ng KB sa file system na ito.
  • Ginamit na: Ilan ang mga bloke ng 4K na ginagamit.
  • Magagamit: Ang bilang ng natitirang 4 KB na mga bloke na magagamit para magamit.
  • Gumamit ng%: Ang porsyento ng 4 na mga bloke ng KB na ginamit.
  • Naka-mount sa: Ang mount point para sa file system na ito.

Sa aming halimbawa, ang pag-iimbak ng file (at pag-iimbak ng mga inode at istraktura ng direktoryo) ay gumamit ng 28 porsyento ng puwang sa file system na ito, sa halagang 10 porsyento ng mga inode, kaya't nasa maayos kaming kalagayan.

Inode Metadata

Upang makita ang inode number ng isang file, maaari naming gamitin ls kasama ang -ako Opsyon na (inode):

ls -i geek.txt

Ang numero ng inode para sa file na ito ay 1441801, kaya't ang inode na ito ay humahawak ng metadata para sa file na ito at, ayon sa kaugalian, ang mga pahiwatig sa mga bloke ng disk kung saan nakatira ang file sa hard drive. Kung ang file ay nahati, napakalaki, o pareho, ang ilan sa mga bloke ng mga punto ng inode upang magkaroon ng karagdagang mga payo sa iba pang mga bloke ng disk. At ang ilan sa iba pang mga bloke ng disk ay maaari ding magkaroon ng mga payo sa isa pang hanay ng mga bloke ng disk. Nalampasan nito ang problema ng inode na isang nakapirming laki at nakakapaghawak ng isang may hangganan na bilang ng mga pointer sa mga disk block.

Ang pamamaraang iyon ay pinalitan ng isang bagong pamamaraan na gumagamit ng "mga kalakip." Itinatala nito ang pagsisimula at pagtatapos ng bloke ng bawat hanay ng magkadikit na mga bloke na ginamit upang iimbak ang file. Kung ang file ay hindi na-Fragment, kailangan mo lamang iimbak ang unang bloke at haba ng file. Kung ang file ay nahati, kailangan mong iimbak ang una at huling bloke ng bawat bahagi ng file. Ang pamamaraang ito ay (malinaw naman) mas mahusay.

Kung nais mong makita kung ang iyong file system ay gumagamit ng mga disk block pointer o extents, maaari kang tumingin sa loob ng isang inode. Upang magawa ito, gagamitin namin ang mga debugf utos kasama ang -R Opsyon (kahilingan), at ipasa ito sa inode ng file ng interes. Tanong nitomga debugf upang magamit ang panloob na "stat" na utos upang ipakita ang mga nilalaman ng inode. Dahil ang mga numero ng inode ay natatangi lamang sa loob ng isang file system, dapat din nating sabihin mga debugf ang file system kung saan naninirahan ang inode.

Narito kung ano ang magiging hitsura ng halimbawang utos na ito:

sudo debugfs -R "stat" / dev / sda1

Tulad ng ipinakita sa ibaba, ang mga debugf utos extracts ang impormasyon mula sa inode at ipinakita ito sa amin sa mas kaunti:

Ipinakita sa amin ang sumusunod na impormasyon:

  • Inode: Ang bilang ng inode na tinitingnan namin.
  • Uri: Ito ay isang regular na file, hindi isang direktoryo o simbolikong link.
  • Mode: Ang mga pahintulot ng file sa octal.
  • Mga Bandila: Mga tagapagpahiwatig na kumakatawan sa iba't ibang mga tampok o pag-andar. Ang 0x80000 ay ang "umaabot" na watawat (higit pa rito sa ibaba).
  • Henerasyon: Ginagamit ito ng isang Network File System (NFS) kapag may nag-access sa mga remote system ng file sa isang koneksyon sa network na tila naka-mount sa lokal na makina. Ang mga numero ng inode at henerasyon ay ginagamit bilang isang form ng file handle.
  • Bersyon: Ang bersyon ng inode.
  • Gumagamit: Ang may-ari ng file.
  • Pangkat: Ang may-ari ng pangkat ng file.
  • Proyekto: Dapat palaging zero.
  • Sukat: Ang laki ng file.
  • Mag-file ng ACL: Ang listahan ng kontrol sa pag-access sa file. Dinisenyo ito upang payagan kang magbigay ng kontroladong pag-access sa mga taong wala sa pangkat ng may-ari.
  • Mga link: Ang bilang ng mga matitigas na link sa file.
  • Blockcount: Ang dami ng puwang ng hard drive na inilalaan sa file na ito, na ibinigay sa 512-byte chunks. Ang aming file ay inilalaan walo sa mga ito, na 4,096 bytes. Kaya, ang aming 98-byte file ay nakaupo sa loob ng isang solong 4,096-byte disk block.
  • Fragment: Ang file na ito ay hindi pinaghiwalay. (Ito ay isang lipas na watawat.)
  • Ctime: Ang oras kung saan nilikha ang file.
  • Atime: Ang oras kung saan huling na-access ang file na ito.
  • Mtime: Ang oras kung saan huling nabago ang file na ito.
  • Crime: Ang oras kung saan nilikha ang file.
  • Laki ng sobrang mga inode na patlang: Ipinakilala ng ext4 file system ang kakayahang maglaan ng isang mas malaking in-disk inode sa oras ng format. Ang halagang ito ay ang bilang ng mga sobrang byte na ginagamit ng inode. Ang sobrang puwang na ito ay maaari ding magamit upang mapaunlakan ang mga kinakailangan sa hinaharap para sa mga bagong kernel o upang maiimbak ang mga pinalawak na katangian.
  • Inode checkum: Isang tsekum para sa inode na ito, na ginagawang posible upang tuklasin kung ang inode ay nasira.
  • Mga malalawak: Kung ginagamit ang mga extents (sa ext4, ang mga ito, bilang default), ang metadata patungkol sa paggamit ng disk block ng mga file ay may dalawang numero na nagpapahiwatig ng pagsisimula at pagtatapos ng mga bloke ng bawat bahagi ng isang fragmented na file. Ito ay mas mahusay kaysa sa pag-iimbak ng bawat disk block na kinuha ng bawat bahagi ng isang file. Mayroon kaming isang lawak dahil ang aming maliit na file ay nakaupo sa isang disk block sa block na offset.

Nasaan ang File Name?

Mayroon kaming maraming impormasyon tungkol sa file, ngunit, tulad ng napansin mo, hindi namin nakuha ang pangalan ng file. Dito naglalaro ang istraktura ng direktoryo. Sa Linux, tulad ng isang file, ang isang direktoryo ay may isang inode. Sa halip na ituro ang mga bloke ng disk na naglalaman ng data ng file, bagaman, isang direktoryo na inode ang tumuturo sa mga bloke ng disk na naglalaman ng mga istruktura ng direktoryo.

Kung ikukumpara sa isang inode, ang isang istraktura ng direktoryo ay naglalaman ng isang limitadong halaga ng impormasyon tungkol sa isang file. Hawak lamang nito ang numero ng inode ng file, pangalan, at ang haba ng pangalan.

Naglalaman ang inode at istraktura ng direktoryo ng lahat ng kailangan mong malaman (o isang application) tungkol sa isang file o direktoryo. Ang istraktura ng direktoryo ay nasa isang block disk ng direktoryo, kaya alam namin ang direktoryo ng file na nasa. Binibigyan kami ng istraktura ng direktoryo ng pangalan ng file at numero ng inode. Sinasabi sa atin ng inode ang lahat ng iba pa tungkol sa file, kabilang ang mga timestamp, pahintulot, at kung saan mahahanap ang data ng file sa file system.

Mga Inode ng Direktoryo

Maaari mong makita ang inode na bilang ng isang direktoryo kasing dali ng nakikita mo ang mga ito para sa mga file.

Sa sumusunod na halimbawa, gagamitin namin ls kasama ang -l (mahabang format), -ako (inode), at -d Mga pagpipilian sa (direktoryo), at tingnan ang trabaho direktoryo:

ls -lid work /

Dahil ginamit namin ang -d (direktoryo) na pagpipilian,ls mga ulat sa direktoryo mismo, hindi ang mga nilalaman nito. Ang inode para sa direktoryong ito ay 1443016.

Upang ulitin iyon para sa bahay direktoryo, nai-type namin ang sumusunod:

ls -lid ~

Ang inode para sa bahay ang direktoryo ay 1447510, at ang trabaho ang direktoryo ay nasa direktoryo sa bahay. Ngayon, tingnan natin ang mga nilalaman ng trabaho direktoryo Sa halip na ang-d Opsyong (direktoryo), gagamitin namin ang -a (lahat) na pagpipilian. Ipapakita nito sa amin ang mga entry sa direktoryo na karaniwang nakatago.

Na-type namin ang sumusunod:

ls -lia work /

Dahil ginamit namin ang -a (Lahat) na pagpipilian, ang solong- (.) at dobleng tuldok (..) na mga entry ay ipinapakita. Ang mga entry na ito ay kumakatawan sa direktoryo mismo (solong-tuldok), at ang direktoryo ng magulang (dobleng tuldok.)

Kung titingnan mo ang numero ng inode para sa solong-tuldok na entry, ikaw na1443016-ang parehong numero ng inode na nakuha namin noong natuklasan namin ang numero ng inode para sa trabaho direktoryo Gayundin, ang numero ng inode para sa entry na dobleng tuldok ay kapareho ng numero ng inode para sa bahay direktoryo

Iyon ang dahilan kung bakit maaari mong gamitin ang cd .. utos na ilipat ang isang antas sa puno ng direktoryo. Gayundin, kapag naunahan mo ang isang application o pangalan ng script sa./, ipinapaalam mo sa shell mula sa kung saan ilulunsad ang application o script.

Mga Inode at Link

Tulad ng nasasakop namin, kinakailangang tatlong bahagi upang magkaroon ng isang mahusay na nabuo at naa-access na file sa file system: ang file, ang istraktura ng direktoryo, at ang inode. Ang file ay ang data na nakaimbak sa hard drive, naglalaman ang istraktura ng direktoryo ng pangalan ng file at ang numero ng inode nito, at naglalaman ang inode ng lahat ng metadata para sa file.

Ang mga simbolikong link ay mga entry ng system ng file na mukhang mga file, ngunit ang mga ito ay talagang mga shortcut na tumuturo sa isang mayroon nang file o direktoryo. Tingnan natin kung paano nila ito pinamamahalaan, at kung paano ginagamit ang tatlong elemento upang makamit ito.

Sabihin nating mayroon kaming isang direktoryo na may dalawang mga file dito: ang isa ay isang script, at ang isa ay isang application, tulad ng ipinakita sa ibaba.

Maaari naming gamitin ang ln utos at ang -s (Simboliko) na pagpipilian upang lumikha ng isang malambot na link sa script file, tulad nito:

ls -s my_script geek.sh

Lumikha kami ng isang link sa my_script.sh tinawag geek.sh. Maaari naming mai-type ang sumusunod at gamitinls upang tingnan ang dalawang mga file ng script:

ls -li * .sh

Ang entry para sa geek.sh lilitaw na asul. Ang unang karakter ng mga flag ng pahintulot ay isang "l" para sa link, at ang-> itinuro sa my_script.sh . Ang lahat ng ito ay nagpapahiwatig na geek.sh ay isang link.

Tulad ng iyong inaasahan, ang dalawang mga file ng script ay may iba't ibang mga numero ng inode. Gayunpaman, kung ano ang maaaring maging mas nakakagulat ay ang malambot na link, geek.sh, walang parehong mga pahintulot ng gumagamit tulad ng orihinal na file ng script. Sa katunayan, ang mga pahintulot para sageek.sh mas liberal — lahat ng mga gumagamit ay may buong pahintulot.

Ang istraktura ng direktoryo para sa geek.sh naglalaman ng pangalan ng link at ang inode nito. Kapag sinubukan mong gamitin ang link, ang inode nito ay isinangguni, tulad ng isang regular na file. Ang link inode ay magtuturo sa isang disk block, ngunit sa halip na maglaman ng data ng nilalaman ng file, naglalaman ang disk block ng pangalan ng orihinal na file. Ang file system ay nagre-redirect sa orihinal na file.

Tatanggalin namin ang orihinal na file, at makikita kung ano ang mangyayari kapag na-type namin ang sumusunod upang matingnan ang mga nilalaman nggeek.sh:

rm my_script.sh
pusa geek.sh

Nasira ang simbolikong link, at nabigo ang pag-redirect.

Nai-type namin ngayon ang sumusunod upang lumikha ng isang mahirap na link sa file ng application:

ln special-app geek-app

Upang tingnan ang mga inode para sa dalawang file na ito, nai-type namin ang sumusunod:

ls -li

Parehas ang hitsura ng mga regular na file. Wala naman geek-app ipinapahiwatig na ito ay isang link sa paraan ng ls listahan para sa geek.sh ginawa Dagdag pa,geek-app ay may parehong mga pahintulot ng gumagamit bilang ang orihinal na file. Gayunpaman, kung ano ang maaaring maging nakakagulat ay ang parehong mga application ay may parehong numero ng inode: 1441797.

Ang direktoryo ng entry para sa geek-app naglalaman ng pangalang "geek-app" at isang numero ng inode, ngunit pareho ito sa bilang ng inode ng orihinal na file. Kaya, mayroon kaming dalawang mga entry sa system ng file na may iba't ibang mga pangalan na parehong tumuturo sa parehong inode. Sa katunayan, ang anumang bilang ng mga item ay maaaring ituro sa parehong inode.

I-type namin ang sumusunod at gagamitin ang stat programa upang tingnan ang target na file:

stat special-app

Nakita namin na ang dalawang matitigas na link ay tumuturo sa file na ito. Iniimbak ito sa inode.

Sa sumusunod na halimbawa, tinatanggal namin ang orihinal na file at subukang gamitin ang link sa isang lihim, ligtas na password:

rm special-app
./geek-app correcthorsebatterystaple

Nakakagulat, tumatakbo ang application tulad ng inaasahan, ngunit paano? Gumagana ito dahil, kapag tinanggal mo ang isang file, ang inode ay malayang magagamit muli. Ang istraktura ng direktoryo ay minarkahan bilang pagkakaroon ng isang inode na bilang ng zero, at ang mga bloke ng disk pagkatapos ay magagamit para sa isa pang file na maiimbak sa puwang na iyon.

Kung ang bilang ng mga matitigas na link sa inode ay mas malaki sa isa, subalit, ang bilang ng matapang na link ay nabawasan ng isa, at ang bilang ng inode ng istraktura ng direktoryo ng tinanggal na file ay nakatakda sa zero. Ang mga nilalaman ng file sa hard drive at inode ay magagamit pa rin sa umiiral na mga hard link.

I-type namin ang sumusunod at gagamitin muli ang stat — sa oras na ito geek-app:

stat geek-app

Ang mga detalyeng ito ay hinila mula sa parehong inode (1441797) tulad ng naunang stat utos Ang bilang ng link ay nabawasan ng isa.

Dahil bumaba kami sa isang matapang na link sa inode na ito, kung tatanggalin namingeek-app, tatanggalin nito ang file. Ang file system ay magpapalaya sa inode at markahan ang istraktura ng direktoryo na may isang inode na zero. Maaaring mapagsama ng isang bagong file ang imbakan ng data sa hard drive.

KAUGNAYAN:Paano Magamit ang stat Command sa Linux

Inode Overheads

ito ay isang maayos na sistema, ngunit may mga overhead. Upang mabasa ang isang file, kailangang gawin ng system ng file ang lahat ng mga sumusunod:

  • Hanapin ang tamang istraktura ng direktoryo
  • Basahin ang numero ng inode
  • Hanapin ang tamang inode
  • Basahin ang inode na impormasyon
  • Sundin ang alinman sa mga inode link o ang mga umaabot sa mga nauugnay na mga bloke ng disk
  • Basahin ang data ng file

Medyo higit pang paglukso sa paligid ay kinakailangan kung ang data ay hindi sigurado.

Isipin ang gawaing dapat gawinls upang maisagawa ang isang mahabang format ng listahan ng file ng maraming mga file. Maraming pabalik-balik para lang sa ls upang makuha ang impormasyong kinakailangan nito upang makabuo ng output nito.

Siyempre, ang pagpapabilis ng pag-access ng file system ay kung bakit sinusubukan ng Linux na gawin ang mas paunang pag-cache ng file hangga't maaari. Nakatutulong ito nang malaki, ngunit kung minsan — tulad ng anumang file system — ang mga overhead ay maaaring maging maliwanag.

Ngayon malalaman mo kung bakit.


$config[zx-auto] not found$config[zx-overlay] not found