Për periudha të caktuara, në qëllim të kalimit në CRS, kam intervista në kompani të mëdha, kryesisht në Shën Petersburg dhe Moskë për pozita DevOps. Vura re se në shumë kompani (në shumë kompani të mira, për shembull në Yandex) bëjnë dy pyetje të ngjashme:
- çfarë është inode;
- për çfarë arsye mund të merrni një gabim gjatë shkrimit në disk (apo për shembull: pse mund të përfundojë hapësira në disk, thelbi është i njëjtë).
Siç ndodh shpesh, isha i sigurt se e dija mirĂ« kĂ«tĂ« temĂ«, por sapo fillova tĂ« shpjegoj â u shfaqĂ«n boshllĂ«qe nĂ« njohuri. PĂ«r tĂ« sistematizuar njohuritĂ« e mia, pĂ«r tĂ« mbushur boshllĂ«qet dhe pĂ«r tĂ« mos u poshtĂ«ruar mĂ«, po shkruaj kĂ«tĂ« artikull, ndoshta do t'i shĂ«rbejĂ« edhe dikujt tjetĂ«r.
Do të filloj "nga fundi", pra nga disku i fortë (flasht, SSD dhe gjëra moderne i anashkalojmë, për shembull do të shqyrtojmë një disk të vjetër 20 ose 80 gigabajt, pasi atje madhësia e bllokut është 512 byte).
Disku i fortë nuk di të adresojë hapësirën e tij sipas bajtëve, në mënyrë konvencionale ajo është e ndarë në blloqe. Numërimi i blloqeve fillon nga 0. (kjo quhet LBA, detajet këtu: )

Siç duket nga figura, blloqet LBA i kam quajtur si nivel HDD. Me sa duket, mund të shihni se çfarë është madhësia e bllokut në disku tuaj në atë mënyrë:
root@ubuntu:/home/serp# blockdev --getpbsz /dev/sdb
512NjĂ« nivel mĂ« lart Ă«shtĂ« ndarĂ« njĂ« parti, njĂ« pĂ«r tĂ« gjithĂ« diskun (pĂ«rsĂ«ri pĂ«r thjeshtĂ«si). MĂ« shpesh pĂ«rdoren dy lloje ndarjesh: msdos dhe gpt. Sipas kĂ«shtu, msdos Ă«shtĂ« formati i vjetĂ«r qĂ« mbĂ«shtet disqet deri nĂ« 2Tb, gpt Ă«shtĂ« formati i ri qĂ« mund tĂ« adresojĂ« deri nĂ« 1 zettabayt tĂ« blloqeve prej 512 byte. NĂ« rastin tonĂ« kemi njĂ« parti tĂ« tipit msdos, siç duket nga figura, kjo parti fillon me bllokun â1, ndĂ«rsa blloku zero pĂ«rdoret pĂ«r MBR.
Në partisë e parë krijova një sistem skedari ext2, me një madhësi blloku prej 4096 byte siç është e paracaktuar, e cila gjithashtu pasqyrohet në figurë. Mund ta shikoni madhësinë e bllokut të sistemit të skedarëve në këtë mënyrë:
root@ubuntu:/home/serp# tune2fs -l /dev/sdb1
tune2fs 1.42.9 (4-Feb-2014)
Emri i volumit të sistemit:
Të fundit e mbajtur në:
UUID i sistemit të skedarëve: a600bf40-f660-41f6-a3e6-96c303995479
Numri magjik i sistemit të skedarëve: 0xEF53
Revizioni i sistemit të skedarëve #: 1 (dinamik)
Karakteristikat e sistemit të skedarëve: ext_attr resize_inode dir_index filetype sparse_super large_file
Flamujt e sistemit të skedarëve: signed_directory_hash
Opsionet e parazgjedhura të montimit: user_xattr acl
G ŃĐŸŃŃĐŸŃĐœĐžĐ” i sistemit tĂ« skedarĂ«ve: i pastĂ«r
Skena e gabimeve: Vazhdoni
Lloji i sistemit të skedarëve OS: Linux
Numri i inode-ve: 65536
Numri i blloqeve: 261888
Numri i blloqeve të reservuar: 13094
Blloqet e lira: 257445
Inode të lira: 65525
Blloku i parë: 0
Madhësia e bllokut: 4096
Madhësia e fragmentit: 4096
Blloqet e rezervuara GDT: 63
Blloqet për grup: 32768
Fragmentet për grup: 32768
Inode për grup: 8192
Blloket e inode për grup: 512
Sistemi i skedarëve krijuar: Prej të premtes 2 Gusht 15:02:13 2019
Koha e fundit e montimit: n/a
Koha e fundit e shkruar: Prej së premtes 2 Gusht 15:02:14 2019
Numri i montimeve: 0
Numri maksimal i montimeve: -1
Kontrolli i fundit: Prej së premtes 2 Gusht 15:02:13 2019
Intervali i kontrollit: 0 ()
UID i bllokëve të rezervuar: 0 (përdoruesi root)
GID i bllokëve të rezervuar: 0 (grupi root)
Inode i parë: 11
Madhësia e inode: 256
Madhësia e tepricës që kërkohet: 28
Madhësia e tepricës që dëshirohet: 28
Hashi default për dosjet: half_md4
BŃrja e Hashit tĂ« Dosjes: c0155456-ad7d-421f-afd1-c898746ccd76Parametri qĂ« na nevojitet Ă«shtĂ« «MadhĂ«sia e bllokut».
Tani, më interesante është si të lexojmë skedarin /home/serp/testfile? Skedari përbëhet nga një ose disa blloqe të sistemit të skedarëve, në të cilat ruhen të dhënat e tij. Si mund ta gjejmë të dhënë skedarin duke ditur emrin e tij? Cilët blloqe duhet të lexojmë?
Këtu na vijnë në ndihmë inode. Në sistemin e skedarëve ext2fs ekziston një "tabelë" që përmban informacionin për të gjithë inode. Numri i inode në rastin e ext2fs përcaktohet gjatë krijimit të sistemit të skedarëve. Shifrat e nevojshme i shohim në parametrin "Inode count" të daljes tune2fs, pra kemi 65536 njësi. Në inode përmban informacionin e nevojshëm për ne: listën e blloqeve të sistemit të skedarëve për skedarin e kërkuar. Si të gjejmë numrin e inode për skedarin e caktuar?
Përputhja mes emrit dhe numrit të inode është në direktorinë, dhe direktoria në ext2fs është një skedar i tipit të veçantë, pra gjithashtu ka numrin e saj të inode. Për të thyer këtë cikël vicioz, për direktorinë rrënjë u caktua një numër "fikse" inode "2". Shikoni përmbajtjen e inode me numër 2:
root@ubuntu:/# debugfs /dev/sdb1
debugfs 1.42.9 (4-Feb-2014)
debugfs: stat
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: 1Siç duket, direktoria që na nevojitet ndodhet në bllokun me numër 579. Atje do të gjejmë numrin e nodit për dosjen home, dhe kështu me radhë, derisa në direktorinë serp të shohim numrin e nodit për skedarin e kërkuar. Nëse ndokush dëshiron të kontrollojë nëse numri është i saktë dhe nëse ka informacionin e nevojshëm, nuk është e vështirë. Kjo është:
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_imageNë daljen e komandës mund të lexoni emrat e skedarëve në direktori.
Këtu po arrij në pyetjen kryesore: "për çfarë arsye mund të ndodhin gabime në shkarkim"?
Natyrisht, kjo ndodh nĂ«se nuk ka blloqe tĂ« lira nĂ« sistemin e skedarĂ«ve. ĂfarĂ« mund tĂ« bĂ«jmĂ« nĂ« kĂ«tĂ« rast? PĂ«rveç pĂ«rgjigjes evidente "fshij diçka tĂ« panevojshme", duhet tĂ« mbani mend se nĂ« sistemet e skedarĂ«ve ext2,3 dhe 4 ka njĂ« gjĂ« tĂ« tillĂ« si "numri i blloqeve tĂ« rezervuara". NĂ« listimin mĂ« sipĂ«r, ne kemi 13094 tĂ« tillĂ«. KĂ«to janĂ« blloqe tĂ« disponueshme pĂ«r shkarkim vetĂ«m nga pĂ«rdoruesi root. Por nĂ«se duhet tĂ« zgjidhet menjĂ«herĂ« çështja, si njĂ« zgjidhje tĂ« pĂ«rkohshme, mund t'i bĂ«ni tĂ« disponueshme pĂ«r tĂ« gjithĂ«, duke rezultuar nĂ« njĂ« hapĂ«sirĂ« tĂ« vogĂ«l tĂ« lirĂ«:
root@ubuntu:/mnt# tune2fs -m 0 /dev/sdb1
tune2fs 1.42.9 (4-Feb-2014)
Cak që rezervat e blloqeve është e vendosur në 0% (0 blloqe)Kjo do të thotë se, sipas parazgjedhjes, nuk keni në dispozicion për shkresë 5% të hapësirës disk, dhe duke marrë parasysh volumet e disqeve moderne, kjo mund të jetë qindra gigabajtë.
ĂfarĂ« mund tĂ« ndodhĂ« tjetĂ«r? NjĂ« situatĂ« tjetĂ«r e mundshme Ă«shtĂ« kur ka blloqe tĂ« lira, por kanĂ« mbaruar nodet. Kjo ndodh zakonisht kur nĂ« sistemin tuaj tĂ« skedarĂ«ve ka shumĂ« skedarĂ« me madhĂ«si mĂ« tĂ« vogĂ«l se madhĂ«sia e bllokut tĂ« sistemit tĂ« skedarĂ«ve. Duke marrĂ« parasysh se pĂ«r çdo skedar ose direktori shpenzohet 1 inode dhe gjithsej kemi (pĂ«r kĂ«tĂ« sistem skedarĂ«sh) 65536 â kjo situatĂ« Ă«shtĂ« mĂ« se reale. Kjo mund tĂ« shihet qartĂ« nga dalja e komandĂ«s 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\/wwwSi e duket qartë nga seksioni \/var\/www, numri i bllokave të lira të sistemit të skedarëve dhe numri i node-ve të lira janë shumë të ndryshme.
Në rast se u mbaruan inode-t, nuk kam ndonjë këshillë për magji, sepse nuk ka (nëse jam gabim, më bëni të ditur). Prandaj, për seksionet ku punohet me skedarë të vegjël, duhet të zgjedhim saktësisht sistemin e skedarëve. P.sh., në btrfs inode-t nuk mund të mbarojnë, sepse krijohen në mënyrë dinamike kur është e nevojshme.
Burimi: habr.com
