Wani abu game da inode

Lokaci-lokaci, don matsawa zuwa Cibiyar Rarraba ta Tsakiya, na yi hira a manyan kamfanoni daban-daban, musamman a St. Petersburg da Moscow, don matsayi na DevOps. Na lura cewa kamfanoni da yawa (kamfanoni masu kyau da yawa, misali Yandex) suna yin tambayoyi iri ɗaya guda biyu:

  • abin da yake inode;
  • saboda waɗanne dalilai za ku iya samun kuskuren rubuta faifai (ko misali: me yasa za ku iya ƙarewa daga sararin diski, ainihin iri ɗaya ne).

Kamar yadda sau da yawa yakan faru, na tabbata cewa na san wannan batu sosai, amma da zarar na fara bayani, sai ga gibin ilimi ya bayyana. Don tsara ilimina, cike giɓi kuma kada in kunyata kaina, ina rubuta wannan labarin, watakila zai zama da amfani ga wani.

Zan fara daga kasa, watau. daga rumbun kwamfutarka (za mu watsar da filasha, SSDs da sauran abubuwan zamani; misali, bari mu yi la'akari da kowane 20 ko 80 gig tsoho drive, tun da girman toshe akwai 512 bytes).

Hard Drive bai san yadda ake magance byte ba ta sararin samaniya ba; an raba shi da sharaɗi zuwa tubalan. Toshe lamba yana farawa daga 0. (Wannan ana kiranta LBA, cikakkun bayanai anan: ru.wikipedia.org/wiki/LBA)

Wani abu game da inode

Kamar yadda ake iya gani daga adadi, na sanya katangar LBA a matsayin matakin HDD. Af, zaku iya ganin girman girman faifan ku kamar haka:

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

Matsayin da ke sama bangare ne, ɗaya don faifai gabaɗaya (sake don sauƙi). Mafi sau da yawa, ana amfani da nau'ikan alamar ɓangarori biyu: msdos da gpt. Saboda haka, msdos wani tsohon tsari ne wanda ke goyan bayan fayafai har zuwa 2Tb, gpt sabon tsari ne wanda zai iya magance har zuwa 1 zettabyte na 512 byte blocks. A cikin yanayinmu, muna da bangare na nau'in msdos, kamar yadda ake iya gani daga adadi, ɓangaren yana farawa tare da toshe No. 1, yayin da ake amfani da sifili don MBR.

A kashi na farko na ƙirƙiri tsarin fayil na ext2, girman toshewar sa shine 4096 bytes, wanda kuma yana nunawa a cikin adadi. Kuna iya duba girman toshe tsarin fayil kamar haka:

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

Ma'aunin da muke buƙata shine "Block size".

Yanzu sashi mai ban sha'awa shine yadda ake karanta fayil ɗin /home/serp/testfile? Fayil ya ƙunshi tubalan tsarin fayil ɗaya ko fiye waɗanda a ciki ake adana bayanansa. Sanin sunan fayil, yadda ake samun shi? Wadanne tubalan zan karanta?

Wannan shine inda inodes ke zuwa da amfani. Tsarin fayil na ext2fs yana da "tebur" wanda ya ƙunshi bayanai don duk inodes. An saita adadin inodes a yanayin ext2fs lokacin ƙirƙirar tsarin fayil. Muna duba lambobin da ake buƙata a cikin ma'aunin "Inode count" na fitowar tune2fs, watau. muna da guda 65536. Inode yana ƙunshe da bayanan da muke buƙata: jerin toshe tsarin fayil ɗin fayil ɗin da muke nema. Yadda ake nemo lambar inode don fayil ɗin da aka bayar?

Sunan da ya dace da lambar inode suna kunshe a cikin kundin adireshi, kuma kundin adireshi a ext2fs nau'in fayil ne na musamman, watau. shima yana da nasa lambar inode. Don karya wannan muguwar da'irar, an sanya lambar “kafaffen” inode lamba “2” zuwa tushen directory. Mu kalli abinda ke cikin lambar 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

Kamar yadda kake gani, directory ɗin da muke buƙata yana ƙunshe a lambar toshe 579. A ciki za mu sami lambar node don babban fayil ɗin gida, da sauransu a ƙasan sarkar har sai a cikin littafin serp mun ga lambar node don fayil ɗin da aka nema. Idan ba zato ba tsammani wani yana so ya bincika ko lambar daidai ne kuma ko bayanin da ake bukata yana can, ba shi da wahala. Muna yin:

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

A cikin fitarwa zaka iya karanta sunayen fayiloli a cikin kundin adireshi.

Don haka na zo ga babbar tambaya: "saboda waɗanne dalilai na iya faruwa kuskuren rikodin?"

A zahiri, wannan zai faru idan babu tubalan kyauta da aka bari a cikin tsarin fayil. Me za a iya yi a wannan yanayin? Bayan bayyanannen "share duk wani abu da ba dole ba", ya kamata ku tuna cewa a cikin tsarin fayil na ext2,3 da 4 akwai irin wannan abu kamar "ƙididdigar block". Idan ka dubi lissafin da ke sama, muna da "13094" irin waɗannan tubalan. Waɗannan tubalan ne kawai da tushen mai amfani ke rubutawa. amma idan kuna buƙatar warware matsalar cikin sauri, a matsayin mafita na ɗan lokaci za ku iya ba da su ga kowa da kowa, yana haifar da wasu sarari kyauta:

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

Wadancan. Ta hanyar tsoho, kana da kashi 5% na sararin faifan da ba a iya rubutawa ba, kuma idan aka yi la’akari da girman faifai na zamani, wannan na iya zama ɗaruruwan gigabytes.

Menene kuma zai iya zama? Hakanan yana yiwuwa cewa akwai tubalan kyauta, amma babu sauran nodes. Wannan yawanci yana faruwa idan kuna da tarin fayiloli akan tsarin fayil ɗinku waɗanda suka yi ƙasa da girman toshe tsarin fayil. Yin la'akari da cewa 1 inode yana kashewa akan fayil 1 ko directory, kuma a cikin duka muna da (don tsarin fayil ɗin da aka ba) 65536 - yanayin ya fi dacewa. Ana iya ganin wannan a fili daga fitowar umarnin 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

Kamar yadda yake bayyane akan ɓangaren /var/www, adadin tubalan kyauta a cikin tsarin fayil da adadin nodes na kyauta sun bambanta sosai.

Idan kun ƙare inodes, ba zan gaya muku wani sihiri ba, saboda ... babu daya (idan na yi kuskure, sanar da ni). Don haka don ɓangarori waɗanda ƙananan fayiloli suka ninka, yakamata ku zaɓi tsarin fayil cikin hikima. Misali, btrfs inodes ba zai iya ƙarewa ba, saboda Ana ƙirƙira sababbi sosai idan ya cancanta.

source: www.habr.com

Add a comment