Midagi inode kohta

Keskjaotuskeskusesse kolimiseks teen perioodiliselt intervjuusid erinevates suurettevĂ”tetes, peamiselt Peterburis ja Moskvas, DevOpsi ametikoha saamiseks. MĂ€rkasin, et paljud ettevĂ”tted (paljud head ettevĂ”tted, nĂ€iteks Yandex) kĂŒsivad kahte sarnast kĂŒsimust:

  • mis on inode;
  • mis pĂ”hjustel vĂ”ib tekkida ketta kirjutamisviga (vĂ”i nĂ€iteks: miks kettaruum vĂ”ib otsa saada, olemus on sama).

Nagu sageli juhtub, olin kindel, et tunnen seda teemat hĂ€sti, kuid niipea, kui hakkasin seletama, ilmnesid lĂŒngad teadmistes. Oma teadmiste sĂŒstematiseerimiseks, lĂŒnkade tĂ€itmiseks ja enda enam mitte hĂ€bistamiseks kirjutan seda artiklit, vĂ”ib-olla on see kellelegi teisele kasulik.

Alustan pÔhjast, st. kÔvakettalt (viskame Àra mÀlupulgad, SSD-d ja muud moodsad asjad; vÔtame nÀiteks mistahes 20 vÔi 80 giga vana draivi, kuna seal on ploki suurus 512 baiti).

KĂ”vaketas ei tea, kuidas oma ruumi bait-bait haaval adresseerida, see on tinglikult jagatud plokkideks. Plokkide nummerdamine algab 0-st. (Seda nimetatakse LBA-ks, ĂŒksikasjad siin: ru.wikipedia.org/wiki/LBA)

Midagi inode kohta

Nagu jooniselt nÀha, mÀÀrasin HDD tasemeks LBA plokid. Muide, teie ketta ploki suurust nÀete jÀrgmiselt:

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

Ülaltoodud tase on partitsioon, ĂŒks kogu ketta jaoks (lihtsuse huvides). KĂ”ige sagedamini kasutatakse kahte tĂŒĂŒpi partitsiooni mĂ€rgistust: msdos ja gpt. Sellest tulenevalt on msdos vana vorming, mis toetab kuni 2Tb kettaid, gpt on uus vorming, mis suudab adresseerida kuni 1 zetabaiti 512-baidistest plokkidest. Meie puhul on meil msdos tĂŒĂŒpi partitsioon, nagu jooniselt nĂ€ha, algab partitsioon plokist nr 1, samas kui MBR jaoks kasutatakse nulli.

Esimeses partitsioonis lĂ”in ext2 failisĂŒsteemi, selle vaikimisi ploki suurus on 4096 baiti, mis kajastub ka joonisel. Saate vaadata failisĂŒsteemi ploki suurust jĂ€rgmiselt:

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

Parameeter, mida vajame, on "Block size".

NĂŒĂŒd on huvitav osa, kuidas lugeda faili /home/serp/testfile? Fail koosneb ĂŒhest vĂ”i mitmest failisĂŒsteemi plokist, milles selle andmed on salvestatud. Kui teate failinime, kuidas seda leida? Milliseid plokke peaksin lugema?

Siin tulevad appi inoodid. FailisĂŒsteemis ext2fs on "tabel", mis sisaldab teavet kĂ”igi inoodide kohta. Inoodide arv ext2fs puhul mÀÀratakse failisĂŒsteemi loomisel. Vaatame tune2fs vĂ€ljundi parameetris “Inode count” vajalikke numbreid, st. meil on 65536 tĂŒkki. Inode sisaldab vajalikku teavet: otsitava faili failisĂŒsteemi plokkide loend. Kuidas leida antud faili inoodi number?

Vastav nimi ja inode number sisalduvad kataloogis ning ext2fs-is olev kataloog on faili eritĂŒĂŒp, st. on ka oma inoodi number. Selle nĂ”iaringi katkestamiseks mÀÀrati juurkataloogile "fikseeritud" inoodi number "2". Vaatame inoodi number 2 sisu:

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

Nagu nÀete, asub meile vajalik kataloog plokis 579. Sealt leiame kodukausta sÔlme numbri ja nii edasi, kuni serp-kataloogis nÀeme soovitud faili sÔlme numbrit. Kui Àkki keegi tahab kontrollida, kas number on Ôige ja kas vajalik info on olemas, pole see keeruline. Me teeme:

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

VĂ€ljundis saab lugeda kataloogis olevate failide nimesid.

Niisiis jĂ”uan pĂ”hikĂŒsimuseni: "mis pĂ”hjustel vĂ”ib salvestusviga tekkida?"

Loomulikult juhtub see siis, kui failisĂŒsteemis pole vabu plokke. Mida saab sel juhul teha? Lisaks ilmselgele "kustuta kĂ”ik mittevajalik" peaksite meeles pidama, et ext2,3, 4 ja 13094 failisĂŒsteemides on olemas selline asi nagu "Reserveeritud plokkide arv". Kui vaatate ĂŒlaltoodud loendit, on meil sellised plokid "XNUMX". Need on plokid, mida saab kirjutada ainult juurkasutaja. aga kui teil on vaja probleem kiiresti lahendada, saate need ajutise lahendusena kĂ”igile kĂ€ttesaadavaks teha, mille tulemuseks on vaba ruumi:

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

Need. vaikimisi pole teil kirjutamiseks saadaval 5% kettaruumist ja tÀnapÀevaste ketaste mahtu arvestades vÔib see olla sadu gigabaite.

Mis see veel olla vĂ”iks? Samuti on vĂ”imalik, et vabu plokke on, kuid sĂ”lme pole enam. Tavaliselt juhtub see siis, kui teie failisĂŒsteemis on hunnik faile, mis on failisĂŒsteemi ploki suurusest vĂ€iksemad. Arvestades, et 1 inode kulub 1 failile vĂ”i kataloogile ja kokku on meil (antud failisĂŒsteemi jaoks) 65536 - olukord on enam kui realistlik. Seda on selgelt nĂ€ha kĂ€su df vĂ€ljundist:

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

Nagu on selgelt nĂ€ha partitsioonil /var/www, on vabade plokkide arv failisĂŒsteemis ja vabade sĂ”lmede arv vĂ€ga erinev.

Juhuks, kui sul inoodid otsa saavad, ei rÀÀgi ma sulle loitse, sest... neid pole (kui ma eksin, andke teada). Nii et partitsioonide jaoks, milles vĂ€ikesed failid paljunevad, peaksite failisĂŒsteemi valima targalt. NĂ€iteks btrfs inodes ei saa lĂ”ppeda, sest Vajadusel luuakse dĂŒnaamiliselt uusi.

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster