Ib yam dab tsi txog inode

Ib ntus, txhawm rau txav mus rau Central Distribution Center, kuv xam phaj ntawm ntau lub tuam txhab loj, feem ntau hauv St. Petersburg thiab Moscow, rau txoj haujlwm DevOps. Kuv pom tias ntau lub tuam txhab (ntau lub tuam txhab zoo, piv txwv li Yandex) nug ob lo lus nug zoo sib xws:

  • dab tsi yog inode;
  • vim li cas koj thiaj tuaj yeem tau txais qhov yuam kev disk (los yog piv txwv: vim li cas koj thiaj li khiav tawm ntawm qhov chaw disk, qhov tseem ceeb yog tib yam).

Raws li feem ntau tshwm sim, kuv paub tseeb tias kuv paub lub ntsiab lus no zoo, tab sis sai li sai tau thaum kuv pib piav qhia, qhov sib txawv ntawm kev paub tau pom meej. Txhawm rau txhim kho kuv txoj kev paub, sau rau hauv qhov khoob thiab tsis txaj muag rau kuv tus kheej, Kuv tabtom sau tsab xov xwm no, tej zaum nws yuav muaj txiaj ntsig rau lwm tus.

Kuv yuav pib ntawm hauv qab, i.e. los ntawm lub hard drive (peb yuav muab pov tseg flash drives, SSDs thiab lwm yam niaj hnub no; piv txwv li, cia peb xav txog ib qho 20 lossis 80 gig qub tsav, txij li qhov block loj muaj 512 bytes).

Lub hard drive tsis paub yuav ua li cas hais txog nws qhov chaw byte byte; nws yog conditionally muab faib ua blocks. Thaiv tus lej pib ntawm 0. (Qhov no hu ua LBA, cov ntsiab lus ntawm no: ru.wikipedia.org/wiki/LBA)

Ib yam dab tsi txog inode

Raws li tuaj yeem pom los ntawm daim duab, kuv tau xaiv LBA blocks raws li qib HDD. Los ntawm txoj kev, koj tuaj yeem pom dab tsi thaiv qhov loj koj disk muaj li no:

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

Cov theem saum toj no yog muab faib, ib qho rau tag nrho disk (dua rau simplicity). Feem ntau, ob hom kev muab faib markup yog siv: msdos thiab gpt. Raws li, msdos yog hom qub uas txhawb nqa disks txog 2Tb, gpt yog hom tshiab muaj peev xwm hais txog 1 zettabyte ntawm 512 byte blocks. Nyob rau hauv peb rooj plaub, peb muaj ib tug faib ntawm hom msdos, raws li tau pom los ntawm daim duab, qhov muab faib pib nrog block No. 1, thaum xoom yog siv rau MBR.

Hauv thawj qhov kev faib kuv tau tsim ib qho ext2 cov ntaub ntawv kaw lus, nws qhov loj me me yog 4096 bytes, uas kuj tau tshwm sim hauv daim duab. Koj tuaj yeem saib cov ntaub ntawv kaw qhov loj li no:

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

Qhov parameter peb xav tau yog "Block size".

Tam sim no qhov nthuav yog yuav ua li cas nyeem cov ntaub ntawv /home/serp/testfile? Cov ntaub ntawv muaj ib lossis ntau cov ntaub ntawv kaw lus uas nws cov ntaub ntawv khaws cia. Paub cov ntaub ntawv npe, yuav nrhiav tau li cas? Kuv yuav tsum nyeem cov blocks twg?

Qhov no yog qhov uas inodes tuaj yeem ua ke. Lub ext2fs cov ntaub ntawv kaw lus muaj "rooj" uas muaj cov ntaub ntawv rau txhua qhov inodes. Tus naj npawb ntawm inodes nyob rau hauv cov ntaub ntawv ntawm ext2fs yog teem thaum tsim cov ntaub ntawv system. Peb saib cov lej xav tau hauv "Inode suav" parameter ntawm tune2fs tso zis, i.e. peb muaj 65536 daim. Lub inode muaj cov ntaub ntawv peb xav tau: ib daim ntawv teev cov ntaub ntawv kaw lus rau cov ntaub ntawv peb tab tom nrhiav. Yuav ua li cas thiaj nrhiav tau tus lej inode rau cov ntaub ntawv muab?

Cov npe sib xws thiab tus lej inode muaj nyob rau hauv phau ntawv qhia, thiab cov npe hauv ext2fs yog hom ntaub ntawv tshwj xeeb, piv txwv li. kuj muaj nws tus lej inode. Txhawm rau rhuav tshem lub voj voog no, ib qho "kho" inode naj npawb "2" raug xa mus rau hauv paus directory. Cia peb saib cov ntsiab lus ntawm inode naj npawb 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

Raws li koj tuaj yeem pom, phau ntawv qhia peb xav tau muaj nyob rau hauv tus lej 579. Nyob rau hauv nws peb yuav pom tus naj npawb ntawm lub tsev nplaub tshev, thiab yog li nyob rau hauv cov saw hlau kom txog rau thaum nyob rau hauv serp directory peb pom tus naj npawb ntawm cov ntaub ntawv thov. Yog tias mam li nco dheev ib tug neeg xav tshuaj xyuas seb tus lej puas yog thiab seb cov ntaub ntawv tsim nyog puas nyob ntawd, nws tsis yooj yim. Peb ua:

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

Hauv cov zis koj tuaj yeem nyeem cov npe ntawm cov ntaub ntawv hauv phau ntawv teev npe.

Yog li kuv tuaj rau lo lus nug tseem ceeb: "Vim li cas vim li cas thiaj tuaj yeem kaw qhov yuam kev tshwm sim?"

Lawm, qhov no yuav tshwm sim yog tias tsis muaj cov blocks dawb nyob rau hauv cov ntaub ntawv kaw lus. Yuav ua li cas rau qhov no? Dhau li ntawm qhov pom tseeb "rho tawm yam tsis tsim nyog", koj yuav tsum nco ntsoov tias hauv ext2,3 thiab 4 cov ntaub ntawv muaj xws li "Reserved block count". Yog tias koj saib cov npe saum toj no, peb muaj "13094" cov blocks zoo li no. Cov no yog cov blocks sau tsuas yog los ntawm tus neeg siv hauv paus. tab sis yog tias koj xav tau daws qhov teeb meem sai sai, raws li kev daws teeb meem ib ntus koj tuaj yeem ua rau lawv muaj rau txhua tus, ua rau qee qhov chaw dawb:

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

Cov. los ntawm lub neej ntawd, koj muaj 5% ntawm qhov chaw disk tsis muaj rau kev sau ntawv, thiab muab qhov ntim ntawm cov disks niaj hnub no, qhov no tuaj yeem yog ntau pua gigabytes.

Yuav ua li cas ntxiv? Nws tseem ua tau tias muaj cov blocks dawb, tab sis tsis muaj cov nodes ntxiv. Qhov no feem ntau tshwm sim yog tias koj muaj ib pawg ntawm cov ntaub ntawv ntawm koj cov ntaub ntawv kaw lus uas me dua cov ntaub ntawv kaw qhov loj. Xav tias 1 inode yog siv rau 1 cov ntaub ntawv lossis phau ntawv qhia, thiab tag nrho peb muaj (rau cov ntaub ntawv muab) 65536 - qhov xwm txheej yog ntau tshaj qhov tseeb. Qhov no tuaj yeem pom meej los ntawm cov zis ntawm df hais kom ua:

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

Raws li pom meej meej ntawm /var/www muab faib, tus naj npawb ntawm cov blocks dawb hauv cov ntaub ntawv kaw lus thiab cov naj npawb ntawm cov dawb no sib txawv heev.

Yog hais tias koj khiav tawm ntawm inodes, kuv yuav tsis qhia koj ib tug spell, vim hais tias ... tsis muaj leej twg (yog tias kuv tsis yog, qhia rau kuv paub). Yog li ntawd rau cov partitions uas cov ntaub ntawv me me sib npaug, koj yuav tsum xaiv cov ntaub ntawv kaw lus ntse. Piv txwv li, btrfs inodes tsis tuaj yeem xaus, vim Cov tshiab yog dynamically tsim yog tsim nyog.

Tau qhov twg los: www.hab.com

Ntxiv ib saib