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:
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