Ngezikhathi ezithile, ukuze ngithuthele eCentral Distribution Centre, ngixoxisana ezinkampanini ezinkulu ezihlukahlukene, ikakhulukazi eSt. Petersburg naseMoscow, ngesikhundla se-DevOps. Ngiqaphele ukuthi izinkampani eziningi (izinkampani eziningi ezinhle, isibonelo i-Yandex) zibuza imibuzo emibili efanayo:
- yini i-inode;
- yiziphi izizathu ongathola iphutha lokubhala idiski (noma isibonelo: kungani ungase uphelelwe isikhala sediski, ingqikithi iyafana).
Njengoba kuvame ukwenzeka, ngangiqiniseka ukuthi ngangisazi kahle lesi sihloko, kodwa lapho nje ngiqala ukuchaza, kwavela izikhala olwazini. Ukuze ngihlele ulwazi lwami, ngigcwalise izikhala futhi ngingaphinde ngibe namahloni, ngibhala lesi sihloko, mhlawumbe sizoba usizo komunye umuntu.
Ngizoqala phansi, i.e. kusuka ku-hard drive (sizolahla ama-flash drives, ama-SSD nezinye izinto zesimanje; isibonelo, ake sicabangele noma iyiphi i-20 noma i-80 gig drive endala, njengoba usayizi webhulokhi kukhona amabhayithi angu-512).
I-hard drive ayazi ukuthi ingabhekana kanjani ne-byte yesikhala sayo; ihlukaniswe ngokwemibandela ngamabhulokhi. Izinombolo zamabhulokhi ziqala ku-0. (Lokhu kubizwa nge-LBA, imininingwane lapha:
Njengoba kungabonwa emfanekisweni, ngiqoke amabhlogo e-LBA njengezinga le-HDD. Ngendlela, ungabona ukuthi iyiphi i-block size disk yakho efana nalokhu:
root@ubuntu:/home/serp# blockdev --getpbsz /dev/sdb
512
Izinga elingenhla liyi-partition, eyodwa yediski yonke (futhi ukuze kube lula). Imvamisa, kusetshenziswa izinhlobo ezimbili zomaka wokuhlukanisa: i-msdos ne-gpt. Ngokufanelekile, i-msdos ifomethi endala esekela amadiski afika ku-2Tb, i-gpt iyifomethi entsha ekwazi ukubhekana nokufika ku-1 zettabyte yamabhulokhi angama-512 byte. Esimweni sethu, sinokuhlukaniswa kohlobo lwe-msdos, njengoba kungabonakala kumfanekiso, ukuhlukaniswa kuqala nge-block No. 1, kuyilapho i-zero isetshenziselwa i-MBR.
Engxenyeni yokuqala ngidale isistimu yefayela ye-ext2, usayizi wayo we-block ozenzakalelayo ungama-byte angu-4096, obuye aboniswe esithombeni. Ungabuka usayizi webhulokhi yesistimu yefayela kanje:
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
Ipharamitha esiyidingayo ithi “Block size”.
Manje ingxenye ethokozisayo ukuthi ulifunda kanjani ifayela /home/serp/testfile? Ifayela liqukethe ibhulokhi yesistimu yefayela eyodwa noma amaningi lapho idatha yalo igcinwa khona. Ukwazi igama lefayela, ungalithola kanjani? Imaphi amabhlogo okufanele ngiwafunde?
Yilapho ama-inode efika khona. Isistimu yefayela ye-ext2fs ine "ithebula" eliqukethe ulwazi lwawo wonke ama-inode. Inombolo yama-inode esimweni se-ext2fs isethwe lapho kwakhiwa isistimu yefayela. Sibheka izinombolo ezidingekayo kupharamitha "yesibalo se-Inode" yokuphuma kwe-tune2fs, i.e. sinezicucu ezingu-65536. I-inode iqukethe ulwazi esiludingayo: uhlu lwamabhulokhi wesistimu yefayela lefayela esilifunayo. Ungayithola kanjani inombolo ye-inode yefayela elinikeziwe?
Igama elihambisanayo nenombolo ye-inode ziqukethwe kusiqondisi, futhi uhla lwemibhalo ku-ext2fs wuhlobo olukhethekile lwefayela, i.e. futhi inenombolo yayo ye-inode. Ukuze uphule lo mbuthano ononya, inombolo ye-inode "elungisiwe" "2" yabelwa kumkhombandlela wezimpande. Ake sibheke okuqukethwe inombolo ye-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
Njengoba ubona, uhla lwemibhalo esiludingayo luqukethwe kunombolo ye-block 579. Kuyo sizothola inombolo ye-node yefolda yasekhaya, njalo njalo phansi kweketanga kuze kube ku-directory ye-serp sibona inombolo ye-node yefayela eliceliwe. Uma kungazelelwe othile efuna ukuhlola ukuthi inombolo ilungile yini nokuthi ulwazi oludingekayo lukhona, akunzima. Senza:
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
Kokuphumayo ungafunda amagama amafayela ohlwini lwemibhalo.
Ngakho ngiza embuzweni oyinhloko: "ngaziphi izizathu kungenzeka iphutha lokuqopha?"
Ngokwemvelo, lokhu kuzokwenzeka uma kungekho amabhlogo wamahhala asele ohlelweni lwefayela. Yini engenziwa kuleli cala? Ngaphandle kokuthi “susa noma yini engadingekile” esobala, kufanele ukhumbule ukuthi ezinhlelweni zamafayela we-ext2,3 kanye no-4 kunento ethi “Inani lebhulokhi eligodliwe”. Uma ubheka uhlu olungenhla, sinamabhulokhi anjalo "13094". Lawa amabhulokhi abhalwa umsebenzisi wempande kuphela. kodwa uma udinga ukuxazulula ngokushesha inkinga, njengesixazululo sesikhashana ungazenza zitholakale kuwo wonke umuntu, okuholela esikhaleni esithile samahhala:
root@ubuntu:/mnt# tune2fs -m 0 /dev/sdb1
tune2fs 1.42.9 (4-Feb-2014)
Setting reserved blocks percentage to 0% (0 blocks)
Labo. ngokuzenzakalelayo, une-5% yesikhala sediski esingatholakali ekubhaleni, futhi unikezwe umthamo wamadiski esimanje, lokhu kungaba ngamakhulu amagigabhayithi.
Kungaba yini enye? Kungenzeka futhi ukuthi kukhona amabhlogo wamahhala, kodwa awasekho ama-node. Lokhu kuvame ukwenzeka uma unenqwaba yamafayela ohlelweni lwakho lwefayela mancane kunosayizi webhulokhi yesistimu yefayela. Uma kucatshangelwa ukuthi i-inode engu-1 isetshenziswa kufayela elingu-1 noma umkhombandlela, futhi isiyonke sinayo (yesistimu yefayela enikeziwe) 65536 - isimo singaphezu kokungokoqobo. Lokhu kungabonakala ngokucacile ekuphumeni komyalo we-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
Njengoba kubonakala ngokucacile ku-partition / var/www, inani lamabhulokhi amahhala ohlelweni lwefayela kanye nenani lama-node amahhala lihluka kakhulu.
Uma kwenzeka uphelelwa ama-inode, ngeke ngikutshele noma yiziphi iziphonso, ngoba... azikho (uma nginephutha, ungazise). Ngakho-ke kuma-partitions lapho amafayela amancane aphindaphinda khona, kufanele ukhethe uhlelo lwefayela ngokuhlakanipha. Isibonelo, ama-inode e-btrfs awakwazi ukuphela, ngoba Ezintsha zidalwe ngamandla uma kunesidingo.
Source: www.habr.com