Okuthile mayelana ne-inode

Ngezikhathi ezithile, ukuze ngithuthele eCentral Distribution Centre, ngixoxisana ezinkampanini ezinkulu ezihlukahlukene, ikakhulukazi eSt. Petersburg naseMoscow, ngesikhundla se-DevOps. Ngiqaphele ukuthi izinkampani eziningi (izinkampani eziningi ezinhle, isibonelo i-Yandex) zibuza imibuzo emibili efanayo:

  • yini i-inode;
  • yiziphi izizathu ongathola iphutha lokubhala idiski (noma isibonelo: kungani ungase uphelelwe isikhala sediski, ingqikithi iyafana).

Njengoba kuvame ukwenzeka, ngangiqiniseka ukuthi ngangisazi kahle lesi sihloko, kodwa lapho nje ngiqala ukuchaza, kwavela izikhala olwazini. Ukuze ngihlele ulwazi lwami, ngigcwalise izikhala futhi ngingaphinde ngibe namahloni, ngibhala lesi sihloko, mhlawumbe sizoba usizo komunye umuntu.

Ngizoqala phansi, i.e. kusuka ku-hard drive (sizolahla ama-flash drives, ama-SSD nezinye izinto zesimanje; isibonelo, ake sicabangele noma iyiphi i-20 noma i-80 gig drive endala, njengoba usayizi webhulokhi kukhona amabhayithi angu-512).

I-hard drive ayazi ukuthi ingabhekana kanjani ne-byte yesikhala sayo; ihlukaniswe ngokwemibandela ngamabhulokhi. Izinombolo zamabhulokhi ziqala ku-0. (Lokhu kubizwa nge-LBA, imininingwane lapha: ru.wikipedia.org/wiki/LBA)

Okuthile mayelana ne-inode

Njengoba kungabonwa emfanekisweni, ngiqoke amabhlogo e-LBA njengezinga le-HDD. Ngendlela, ungabona ukuthi iyiphi i-block size disk yakho efana nalokhu:

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

Izinga elingenhla liyi-partition, eyodwa yediski yonke (futhi ukuze kube lula). Imvamisa, kusetshenziswa izinhlobo ezimbili zomaka wokuhlukanisa: i-msdos ne-gpt. Ngokufanelekile, i-msdos ifomethi endala esekela amadiski afika ku-2Tb, i-gpt iyifomethi entsha ekwazi ukubhekana nokufika ku-1 zettabyte yamabhulokhi angama-512 byte. Esimweni sethu, sinokuhlukaniswa kohlobo lwe-msdos, njengoba kungabonakala kumfanekiso, ukuhlukaniswa kuqala nge-block No. 1, kuyilapho i-zero isetshenziselwa i-MBR.

Engxenyeni yokuqala ngidale isistimu yefayela ye-ext2, usayizi wayo we-block ozenzakalelayo ungama-byte angu-4096, obuye aboniswe esithombeni. Ungabuka usayizi webhulokhi yesistimu yefayela kanje:

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

Ipharamitha esiyidingayo ithi “Block size”.

Manje ingxenye ethokozisayo ukuthi ulifunda kanjani ifayela /home/serp/testfile? Ifayela liqukethe ibhulokhi yesistimu yefayela eyodwa noma amaningi lapho idatha yalo igcinwa khona. Ukwazi igama lefayela, ungalithola kanjani? Imaphi amabhlogo okufanele ngiwafunde?

Yilapho ama-inode efika khona. Isistimu yefayela ye-ext2fs ine "ithebula" eliqukethe ulwazi lwawo wonke ama-inode. Inombolo yama-inode esimweni se-ext2fs isethwe lapho kwakhiwa isistimu yefayela. Sibheka izinombolo ezidingekayo kupharamitha "yesibalo se-Inode" yokuphuma kwe-tune2fs, i.e. sinezicucu ezingu-65536. I-inode iqukethe ulwazi esiludingayo: uhlu lwamabhulokhi wesistimu yefayela lefayela esilifunayo. Ungayithola kanjani inombolo ye-inode yefayela elinikeziwe?

Igama elihambisanayo nenombolo ye-inode ziqukethwe kusiqondisi, futhi uhla lwemibhalo ku-ext2fs wuhlobo olukhethekile lwefayela, i.e. futhi inenombolo yayo ye-inode. Ukuze uphule lo mbuthano ononya, inombolo ye-inode "elungisiwe" "2" yabelwa kumkhombandlela wezimpande. Ake sibheke okuqukethwe inombolo ye-inode 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

Njengoba ubona, uhla lwemibhalo esiludingayo luqukethwe kunombolo ye-block 579. Kuyo sizothola inombolo ye-node yefolda yasekhaya, njalo njalo phansi kweketanga kuze kube ku-directory ye-serp sibona inombolo ye-node yefayela eliceliwe. Uma kungazelelwe othile efuna ukuhlola ukuthi inombolo ilungile yini nokuthi ulwazi oludingekayo lukhona, akunzima. Senza:

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

Kokuphumayo ungafunda amagama amafayela ohlwini lwemibhalo.

Ngakho ngiza embuzweni oyinhloko: "ngaziphi izizathu kungenzeka iphutha lokuqopha?"

Ngokwemvelo, lokhu kuzokwenzeka uma kungekho amabhlogo wamahhala asele ohlelweni lwefayela. Yini engenziwa kuleli cala? Ngaphandle kokuthi “susa noma yini engadingekile” esobala, kufanele ukhumbule ukuthi ezinhlelweni zamafayela we-ext2,3 kanye no-4 kunento ethi “Inani lebhulokhi eligodliwe”. Uma ubheka uhlu olungenhla, sinamabhulokhi anjalo "13094". Lawa amabhulokhi abhalwa umsebenzisi wempande kuphela. kodwa uma udinga ukuxazulula ngokushesha inkinga, njengesixazululo sesikhashana ungazenza zitholakale kuwo wonke umuntu, okuholela esikhaleni esithile samahhala:

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

Labo. ngokuzenzakalelayo, une-5% yesikhala sediski esingatholakali ekubhaleni, futhi unikezwe umthamo wamadiski esimanje, lokhu kungaba ngamakhulu amagigabhayithi.

Kungaba yini enye? Kungenzeka futhi ukuthi kukhona amabhlogo wamahhala, kodwa awasekho ama-node. Lokhu kuvame ukwenzeka uma unenqwaba yamafayela ohlelweni lwakho lwefayela mancane kunosayizi webhulokhi yesistimu yefayela. Uma kucatshangelwa ukuthi i-inode engu-1 isetshenziswa kufayela elingu-1 noma umkhombandlela, futhi isiyonke sinayo (yesistimu yefayela enikeziwe) 65536 - isimo singaphezu kokungokoqobo. Lokhu kungabonakala ngokucacile ekuphumeni komyalo we-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

Njengoba kubonakala ngokucacile ku-partition / var/www, inani lamabhulokhi amahhala ohlelweni lwefayela kanye nenani lama-node amahhala lihluka kakhulu.

Uma kwenzeka uphelelwa ama-inode, ngeke ngikutshele noma yiziphi iziphonso, ngoba... azikho (uma nginephutha, ungazise). Ngakho-ke kuma-partitions lapho amafayela amancane aphindaphinda khona, kufanele ukhethe uhlelo lwefayela ngokuhlakanipha. Isibonelo, ama-inode e-btrfs awakwazi ukuphela, ngoba Ezintsha zidalwe ngamandla uma kunesidingo.

Source: www.habr.com

Engeza amazwana