Wax ku saabsan inode

Marmar, si aan ugu guuro Xarunta Qaybinta Dhexe, waxaan wareysi la yeeshay shirkado waaweyn oo kala duwan, gaar ahaan St. Petersburg iyo Moscow, booska DevOps. Waxaan ogaaday in shirkado badan (shikado badan oo wanaagsan, tusaale ahaan Yandex) ay weydiiyaan laba su'aalood oo isku mid ah:

  • waa maxay inode;
  • Sababo noocee ah ayaad ku heli kartaa qalad qorista diskka (ama tusaale ahaan: sababta aad booska diskka uga dhammaanayso, nuxurku waa isku mid).

Sida marar badan dhacda, waxaan hubay in aan mawduucan si fiican u garanayo, laakiin isla markii aan bilaabay inaan sharaxo, waxaa soo baxay goldaloolooyinka aqoonta. Si aan u habeeyo aqoontayda, oo aan u buuxiyo dulduleelada oo aan mar dambe naftayda ceebayn, waxaan qorayaa maqaalkan, laga yaabee inay faa'iido u leedahay qof kale.

Waxaan ka bilaabi doonaa hoosta, i.e. Laga soo bilaabo dariiq adag (waxaan ka tuuri doonaa flash drives, SSDs iyo waxyaabo kale oo casri ah; tusaale ahaan, aan ka fiirsanno 20 ama 80 gig hore oo darawal ah, maadaama cabbirka xannibaadda uu jiro 512 bytes).

Hard Drive-ku ma garanayo sida uu meel kaga hadlo byte byte-ka, waxa uu shuruud ahaan u qaybsan yahay blocks. Nambarada xannibaadda waxay ka bilaabataa 0. (Tani waxaa loo yaqaan LBA, faahfaahinta halkan: ru.wikipedia.org/wiki/LBA)

Wax ku saabsan inode

Sida shaxanka lagu arki karo, waxaan u qoondeeyay blocks LBA inay yihiin heerka HDD. Jid ahaan, waxaad arki kartaa cabbirka xannibaadda diskkaagu leeyahay sidan:

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

Heerka sare waa qayb ka mid ah diskka oo dhan (mar labaad si fudud). Inta badan, laba nooc oo calaamadaynta qaybinta ayaa la isticmaalaa: msdos iyo gpt. Sidaas awgeed, msdos waa qaab duug ah oo taageera saxanadaha ilaa 2Tb, gpt waa qaab cusub oo awood u leh inuu wax ka qabto ilaa 1 zettabyte oo ah 512 byte blocks. Xaaladeena, waxaan leenahay qayb ka mid ah nooca msdos, sida laga arki karo shaxanka, qaybtu waxay ku bilaabataa block No. 1, halka eber loo isticmaalo MBR.

Qaybta hore, waxaan abuuray nidaamka faylka ext2, cabbirkeeda caadiga ah waa 4096 bytes, taas oo sidoo kale ka muuqata shaxanka. Waxaad arki kartaa cabbirka nidaamka faylka sida tan:

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

Halbeegga aan u baahanahay waa "Block size".

Hadda qaybta xiisaha lihi waa sida loo akhriyo faylka /home/serp/testfile? Faylku waxa uu ka kooban yahay hal ama in ka badan oo nidaamka faylalka lagu kaydiyo. Ogaanshaha magaca faylka, sidee lagu helaa? Waa kuwee baloogyada aan akhriyo?

Tani waa meesha inodes-ku ay ku anfacaan. Nidaamka faylka ext2fs wuxuu leeyahay "miiska" oo ka kooban macluumaadka dhammaan inodes-ka. Tirada inodes ee kiiska ext2fs ayaa la dejiyaa marka la abuurayo nidaamka faylka. Waxaan ku eegeynaa tirooyinka loo baahan yahay ee "Inode count" ee cabbirka tune2fs, i.e. waxaanu haynaa 65536 xabo. Inodeku wuxuu ka kooban yahay macluumaadka aan u baahanahay: liiska nidaamka faylalka blocks ee faylka aan raadineyno. Sidee loo helaa lambarka inode ee faylka la bixiyay?

Magaca u dhigma iyo nambarka inode ayaa ku jira tusaha, iyo tusaha ku jira ext2fs waa nooc gaar ah oo fayl ah, i.e. sidoo kale waxa uu leeyahay nambarkiisa inode. Si loo jebiyo goobada xun, nambarka "fixed" inode number "2" ayaa loo qoondeeyay hagaha xididka. Aynu eegno waxa ku jira lambarka inode 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

Sida aad arki karto, tusaha aan u baahanahay wuxuu ku jira lambarka block 579. Halkaas waxaan ka heli doonaa lambarka noode ee gal-guriga, iyo wixii la mid ah hoosta silsiladda ilaa tusaha serp-ka waxaan ku aragnaa lambarka node ee faylka la codsaday. Haddii si lama filaan ah qof doonayo inuu hubiyo in nambarku sax yahay iyo in macluumaadka lagama maarmaanka ah uu jiro, ma adka. Waxaan sameynaa:

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

Soo saarista waxaad akhrin kartaa magacyada faylasha ku jira hagaha.

Markaa waxaan u imid su'aasha ugu weyn: "Sababohee ayaa qalad duubitaan u dhici karaa?"

Dabcan, tani waxay dhici doontaa haddii aysan jirin xannibaadyo bilaash ah oo ku hadhay nidaamka faylka. Maxaa laga qaban karaa kiiskan? Ka sokow cad "tirtir wax kasta oo aan loo baahnayn", waa in aad xasuusato in ext2,3 iyo 4 nidaamka file ay jiraan wax sida "Reserved block count". Haddii aad eegto liiska sare, waxaan haynaa "13094" blocks sida. Kuwani waa baloogyo ay qori karaan oo keliya isticmaalaha xididka. laakiin haddii aad u baahan tahay inaad si dhakhso ah u xalliso arrinta, sida xal ku meel gaar ah waxaad ka dhigi kartaa mid ay heli karaan qof walba, taasoo keentay in xoogaa banaan ah:

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

Kuwaas. Sida caadiga ah, waxaad haysataa 5% booska diskka oo aan diyaar u ahayn in lagu qoro, marka la eego mugga saxannada casriga ah, tani waxay noqon kartaa boqolaal gigabytes.

Maxaa kale oo ay noqon kartaa? Waxa kale oo suurtogal ah in ay jiraan blocks bilaash ah, laakiin ma jiraan nodes dheeraad ah. Tani waxay badanaa dhacdaa haddii aad haysato farabadan faylasha nidaamka faylkaaga kuwaas oo ka yar cabbirka nidaamka faylalka. Iyadoo la tixgelinayo in 1 inode lagu kharash gareeyay 1 fayl ama tusaha, iyo guud ahaan waxaan haysanaa (nidaamka faylka la bixiyay) 65536 - xaaladdu waa ka badan tahay xaqiiqda. Tan waxaa si cad looga arki karaa soo-saarka amarka 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

Sida si cad uga muuqata qaybta /var/www, tirada blocks ee nidaamka faylka iyo tirada qanjidhada bilaashka ah aad ayay u kala duwan yihiin.

Haddii ay dhacdo in aad dhammaato, kuuma sheegi doono wax sixir ah, sababtoo ah... ma jiraan (haddii aan qaldanahay, ii sheeg). Markaa qaybaha ay ku dhuftaan faylal yaryar, waa inaad si xikmad leh u doorataa nidaamka faylka. Tusaale ahaan, btrfs inodes ma dhammaan karaan, sababtoo ah Kuwo cusub ayaa si firfircoon loo abuuray haddii loo baahdo.

Source: www.habr.com

Add a comment