Xi ħaġa dwar inode

Perjodikament, sabiex nimxi lejn iċ-Ċentru ta 'Distribuzzjoni Ċentrali, nintervista f'diversi kumpaniji kbar, prinċipalment f'San Pietruburgu u Moska, għal pożizzjoni DevOps. Innotajt li ħafna kumpaniji (ħafna kumpaniji tajbin, pereżempju Yandex) jistaqsu żewġ mistoqsijiet simili:

  • x'inhu inode;
  • għal liema raġunijiet tista 'tikseb żball tal-kitba tad-diska (jew pereżempju: għaliex tista' tispiċċa l-ispazju tad-diska, l-essenza hija l-istess).

Kif jiġri spiss, kont ċert li kont naf tajjeb dan is-suġġett, iżda malli bdejt nispjega, dehru nuqqasijiet fl-għarfien. Biex nissistematizza l-għarfien tiegħi, imla l-vojt u ma tibqax imbarazza ruħi, qed nikteb dan l-artikolu, forsi jkun utli għal xi ħadd ieħor.

Nibda mill-qiegħ, i.e. minn ħardrajv (aħna neħħew flash drives, SSDs u affarijiet moderni oħra; pereżempju, ejja nikkunsidraw kwalunkwe drive antik ta '20 jew 80 gig, peress li d-daqs tal-blokk hemm 512 bytes).

Il-hard drive ma jafx kif jindirizza l-ispazju byte b'byte; huwa kondizzjonali maqsum fi blokki. In-numerazzjoni tal-blokki tibda minn 0. (Din tissejjaħ LBA, id-dettalji hawn: ru.wikipedia.org/wiki/LBA)

Xi ħaġa dwar inode

Kif jidher mill-figura, jien innominajt blokki LBA bħala l-livell HDD. Mill-mod, tista 'tara x'daqs tal-blokk għandu d-disk tiegħek bħal dan:

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

Il-livell ta 'hawn fuq huwa diviżorju, wieħed għad-disk kollu (għal darb'oħra għas-sempliċità). Ħafna drabi, jintużaw żewġ tipi ta 'markup ta' partizzjoni: msdos u gpt. Għaldaqstant, msdos huwa format antik li jappoġġja diski sa 2Tb, gpt huwa format ġdid li kapaċi jindirizza sa zettabyte 1 ta 'blokki ta' 512 byte. Fil-każ tagħna, għandna partizzjoni tat-tip msdos, kif jidher mill-figura, il-partizzjoni tibda bil-blokk Nru 1, filwaqt li żero jintuża għall-MBR.

Fl-ewwel partizzjoni ħloqt sistema ta 'fajls ext2, id-daqs tal-blokk default tagħha huwa 4096 bytes, li huwa rifless ukoll fil-figura. Tista' tara d-daqs tal-blokk tas-sistema tal-fajls bħal dan:

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

Il-parametru li għandna bżonn huwa "Daqs tal-Blokk".

Issa l-parti interessanti hija kif taqra l-fajl /home/serp/testfile? Fajl jikkonsisti fi blokka waħda jew aktar tas-sistema tal-fajls li fiha hija maħżuna d-dejta tiegħu. Li tkun taf l-isem tal-fajl, kif issibha? Liema blokki għandi naqra?

Dan huwa fejn inodes jiġu utli. Is-sistema tal-fajls ext2fs għandha "tabella" li fiha informazzjoni għall-inodes kollha. In-numru ta 'inodes fil-każ ta' ext2fs huwa stabbilit meta tinħoloq is-sistema tal-fajls. Inħarsu lejn in-numri meħtieġa fil-parametru "Inode count" tal-output tune2fs, i.e. għandna 65536 biċċa. L-inode fih l-informazzjoni li neħtieġu: lista ta 'blokki tas-sistema tal-fajls għall-fajl li qed infittxu. Kif issib in-numru tal-inode għal fajl partikolari?

L-isem korrispondenti u n-numru inode jinsabu fid-direttorju, u direttorju f'ext2fs huwa tip speċjali ta 'fajl, i.e. għandha wkoll in-numru inode tagħha stess. Biex jinkiser dan iċ-ċirku vizzjuż, numru inode "fiss" "2" ġie assenjat lid-direttorju tal-għeruq. Ejja nħarsu lejn il-kontenut tal-inode numru 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

Kif tistgħu taraw, id-direttorju li neħtieġu jinsab fil-blokk numru 579. Fih insibu n-numru tan-node għall-folder tad-dar, u l-bqija 'l isfel fil-katina sakemm fid-direttorju serp naraw in-numru tan-node għall-fajl mitlub. Jekk f'daqqa waħda xi ħadd irid jiċċekkja jekk in-numru huwiex korrett u jekk l-informazzjoni meħtieġa hijiex hemm, mhuwiex diffiċli. Aħna nagħmlu:

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

Fl-output tista 'taqra l-ismijiet tal-fajls fid-direttorju.

Allura nasal għall-mistoqsija ewlenija: "għal liema raġunijiet jista' jseħħ żball ta' reġistrazzjoni?"

Naturalment, dan jiġri jekk ma jkun hemm l-ebda blokki ħielsa fis-sistema tal-fajls. X'jista' jsir f'dan il-każ? Minbarra l-ovvju "Ħassar xi ħaġa mhux meħtieġa", għandek tiftakar li fis-sistemi tal-fajls ext2,3 u 4 hemm ħaġa bħal "Għadd ta' blokki Riżervati". Jekk tħares lejn il-lista ta 'hawn fuq, għandna "13094" blokki bħal dawn. Dawn huma blokki li jistgħu jinkitbu biss mill-utent root. imma jekk għandek bżonn issolvi l-kwistjoni malajr, bħala soluzzjoni temporanja tista’ tagħmilhom disponibbli għal kulħadd, li jirriżulta f’xi spazju ħieles:

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

Dawk. b'mod awtomatiku, għandek 5% tal-ispazju tad-diska mhux disponibbli għall-kitba, u minħabba l-volum ta 'diski moderni, dan jista' jkun mijiet ta 'gigabytes.

X'iktar jista' jkun? Huwa wkoll possibbli li jkun hemm blokki ħielsa, iżda m'hemmx aktar nodi. Dan normalment jiġri jekk għandek mazz ta 'fajls fis-sistema tal-fajls tiegħek li huma iżgħar mid-daqs tal-blokk tas-sistema tal-fajls. Meta wieħed iqis li inode 1 jintefaq fuq fajl jew direttorju 1, u b'kollox għandna (għal sistema ta 'fajls partikolari) 65536 - is-sitwazzjoni hija aktar minn realistika. Dan jista' jidher b'mod ċar mill-output tal-kmand 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

Kif jidher b'mod ċar fuq il-partizzjoni /var/www, in-numru ta 'blokki ħielsa fis-sistema tal-fajls u n-numru ta' nodi ħielsa jvarjaw ħafna.

F'każ li tispiċċa bla inodes, ma ngħidlek l-ebda spell, għax... m'hemm xejn (jekk inkun żbaljat, għarrafni). Allura għal diviżorji li fihom jimmultiplikaw fajls żgħar, għandek tagħżel is-sistema tal-fajls bil-għaqal. Per eżempju, btrfs inodes ma jistgħux jispiċċaw, għaliex Oħrajn ġodda huma maħluqa dinamikament jekk meħtieġ.

Sors: www.habr.com

Żid kumment