Rud éigin faoi inode

Go tréimhsiúil, chun bogadh go dtí an Lárionad Dáilte, déanaim agallamh le cuideachtaí móra éagsúla, go príomha i St Petersburg agus i Moscó, le haghaidh post DevOps. Thug mé faoi deara go gcuireann go leor cuideachtaí (cuideachtaí maith go leor, mar shampla Yandex) dhá cheist den chineál céanna:

  • cad é inode;
  • cad iad na fáthanna ar féidir leat earráid scríobh diosca a fháil (nó mar shampla: cén fáth go n-imeodh tú as spás diosca, is é an bunús atá leis).

Mar a tharlaíonn go minic, bhí mé cinnte go raibh aithne mhaith agam ar an ábhar seo, ach chomh luath agus a thosaigh mé ag míniú, tháinig bearnaí san eolas chun solais. Chun mo chuid eolais a chórasú, na bearnaí a líonadh agus gan náire a chur orm féin a thuilleadh, tá an t-alt seo á scríobh agam, b'fhéidir go mbeidh sé úsáideach do dhuine eile.

Tosóidh mé ón mbun, i.e. ó thiomáint crua (cuirfimid thiomáineann flash, SSDs agus rudaí nua-aimseartha eile ar shiúl; mar shampla, déanaimis machnamh ar aon sean-thiomáint 20 nó 80 gig, ós rud é go bhfuil méid an bhloic ann 512 bytes).

Níl a fhios ag an tiomáint crua conas aghaidh a thabhairt ar a bheart spáis trí bheart; Tosaíonn bloc-uimhriú ó 0. (LBA a thugtar air seo, sonraí anseo: ru.wikipedia.org/wiki/LBA)

Rud éigin faoi inode

Mar is léir ón bhfigiúr, d'ainmnigh mé bloic LBA mar an leibhéal HDD. Dála an scéil, is féidir leat a fheiceáil cén blocmhéid atá ag do dhiosca mar seo:

root@ubuntu:/home/serp# blockdev --getpbsz /dev/sdb
512

Is críochdheighilt é an leibhéal thuas, ceann don diosca iomlán (arís le haghaidh simplíochta). Is minic a úsáidtear dhá chineál marcála críochdheighilte: msdos agus gpt. Dá réir sin, is seanfhormáid é msdos a thacaíonn le dioscaí suas le 2Tb, is formáid nua é gpt atá in ann aghaidh a thabhairt ar suas le 1 zettabyte de 512 bloc beart. Inár gcás, tá deighilt de chineál msdos againn, mar atá le feiceáil ón bhfigiúr, tosaíonn an críochdheighilt le bloc Uimh. 1, agus úsáidtear nialas don MBR.

Sa chéad dheighilt chruthaigh mé córas comhaid ext2, is é a mhéid bloc réamhshocraithe ná 4096 bytes, a léirítear san fhigiúr freisin. Is féidir leat féachaint ar bhloc an chórais comhad mar seo:

root@ubuntu:/home/serp# tune2fs -l /dev/sdb1
tune2fs 1.42.9 (4-Feb-2014)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          a600bf40-f660-41f6-a3e6-96c303995479
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              65536
Block count:              261888
Reserved block count:     13094
Free blocks:              257445
Free inodes:              65525
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      63
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Filesystem created:       Fri Aug  2 15:02:13 2019
Last mount time:          n/a
Last write time:          Fri Aug  2 15:02:14 2019
Mount count:              0
Maximum mount count:      -1
Last checked:             Fri Aug  2 15:02:13 2019
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256
Required extra isize:     28
Desired extra isize:      28
Default directory hash:   half_md4
Directory Hash Seed:      c0155456-ad7d-421f-afd1-c898746ccd76

Is é an paraiméadar a theastaíonn uainn ná “Méid an bhloc”.

Anois is é an chuid suimiúil conas an comhad /home/serp/testfile a léamh? Tá comhad comhdhéanta de bhloc amháin nó níos mó de chóras comhaid ina stóráiltear a shonraí. A fhios agam an t-ainm comhaid, conas é a aimsiú? Cé na bloic ba chóir dom a léamh?

Seo an áit a mbíonn ionóid áisiúil. Tá "tábla" sa chóras comhaid ext2fs ina bhfuil faisnéis maidir le gach inóid. Socraítear líon na n-ionóid i gcás ext2fs agus an córas comhaid á chruthú. Breathnaímid ar na huimhreacha riachtanacha sa pharaiméadar “Comhaireamh Inode” den aschur tune2fs, i.e. tá 65536 píosa againn. Tá an fhaisnéis a theastaíonn uainn san inode: liosta de bhlocanna córas comhaid don chomhad atá á lorg againn. Conas an uimhir inóide a fháil do chomhad tugtha?

Tá an t-ainm comhfhreagrach agus an uimhir inóid san eolaire, agus is cineál speisialta comhaid é eolaire in ext2fs, i.e. tá a uimhir inóide féin aige freisin. Chun an ciorcal fí seo a bhriseadh, sannadh uimhir inóide “seasta” “2” don fhréamh-eolaire. Breathnaímid ar a bhfuil in inóid uimhir 2:

root@ubuntu:/# debugfs /dev/sdb1
debugfs 1.42.9 (4-Feb-2014)
debugfs:  stat <2>

Inode: 2   Type: directory    Mode:  0755   Flags: 0x0
Generation: 0    Version: 0x00000000:00000002
User:     0   Group:     0   Size: 4096
File ACL: 0    Directory ACL: 0
Links: 3   Blockcount: 8
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x5d43cb51:16b61bcc -- Fri Aug  2 16:34:09 2019
 atime: 0x5d43c247:b704301c -- Fri Aug  2 15:55:35 2019
 mtime: 0x5d43cb51:16b61bcc -- Fri Aug  2 16:34:09 2019
crtime: 0x5d43b5c6:00000000 -- Fri Aug  2 15:02:14 2019
Size of extra inode fields: 28
BLOCKS:
(0):579
TOTAL: 1

Mar a fheiceann tú, tá an t-eolaire a theastaíonn uainn i mbloc uimhir 579. Inti gheobhaidh muid uimhir nód an fhillteáin baile, agus mar sin de síos an slabhra go dtí go bhfeicimid san eolaire serp uimhir nód an chomhaid iarrtha. Más rud é go tobann tá duine ag iarraidh a sheiceáil an bhfuil an uimhir ceart agus an bhfuil an fhaisnéis riachtanach ann, níl sé deacair. Déanaimid:

root@ubuntu:/# dd if=/dev/sdb1 of=/home/serp/dd_image bs=4096 count=1 skip=579
1+0 records in
1+0 records out
4096 bytes (4,1 kB) copied, 0,000184088 s, 22,3 MB/s
root@ubuntu:/# hexdump -c /home/serp/dd_image

San aschur is féidir leat ainmneacha na gcomhad a léamh san eolaire.

Mar sin déanaim teacht ar an bpríomhcheist: “cén fáth a bhféadfadh earráid taifeadta tarlú?”

Ar ndóigh, tarlóidh sé seo mura bhfuil aon bhloc saor in aisce fágtha sa chóras comhaid. Cad is féidir a dhéanamh sa chás seo? Chomh maith le “scrios aon rud nach bhfuil gá leis”, ba cheart duit cuimhneamh go bhfuil a leithéid de rud ann agus “Comhaireamh bloic in áirithe” i gcórais comhaid ext2,3 agus 4. Má fhéachann tú ar an liostú thuas, tá "13094" bloic den sórt sin againn. Is bloic iad seo nach féidir a scríobh ach ag an úsáideoir fréimhe. ach más gá duit an cheist a réiteach go tapa, mar réiteach sealadach is féidir leat iad a chur ar fáil do gach duine, agus beidh roinnt spáis saor in aisce mar thoradh air:

root@ubuntu:/mnt# tune2fs -m 0 /dev/sdb1
tune2fs 1.42.9 (4-Feb-2014)
Setting reserved blocks percentage to 0% (0 blocks)

Iad siúd. de réir réamhshocraithe, tá 5% den spás diosca agat nach bhfuil ar fáil le haghaidh scríbhneoireachta, agus mar gheall ar an méid dioscaí nua-aimseartha, is féidir leis na céadta ghigibheart a bheith i gceist leis seo.

Cad eile a d’fhéadfadh a bheith ann? Is féidir freisin go bhfuil bloic saor in aisce, ach níl aon nóid níos mó ann. Tarlaíonn sé seo de ghnáth má tá roinnt comhad agat ar do chóras comhaid atá níos lú ná blocmhéid an chórais comhaid. Ag cur san áireamh go gcaitear 1 inode ar 1 chomhad nó eolaire, agus san iomlán ní mór dúinn (do chóras comhaid ar leith) 65536 - tá an scéal níos mó ná réalaíoch. Is féidir é seo a fheiceáil go soiléir ó aschur an ordaithe df:

serp@ubuntu:~$ df -hi
Filesystem     Inodes IUsed IFree IUse% Mounted on
udev             493K   480  492K    1% /dev
tmpfs            493K   425  493K    1% /run
/dev/xvda1       512K  240K  273K   47% /
none             493K     2  493K    1% /sys/fs/cgroup
none             493K     2  493K    1% /run/lock
none             493K     1  493K    1% /run/shm
none             493K     2  493K    1% /run/user
/dev/xvdc1       320K  4,1K  316K    2% /var
/dev/xvdb1        64K   195   64K    1% /home
/dev/xvdh1       4,0M  3,1M  940K   78% /var/www
serp@ubuntu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            2,0G  4,0K  2,0G   1% /dev
tmpfs           395M  620K  394M   1% /run
/dev/xvda1      7,8G  2,9G  4,6G  39% /
none            4,0K     0  4,0K   0% /sys/fs/cgroup
none            5,0M     0  5,0M   0% /run/lock
none            2,0G     0  2,0G   0% /run/shm
none            100M     0  100M   0% /run/user
/dev/xvdc1      4,8G  2,6G  2,0G  57% /var
/dev/xvdb1      990M  4,0M  919M   1% /home
/dev/xvdh1       63G   35G   25G  59% /var/www

Mar atá le feiceáil go soiléir ar an deighilt /var/www, athraíonn líon na mbloic saor in aisce sa chóras comhaid agus líon na nóid saor in aisce go mór.

Ar eagla go n-imeoidh tú as ionóid, ní inseoidh mé geasa duit, mar... níl aon cheann (má tá mé mícheart, cuir in iúl dom). Mar sin, maidir le landairí ina n-iolraíonn comhaid bheaga, ba cheart duit an córas comhaid a roghnú go ciallmhar. Mar shampla, ní féidir deireadh a chur le hionóidí btrfs, mar gheall ar Cruthaítear cinn nua go dinimiciúil más gá.

Foinse: will.com

Add a comment