Into malunga ne-inode

Ngamaxesha athile, ukuze ndifudukele kwiZiko loSasazo oluPhakathi, ndidliwano-ndlebe kwiinkampani ezinkulu ezahlukahlukeneyo, ikakhulu eSt. Petersburg naseMoscow, kwisikhundla seDevOps. Ndiqaphele ukuba iinkampani ezininzi (iinkampani ezininzi ezilungileyo, umzekelo iYandex) zibuza imibuzo emibini efanayo:

  • yintoni inode;
  • ngenxa yeziphi izizathu onokuthi ufumane impazamo yokubhala idisk (okanye umzekelo: kutheni unokuphelelwa yindawo yediski, undoqo uyafana).

Ngokufuthi ukwenzeka, ndandiqinisekile ukuba ndiwazi kakuhle lo mbandela, kodwa ndathi nje ndakuqalisa ukucacisa, kwabonakala izikhewu kulwazi. Ukucwangcisa ulwazi lwam, gcwalisa izikhewu kwaye ndingaphindi ndihlazeke, ndibhala eli nqaku, mhlawumbi liya kuba luncedo komnye umntu.

Ndiya kuqala ukusuka ezantsi, i.e. ukusuka kwi-hard drive (siya kulahla i-flash drives, ii-SSD kunye nezinye izinto zanamhlanje; umzekelo, makhe siqwalasele nayiphi na i-20 okanye i-80 gig drive endala, ekubeni ubungakanani bebhloko kukho i-512 bytes).

I-hard drive ayiyazi indlela yokujongana ne-byte yendawo nge-byte; yahlulahlulwe ngokwemeko ibe ziibhloko. Amanani ebloko aqala ku-0. (Oku kubizwa ngokuba yi-LBA, iinkcukacha apha: ru.wikipedia.org/wiki/LBA)

Into malunga ne-inode

Njengoko kunokubonwa kumzobo, ndikhethe iibhloko ze-LBA njengenqanaba le-HDD. Ngendlela, unokubona ukuba yeyiphi isayizi yebhloko yediski yakho efana nale:

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

Inqanaba elingasentla sisahlulelo, esinye sediski yonke (kwakhona ukwenza lula). Amaxesha amaninzi, zimbini iindidi zophawu lokwahlulahlula zisetyenziswa: msdos kunye negpt. Ngokufanelekileyo, i-msdos yifomati endala exhasa iidiski ukuya kuthi ga kwi-2Tb, i-gpt yifomati entsha ekwaziyo ukujongana nokuya kuthi ga kwi-1 zettabyte ye-512 byte blocks. Kwimeko yethu, sinesahlulo sohlobo lwe-msdos, njengoko kunokubonwa kumfanekiso, ulwahlulo luqala ngebhloko ye-1, ngelixa i-zero isetyenziselwa i-MBR.

Kwisahlulelo sokuqala ndidale inkqubo yefayile ye-ext2, ubungakanani bayo obungagqibekanga bebhloko yi-4096 bytes, ekwabonakaliswa kumzobo. Ungajonga ubungakanani bebhloko yesixokelelwano sefayile ngolu hlobo:

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 esiyifunayo yi "Block size".

Ngoku inxalenye enomdla yindlela yokufunda ifayile ye/home/serp/testfile? Ifayile ineebhloko zenkqubo yefayile enye okanye ngaphezulu apho idatha yayo igcinwa khona. Ukwazi igama lefayile, ungayifumana njani? Zeziphi iibhloko ekufuneka ndizifunde?

Apha kulapho iinodes zisiza khona. Inkqubo yefayile ye-ext2fs ine "tafile" equlethe ulwazi lwazo zonke ii-inodes. Inani lee-inodes kwimeko ye-ext2fs imiselwe xa kusenziwa inkqubo yefayile. Sijonga amanani afunekayo "kwi-Inode count" ipharamitha yemveliso ye-tune2fs, okt. sinamaqhekeza angama-65536. I-inode iqulethe ulwazi esiludingayo: uluhlu lweebhloko zesixokelelwano sefayile yefayile esiyifunayo. Ungayifumana njani inombolo ye-inode yefayile enikiweyo?

Igama elihambelanayo kunye nenombolo ye-inode iqulethwe kuluhlu, kwaye i-directory kwi-ext2fs luhlobo olukhethekileyo lwefayile, okt. nayo inenombolo yayo ye-inode. Ukuqhawula esi sangqa esibi, inombolo ye-inode "elungisiweyo" "2" yabelwa kwi-root directory. Makhe sijonge imixholo ye-inode inombolo 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

Njengoko ubona, i-directory esiyidingayo iqulethwe kwinombolo yebhloko 579. Kuyo siya kufumana inombolo ye-node yefolda yasekhaya, kwaye njalo phantsi kwekhonkco kude kube kuluhlu lwe-serp sibona inombolo ye-node yefayile eceliwe. Ukuba ngokukhawuleza umntu ufuna ukujonga ukuba inombolo ichanekile kwaye ingaba ulwazi oluyimfuneko lukhona, akunzima. Siya:

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

Kwisiphumo unokufunda amagama eefayile kulawulo.

Ke ndiza kumbuzo ophambili: "zeziphi izizathu ezinokuthi zenzeke impazamo yokurekhoda?"

Ngokwendalo, oku kuya kwenzeka ukuba akukho zibhloko zasimahla ezishiyekileyo kwinkqubo yefayile. Yintoni enokwenziwa kule meko? Ngaphandle kwento ecacileyo "cima nantoni na engeyomfuneko", kufuneka ukhumbule ukuba kwiinkqubo zefayile ze-ext2,3 kunye ne-4 kukho into ethi "Ubalo lwebhloko egciniweyo". Ukuba ujonga kuluhlu olungentla, sine "13094" iibhloko ezinjalo. Ezi ziibhloko ezibhalwe kuphela ngumsebenzisi wengcambu. kodwa ukuba ufuna ukuwusombulula ngokukhawuleza umba, njengesisombululo sexeshana ungawenza afumaneke kuye wonke umntu, okukhokelela kwindawo yasimahla:

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

Ezo. ngokungagqibekanga, une-5% yesithuba sedisk esingafumanekiyo ekubhaleni, kwaye unikwe umthamo weediski zangoku, oku kunokuba ngamakhulu egigabytes.

Inokuba yintoni enye? Kwakhona kunokwenzeka ukuba kukho iibhloko zamahhala, kodwa azikho ii-nodes. Oku kuqhele ukwenzeka ukuba uneqela leefayile kwindlela yakho yefayile ezincinci kunobungakanani bebhloko yenkqubo yefayile. Ukuqwalasela ukuba i-inode ye-1 ichithwa kwi-1 ifayile okanye i-directory, kwaye iyonke sinayo (kwinkqubo yefayile enikeziweyo) 65536 - imeko ingaphezulu kwenyani. Oku kunokubonwa ngokucacileyo kwimveliso yomyalelo 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

Njengoko kubonakala ngokucacileyo kwi- / var / www isahlulo, inani leebhloko zamahhala kwinkqubo yefayile kunye nenani lee-nodes zamahhala ziyahluka kakhulu.

Ukuba uphelelwe yi-inodes, andiyi kukuxelela nayiphi na i-spells, kuba ... akukho (ukuba andilunganga, undazise). Ke kwizahlulo apho iifayile ezincinci ziphindaphindeka, kufuneka ukhethe inkqubo yefayile ngobulumko. Ngokomzekelo, i-btrfs inodes ayinakuphela, kuba Ezintsha zenziwe ngokuguquguqukayo ukuba kuyimfuneko.

umthombo: www.habr.com

Yongeza izimvo