Matag karon ug unya, aron makabalhin ngadto sa Central Distribution Center, interbyu ko sa nagkalain-laing dagkong kompanya, ilabina sa St. Petersburg ug Moscow, alang sa posisyon sa DevOps. Namatikdan nako nga daghang mga kompanya (daghang maayong mga kompanya, pananglitan Yandex) nangutana og duha ka parehas nga mga pangutana:
- unsa ang inode;
- alang sa unsa nga mga hinungdan nga makakuha ka usa ka sayup sa pagsulat sa disk (o pananglitan: kung ngano nga mahurot ka sa wanang sa disk, parehas ang esensya).
Sama sa kanunay nga mahitabo, sigurado ako nga nahibal-an nako kini nga hilisgutan, apan sa pagsugod nako sa pagpatin-aw, ang mga kal-ang sa kahibalo nahimong dayag. Aron ma-systematize ang akong kahibalo, pun-a ang mga kal-ang ug dili na maulawan ang akong kaugalingon, gisulat ko kini nga artikulo, tingali kini mapuslanon sa uban.
Magsugod ko sa ubos, i.e. gikan sa usa ka hard drive (atong isalikway ang mga flash drive, SSD ug uban pang modernong mga butang; pananglitan, atong tagdon ang bisan unsang 20 o 80 gig old drive, tungod kay ang block size adunay 512 bytes).
Ang hard drive wala mahibal-an kung giunsa pagtubag ang space byte pinaagi sa byte; kini gibahin sa kondisyon sa mga bloke. Ang block numbering magsugod sa 0. (Gitawag kini nga LBA, mga detalye dinhi:
Ingon sa makita gikan sa numero, gitudlo nako ang mga bloke sa LBA ingon ang lebel sa HDD. Pinaagi sa dalan, imong makita kung unsa nga block ang gidak-on sa imong disk sama niini:
root@ubuntu:/home/serp# blockdev --getpbsz /dev/sdb
512
Ang lebel sa ibabaw usa ka partisyon, usa para sa tibuok disk (pag-usab alang sa kayano). Kasagaran, duha ka klase sa partition markup ang gigamit: msdos ug gpt. Tungod niini, ang msdos usa ka karaan nga format nga nagsuporta sa mga disk hangtod sa 2Tb, ang gpt usa ka bag-ong format nga makahimo sa pagtubag hangtod sa 1 zettabyte sa 512 byte nga mga bloke. Sa among kaso, kami adunay usa ka partisyon sa tipo nga msdos, ingon sa makita gikan sa numero, ang partisyon nagsugod sa block No. 1, samtang ang zero gigamit alang sa MBR.
Sa una nga partisyon naghimo ako usa ka ext2 file system, ang default block size niini mao ang 4096 bytes, nga gipakita usab sa numero. Mahimo nimong tan-awon ang gidak-on sa block sa file system sama niini:
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
Ang parameter nga atong gikinahanglan mao ang "Block size".
Karon ang makapaikag nga bahin mao kung giunsa pagbasa ang /home/serp/testfile file? Ang usa ka file naglangkob sa usa o daghan pa nga mga bloke sa sistema sa file diin ang datos niini gitipigan. Nahibal-an ang ngalan sa file, unsaon pagpangita niini? Unsang mga bloke ang akong basahon?
Dinhi magamit ang mga inode. Ang ext2fs file system adunay "table" nga adunay impormasyon para sa tanang inode. Ang gidaghanon sa mga inode sa kaso sa ext2fs gitakda sa paghimo sa file system. Atong tan-awon ang gikinahanglan nga mga numero sa "Inode count" parameter sa tune2fs output, i.e. kami adunay 65536 ka piraso. Ang inode naglangkob sa kasayuran nga among gikinahanglan: usa ka lista sa mga bloke sa file system alang sa file nga among gipangita. Giunsa pagpangita ang numero sa inode alang sa usa ka gihatag nga file?
Ang katugbang nga ngalan ug numero sa inode naa sa direktoryo, ug ang usa ka direktoryo sa ext2fs usa ka espesyal nga tipo sa file, i.e. Adunay usab kaugalingon nga numero sa inode. Aron mabuak kining mapintas nga lingin, usa ka "fixed" inode number "2" ang gi-assign sa root directory. Atong tan-awon ang sulod sa inode number 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
Sama sa imong makita, ang direktoryo nga atong gikinahanglan anaa sa block number 579. Diha niini atong makita ang node number alang sa home folder, ug uban pa sa kadena hangtud sa serp directory atong makita ang node number alang sa gihangyo nga file. Kung kalit nga adunay gusto nga susihon kung husto ba ang numero ug kung naa ba ang kinahanglan nga kasayuran, dili kini lisud. Atong buhaton:
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
Sa output mahimo nimong mabasa ang mga ngalan sa mga file sa direktoryo.
Mao nga nakaabut ako sa panguna nga pangutana: "sa unsang mga hinungdan nga mahimoβg mahitabo ang sayup sa pagrekord?"
Natural, kini mahitabo kung walaβy libre nga mga bloke nga nahabilin sa file system. Unsa ang mahimo niini nga kaso? Gawas sa klaro nga "pagtangtang sa bisan unsa nga wala kinahanglana", kinahanglan nimong hinumdoman nga sa ext2,3 ug 4 nga mga sistema sa file adunay usa ka butang sama sa "Reserved block count". Kung imong tan-awon ang listahan sa ibabaw, kami adunay "13094" nga mga bloke. Kini ang mga bloke nga masulat lamang sa root user. apan kung kinahanglan nimo nga dali nga masulbad ang isyu, ingon usa ka temporaryo nga solusyon mahimo nimo kini magamit sa tanan, nga moresulta sa pipila ka libre nga wanang:
root@ubuntu:/mnt# tune2fs -m 0 /dev/sdb1
tune2fs 1.42.9 (4-Feb-2014)
Setting reserved blocks percentage to 0% (0 blocks)
Mga. sa kasagaran, ikaw adunay 5% sa disk space nga dili magamit sa pagsulat, ug tungod sa gidaghanon sa modernong mga disk, kini mahimong gatusan ka gigabytes.
Unsa pa kaha kini? Posible usab nga adunay libre nga mga bloke, apan wala nay mga node. Kini kasagaran mahitabo kon ikaw adunay usa ka hugpong sa mga file sa imong file system nga mas gamay kay sa file system block gidak-on. Giisip nga ang 1 inode gigasto sa 1 nga file o direktoryo, ug sa kinatibuk-an aduna kami (alang sa usa ka gihatag nga sistema sa file) 65536 - ang sitwasyon labaw pa sa realistiko. Kini klaro nga makita gikan sa output sa df command:
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
Ingon sa tin-aw nga makita sa partition / var / www, ang gidaghanon sa mga libre nga bloke sa file system ug ang gidaghanon sa mga libre nga node magkalainlain.
Kung nahutdan ka sa mga inode, dili ko isulti kanimo ang bisan unsang mga spelling, tungod kay ... wala (kung nasayop ko, pahibaloa ko). Mao nga alang sa mga partisyon diin ang gagmay nga mga file modaghan, kinahanglan nimo nga pilion ang sistema sa file nga maalamon. Pananglitan, ang btrfs inodes dili matapos, tungod kay Ang mga bag-o dinamikong gibuhat kung gikinahanglan.
Source: www.habr.com