Zina za inode

Nthawi ndi nthawi, kuti ndisamukire ku Central Distribution Center, ndimayankhulana ndi makampani akuluakulu osiyanasiyana, makamaka ku St. Petersburg ndi Moscow, chifukwa cha udindo wa DevOps. Ndinawona kuti makampani ambiri (makampani ambiri abwino, mwachitsanzo Yandex) amafunsa mafunso awiri ofanana:

  • inode ndi chiyani;
  • pazifukwa ziti zomwe mungapeze cholakwika cholemba disk (kapena mwachitsanzo: chifukwa chake mutha kutha danga la disk, tanthauzo lake ndilofanana).

Monga momwe zimakhalira nthawi zambiri, ndinali wotsimikiza kuti ndikuidziwa bwino nkhaniyi, koma nditangoyamba kufotokoza, kusiyana kwa chidziwitso kunaonekera. Kuti ndikonzekere chidziwitso changa, lembani mipata ndikusiya kudzichititsa manyazi, ndikulemba nkhaniyi, mwinamwake idzakhala yothandiza kwa wina.

Ndiyambira pansi, i.e. kuchokera pa hard drive (tidzataya zoyendetsa, ma SSD ndi zinthu zina zamakono; mwachitsanzo, tiyeni tiganizire za 20 kapena 80 gig old drive, popeza kukula kwake kuli 512 byte).

Ma hard drive sadziwa momwe angayankhire danga lake byte; imagawidwa m'ma block. Kuwerengera kwa block kumayambira pa 0. (Izi zimatchedwa LBA, zambiri apa: ru.wikipedia.org/wiki/LBA)

Zina za inode

Monga tikuwonera pachithunzichi, ndidasankha midadada ya LBA ngati mulingo wa HDD. Mwa njira, mutha kuwona kukula kwa block disk yanu ili motere:

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

Mulingo womwe uli pamwambapa ndi gawo, limodzi la disk yonse (kachiwirinso kuphweka). Nthawi zambiri, mitundu iwiri ya magawo ogawa imagwiritsidwa ntchito: msdos ndi gpt. Chifukwa chake, msdos ndi mtundu wakale womwe umathandizira ma disks mpaka 2Tb, gpt ndi mtundu watsopano womwe ungathe kuwongolera mpaka 1 zettabyte ya 512 byte blocks. Kwa ife, tili ndi gawo la mtundu wa msdos, monga momwe tingawonere kuchokera pachithunzichi, kugawa kumayamba ndi chipika No. 1, pamene zero imagwiritsidwa ntchito kwa MBR.

Mugawo loyamba ndidapanga fayilo ya ext2, kukula kwake kwa block ndi 4096 byte, komwe kumawonekeranso pachithunzichi. Mutha kuwona kukula kwa block system yamafayilo motere:

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

Parameter yomwe tikufuna ndi "Block size".

Tsopano gawo losangalatsa ndi momwe mungawerenge /home/serp/testfile file? Fayilo imakhala ndi midadada imodzi kapena zingapo zamafayilo momwe deta yake imasungidwa. Kudziwa dzina lafayilo, mungalipeze bwanji? Ndizilemba ziti?

Apa ndipamene ma inode amafika pothandiza. Dongosolo la fayilo la ext2fs lili ndi "tebulo" lomwe lili ndi chidziwitso cha ma innode onse. Chiwerengero cha ma inode pa nkhani ya ext2fs imayikidwa popanga fayilo. Timayang'ana manambala ofunikira mu "Inode count" parameter ya tune2fs output, i.e. tili ndi zidutswa za 65536. Inode ili ndi zambiri zomwe tikufuna: mndandanda wamafayilo amafayilo omwe tikufuna. Kodi mungapeze bwanji nambala ya inode ya fayilo yomwe mwapatsidwa?

Dzina lofananira ndi nambala ya inode zili mu bukhuli, ndipo chikwatu mu ext2fs ndi mtundu wapadera wa fayilo, i.e. ilinso ndi nambala yake ya inode. Kuti aphwanye bwalo loyipali, nambala ya inode "yokhazikika" "2" idaperekedwa ku bukhu la mizu. Tiyeni tiwone zomwe zili mu inode nambala 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

Monga mukuonera, bukhu lomwe tikufunikira liri mu chipika nambala 579. Mmenemo tidzapeza nambala ya node ya foda yakunyumba, ndi zina zotero pansi pa unyolo mpaka mu serp directory tikuwona nambala ya node ya fayilo yofunsidwa. Ngati mwadzidzidzi wina akufuna kufufuza ngati chiwerengerocho chiri cholondola komanso ngati chidziwitso chofunikira chilipo, sizovuta. Timachita:

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

Mu linanena bungwe mukhoza kuwerenga mayina a owona mu ndandanda.

Chifukwa chake ndimabwera ku funso lalikulu: "chifukwa chiyani cholakwika chojambulira chingachitike?"

Mwachilengedwe, izi zidzachitika ngati palibe midadada yaulere yotsalira mu fayilo yamafayilo. Nanga tingatani pamenepa? Kupatula zodziwikiratu "chotsani chilichonse chosafunikira", muyenera kukumbukira kuti mu fayilo ya ext2,3 ndi 4 pali zinthu monga "Kuwerengera kwa block". Mukayang'ana zomwe zili pamwambapa, tili ndi "13094" midadada yotere. Izi ndi midadada yolembedwa ndi wogwiritsa ntchito mizu. koma ngati mukufuna kuthetsa vutoli mwachangu, ngati yankho kwakanthawi mutha kuzipangitsa kuti zipezeke kwa aliyense, zomwe zimapangitsa kuti pakhale malo aulere:

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

Iwo. mwachisawawa, muli ndi 5% ya malo a disk omwe sapezeka kuti alembedwe, ndipo mutapatsidwa kuchuluka kwa ma disks amakono, izi zikhoza kukhala mazana a gigabytes.

Chinanso chingakhale chiyani? Ndizothekanso kuti pali midadada yaulere, koma palibenso ma node. Izi zimachitika kawirikawiri ngati muli ndi gulu la mafayilo pa fayilo yanu yomwe ndi yaying'ono kuposa kukula kwa chipika cha fayilo. Poganizira kuti 1 inode imagwiritsidwa ntchito pa fayilo ya 1 kapena chikwatu, ndipo palimodzi tili ndi (pa fayilo yopatsidwa) 65536 - mkhalidwewo ndi wochuluka kuposa zenizeni. Izi zitha kuwoneka momveka bwino kuchokera pazotsatira za lamulo la 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

Monga zikuwonekera bwino pa / var/www kugawa, kuchuluka kwa midadada yaulere mu fayilo yamafayilo ndi kuchuluka kwa node zaulere zimasiyana kwambiri.

Ngati mutatha ma innode, sindikuwuzani zamatsenga, chifukwa ... palibe (ngati ndikulakwitsa, ndidziwitse). Chifukwa chake pamagawo omwe mafayilo ang'onoang'ono amachulukira, muyenera kusankha fayilo mwanzeru. Mwachitsanzo, btrfs inodes sangathe kutha, chifukwa Zatsopano zimapangidwa mwamphamvu ngati pakufunika.

Source: www.habr.com

Kuwonjezera ndemanga