Zavatra momba ny inode

Tsindraindray, mba hifindrana any amin'ny Foiben'ny Distribution Central, dia manadihady amin'ny orinasa lehibe isan-karazany aho, indrindra any Saint-Pétersbourg sy Moskoa, ho an'ny toerana DevOps. Tsikaritro fa orinasa maro (orinasa tsara maro, ohatra Yandex) no mametraka fanontaniana roa mitovy:

  • inona no inode;
  • inona no antony ahafahanao mahazo ny disk write error (na ohatra: maninona no mety ho lany ny habaka kapila, ny essence dia mitovy).

Toy ny nitranga matetika, dia azoko antoka fa nahafantatra tsara io lohahevitra io aho, saingy raha vao nanomboka nanazava aho dia niharihary ny tsy fahampian'ny fahalalana. Mba handaminana ny fahalalako, fenoy ny banga ary tsy mahamenatra ny tenako intsony, dia manoratra ity lahatsoratra ity aho, mety ho mahasoa ny olon-kafa.

Hanomboka avy any ambany aho, i.e. avy amin'ny kapila mafy (ariantsika ny kapila tselatra, SSD ary zavatra maoderina hafa; ohatra, andeha hojerentsika izay fiara tranainy 20 na 80 gig, satria ny haben'ny sakana dia 512 bytes).

Ny kapila mafy dia tsy mahafantatra ny fomba hamahana ny habaka byte amin'ny byte; zaraina ho blocs izy io. Ny laharan'ny sakana dia manomboka amin'ny 0. (Ity no antsoina hoe LBA, antsipiriany eto: ru.wikipedia.org/wiki/LBA)

Zavatra momba ny inode

Araka ny hita amin'ny sary, dia nanendry ny sakana LBA ho haavon'ny HDD aho. Raha ny marina, azonao jerena ny haben'ny sakana ananan'ny kapilanao toy izao:

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

Ny ambaratonga ambony dia fisarahana, iray ho an'ny kapila manontolo (indray ho an'ny fahatsorana). Matetika, karazana fisarahana marika roa no ampiasaina: msdos sy gpt. Araka izany, ny msdos dia endrika tranainy izay manohana ny kapila hatramin'ny 2Tb, ny gpt dia endrika vaovao afaka mamaly hatramin'ny 1 zettabyte amin'ny sakana 512 byte. Amin'ny tranga misy antsika dia manana fizarazarana karazana msdos isika, araka ny hita amin'ny sary, ny fisarahana dia manomboka amin'ny sakana No. 1, raha ny aotra no ampiasaina amin'ny MBR.

Tamin'ny fizarana voalohany dia namorona rafitra fichier ext2 aho, ny haben'ny sakana default dia 4096 bytes, izay hita taratra amin'ny sary ihany koa. Azonao atao ny mijery ny haben'ny rafitra fichier block toy izao:

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

Ny mari-pamantarana ilaintsika dia "Haben'ny sakana".

Ankehitriny ny ampahany mahaliana dia ny famakiana ny rakitra /home/serp/testfile? Ny rakitra iray dia misy sakana rafitra fichier iray na maromaro izay itahirizana ny angonany. Ny fahafantarana ny anaran'ny rakitra, ahoana no hahitana azy? Inona avy ireo bloc tokony hovakiako?

Eto dia ilaina ny inodes. Ny rafitra fisie ext2fs dia manana "latabatra" misy fampahalalana ho an'ny inodes rehetra. Ny isan'ny inodes amin'ny tranga ext2fs dia napetraka rehefa mamorona ny rafitra rakitra. Mijery ny isa ilaina amin'ny parameter "Inode count" amin'ny vokatra tune2fs isika, izany hoe. manana 65536 izahay. Ny inode dia ahitana ny fampahalalana ilaintsika: lisitry ny sakana rafitra fichier ho an'ny rakitra tadiavintsika. Ahoana ny fomba hahitana ny laharana inode ho an'ny rakitra iray?

Ny anarana mifanaraka amin'izany sy ny laharan'ny inode dia voarakitra ao amin'ny lahatahiry, ary ny lahatahiry ao amin'ny ext2fs dia karazana rakitra manokana, i.e. manana ny laharana inode azy ihany koa. Mba hanapahana ity faribolana masiaka ity, dia nomena ny laharana "2" "fixed" ao amin'ny lahatahiry fototra. Andeha hojerentsika ny votoatin'ny inode laharana 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

Araka ny hitanao, ny lahatahiry ilaintsika dia voarakitra ao amin'ny laharana 579. Ao anatin'izany dia hahita ny laharana node ho an'ny lahatahiry an-trano isika, ary toy izany koa ny rojo mandra-pahitantsika ny laharan'ny node ho an'ny rakitra nangatahana ao amin'ny lahatahiry serp. Raha misy olona te-hijery tampoka raha marina ny isa ary misy ny fampahalalana ilaina, dia tsy sarotra izany. ataontsika:

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

Ao amin'ny famoahana dia azonao atao ny mamaky ny anaran'ireo rakitra ao amin'ny lahatahiry.

Noho izany dia tonga amin'ny fanontaniana lehibe aho: "noho ny antony inona no mety hitrangan'ny fahadisoana firaketana?"

Mazava ho azy fa hitranga izany raha tsy misy sakana maimaim-poana tavela ao amin'ny rafitra fichier. Inona no azo atao amin'ity tranga ity? Ankoatra ny "famafana izay tsy ilaina", tokony ho tsaroanao fa ao amin'ny rafitra rakitra ext2,3 sy 4 dia misy zavatra toy ny hoe "Isan'ny sakana voatokana". Raha mijery ny lisitra etsy ambony ianao dia manana "13094" toy izany. Ireo dia sakana tsy azon'ny mpampiasa root ihany no soratana. fa raha mila mamaha haingana ny olana ianao, ho vahaolana vonjimaika dia azonao atao ny manome azy ireo ho an'ny rehetra, ka miteraka toerana malalaka:

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

Ireo. Amin'ny alàlan'ny default, manana 5% amin'ny habaka kapila tsy azo soratana ianao, ary raha jerena ny habetsahan'ny kapila maoderina, dia mety ho gigabytes an-jatony izany.

Inona koa no mety ho izy? Mety misy ihany koa ny sakana maimaim-poana, fa tsy misy nodes intsony. Izany matetika no mitranga raha manana andian-drakitra ao amin'ny rafi-drakitrao izay kely kokoa noho ny haben'ny sakana ny rafitra rakitra. Raha jerena fa ny inode 1 dia lany amin'ny rakitra na lahatahiry 1, ary amin'ny fitambarany dia manana (ho an'ny rafitra fisie iray) 65536 - mihoatra noho ny zava-misy ny zava-misy. Izany dia azo jerena mazava amin'ny famoahana ny baiko 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

Araka ny hita mazava tsara amin'ny fizarazarana /var/www, miovaova be ny isan'ny sakana maimaim-poana ao amin'ny rafi-drakitra sy ny isan'ny node maimaim-poana.

Raha toa ka lany inode ianao dia tsy hilaza ody aminao aho, satria ... tsy misy (raha diso aho dia ampahafantaro ahy). Noho izany ho an'ny fizarazarana izay mihamaro ny rakitra kely dia tokony hifidy tsara ny rafitra rakitra ianao. Ohatra, btrfs inodes tsy afaka mifarana, satria Ny vaovao dia noforonina mavitrika raha ilaina.

Source: www.habr.com

Add a comment