inode အကြောင်းတစ်ခုခု

အခါအားလျော်စွာ၊ Central Distribution Center သို့ပြောင်းရွှေ့ရန်အတွက် DevOps ရာထူးအတွက် အဓိကအားဖြင့် စိန့်ပီတာစဘတ်နှင့်မော်စကိုရှိ ကုမ္ပဏီကြီးများစွာတွင် ကျွန်ုပ်အင်တာဗျူးခဲ့ပါသည်။ ကုမ္ပဏီများစွာ (ကုမ္ပဏီကောင်းများစွာ၊ ဥပမာ Yandex) သည် အလားတူမေးခွန်းနှစ်ခုမေးသည်ကို ကျွန်ုပ်သတိပြုမိခဲ့သည်-

  • inode ဆိုတာဘာလဲ။
  • မည်သည့်အကြောင်းများကြောင့် disk ရေးမှုအမှားကိုသင်ရနိုင်သနည်း (ဥပမာ- disk space အဘယ်ကြောင့်ကုန်သွားသနည်း၊ အနှစ်သာရသည်အတူတူပင်ဖြစ်သည်)။

မကြာခဏဆိုသလိုပဲ ဒီအကြောင်းအရာကို ကောင်းကောင်းသိကြောင်း သေချာပေမယ့် ရှင်းပြပြီးတာနဲ့ အသိပညာကွာဟချက်တွေဟာ ထင်ရှားလာပါတယ်။ ကျွန်ုပ်၏အသိပညာကိုစနစ်တကျဖြစ်အောင်၊ ကွက်လပ်များကိုဖြည့်ပြီး ကိုယ့်ကိုယ်ကိုအရှက်ရမနေတော့ပါ၊ ကျွန်ုပ်သည်ဤဆောင်းပါးကိုရေးနေသည်၊ အခြားသူအတွက်အသုံးဝင်လိမ့်မည်ဖြစ်နိုင်သည်။

ငါအောက်ခြေကနေစမယ်, i.e. ဟာ့ဒ်ဒရိုက်တစ်ခုမှ (ကျွန်ုပ်တို့သည် flash drives၊ SSDs နှင့် အခြားခေတ်မီသောအရာများကို စွန့်ပစ်ပါမည်၊ ဥပမာ၊ ဘလောက်အရွယ်အစားမှာ 20 bytes ရှိသောကြောင့် 80 သို့မဟုတ် 512 gig အဟောင်းကို စဉ်းစားကြည့်ကြပါစို့)။

ဟာ့ဒ်ဒရိုက်သည် ၎င်း၏ space byte byte ကို မည်ကဲ့သို့ ကိုင်တွယ်ဖြေရှင်းရမည်ကို မသိပါ၊ ၎င်းကို ပိတ်ဆို့ခြင်းများအဖြစ် သတ်မှတ်ပေးထားသည်။ ပိတ်ဆို့နံပါတ်များကို 0 မှ စတင်သည်။ (၎င်းကို LBA ဟုခေါ်သည်၊ ဤနေရာတွင် အသေးစိတ်အချက်များ- ru.wikipedia.org/wiki/LBA)

inode အကြောင်းတစ်ခုခု

ပုံမှမြင်နိုင်သည်အတိုင်း၊ ကျွန်ုပ်သည် LBA လုပ်ကွက်များကို HDD အဆင့်အဖြစ်သတ်မှတ်ခဲ့သည်။ စကားမစပ်၊ သင့်ဒစ်ခ်တွင် ဤကဲ့သို့သော ပိတ်ဆို့အရွယ်အစားကို သင်မြင်နိုင်သည်-

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

အထက်ဖော်ပြပါအဆင့်သည် အပိုင်းတစ်ခုဖြစ်ပြီး၊ ဒစ်တစ်ခုလုံးအတွက် တစ်ခုဖြစ်သည် (ရိုးရှင်းမှုအတွက် ထပ်မံ)။ အများစုမှာ partition markup အမျိုးအစားနှစ်မျိုးကို အသုံးပြုသည်- msdos နှင့် gpt. ထို့ကြောင့်၊ msdos သည် 2Tb အထိ disks များကို ပံ့ပိုးပေးသည့် ဖော်မတ်ဟောင်းဖြစ်ပြီး gpt သည် 1 zettabyte မှ 512 byte blocks အထိ ဖြေရှင်းနိုင်သော ဖော်မတ်အသစ်ဖြစ်သည်။ ကျွန်ုပ်တို့၏အခြေအနေတွင်၊ ကျွန်ုပ်တို့တွင် အမျိုးအစား msdos အပိုင်းတစ်ခုရှိသည်၊ ပုံတွင်တွေ့နိုင်သည်အတိုင်း၊ အခန်းကန့်သည် နံပါတ် 1 ဖြင့်စတင်သည်၊ သုညကို MBR အတွက်အသုံးပြုသော်လည်း၊

ကျွန်တော် ext2 ဖိုင်စနစ်တစ်ခုကို ဖန်တီးခဲ့တဲ့ ပထမအပိုင်းမှာ၊ သူ့ရဲ့ ပုံသေ ဘလောက်ဆိုဒ်က 4096 bytes ဖြစ်ပြီး၊ ပုံထဲမှာလည်း ထင်ဟပ်နေပါတယ်။ ဖိုင်စနစ်ပိတ်ဆို့သည့်အရွယ်အစားကို ဤကဲ့သို့ကြည့်ရှုနိုင်သည်-

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

ကျွန်ုပ်တို့လိုအပ်သော ကန့်သတ်ချက်မှာ "Block size" ဖြစ်သည်။

အခု စိတ်ဝင်စားစရာကောင်းတဲ့ အပိုင်းကတော့ /home/serp/testfile ဖိုင်ကို ဘယ်လိုဖတ်ရမလဲ။ ဖိုင်တစ်ခုတွင် ၎င်း၏ဒေတာကို သိမ်းဆည်းထားသည့် တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော ဖိုင်စနစ်ပိတ်ဆို့ခြင်းများ ပါဝင်သည်။ ဖိုင်နာမည်သိရင် ဘယ်လိုရှာမလဲ။ ဘယ်တုံးတွေကို ဖတ်ရမလဲ။

ဤနေရာတွင် အင်နိုဒက်များ အသုံးဝင်သည်။ ext2fs ဖိုင်စနစ်တွင် inode အားလုံးအတွက် အချက်အလက်ပါရှိသော "ဇယား" ရှိသည်။ ext2fs ၏ဖြစ်ရပ်တွင် inode အရေအတွက်ကို ဖိုင်စနစ်ဖန်တီးသောအခါတွင် သတ်မှတ်သည်။ tune2fs output ၏ "Inode count" parameter တွင် လိုအပ်သော နံပါတ်များကို ကြည့်ရှုသည်။ ကျွန်ုပ်တို့တွင် 65536 အပိုင်းများရှိသည်။ inode တွင် ကျွန်ုပ်တို့လိုအပ်သော အချက်အလက်ပါရှိသည်- ကျွန်ုပ်တို့ရှာဖွေနေသော ဖိုင်အတွက် ဖိုင်စနစ်ပိတ်ဆို့ခြင်းစာရင်း။ ပေးထားသောဖိုင်တစ်ခုအတွက် inode နံပါတ်ကို မည်သို့ရှာရမည်နည်း။

သက်ဆိုင်သောအမည်နှင့် အိုင်အိုဒနံပါတ်ကို လမ်းညွှန်တွင် ပါ၀င်ပြီး ext2fs ရှိ လမ်းညွှန်သည် အထူးဖိုင်အမျိုးအစားဖြစ်သည်၊ ဆိုလိုသည်မှာ၊ ၎င်း၏ကိုယ်ပိုင် inode နံပါတ်လည်းရှိသည်။ ဤဆိုးရွားသောစက်ဝိုင်းကို ချိုးဖျက်ရန်အတွက်၊ "ပုံသေ" အိုင်ဒီယာနံပါတ် "2" ကို အရင်းလမ်းညွှန်သို့ သတ်မှတ်ပေးခဲ့သည်။ 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

သင်တွေ့မြင်ရသည့်အတိုင်း၊ ကျွန်ုပ်တို့လိုအပ်သော လမ်းညွှန်ကို block နံပါတ် 579 တွင် ပါ၀င်ပါသည်။ ၎င်းတွင် home folder အတွက် node နံပါတ်ကို တွေ့ရမည်ဖြစ်ပြီး serp directory တွင် တောင်းဆိုထားသော file အတွက် node နံပါတ်ကို တွေ့သည်အထိ ကွင်းဆက်ပေါ်တွင် ချိတ်ဆက်ထားသည်။ အကယ်၍ တစ်စုံတစ်ယောက်သည် နံပါတ်မှန်ကန်ခြင်းရှိ၊ မရှိကို ရုတ်တရက် စစ်ဆေးလိုပါက ၎င်းတွင် လိုအပ်သောအချက်အလက်များ ရှိ၊ မရှိ စစ်ဆေးရန် မခက်ခဲပါ။ ကျွန်ုပ်တို့လုပ်သည်-

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

output တွင် directory အတွင်းရှိဖိုင်များ၏အမည်များကိုသင်ဖတ်နိုင်သည်။

ထို့ကြောင့် ကျွန်ုပ်သည် အဓိကမေးခွန်းကို ရောက်ရှိလာသည်- "မည်ကဲ့သို့ မှတ်တမ်းတင်မှု အမှားအယွင်း ဖြစ်ပေါ်နိုင်သနည်း"

ပုံမှန်အားဖြင့်၊ ဖိုင်စနစ်တွင် အခမဲ့လုပ်ကွက်များ မကျန်ပါက ၎င်းသည် ဖြစ်ပေါ်လာမည်ဖြစ်သည်။ ဤကိစ္စတွင် အဘယ်အရာလုပ်ဆောင်နိုင်သနည်း။ သိသာထင်ရှားသော "မလိုအပ်သောအရာကိုဖျက်မည်" အပြင်၊ ext2,3 နှင့် 4 ဖိုင်စနစ်များတွင် "Reserved block count" ကဲ့သို့သောအရာရှိသည်ကိုသတိရသင့်သည်။ အထက်ဖော်ပြပါစာရင်းကိုကြည့်ပါက၊ ကျွန်ုပ်တို့တွင် “13094” ထိုကဲ့သို့သောလုပ်ကွက်များရှိသည်။ ဤအရာများသည် အမြစ်အသုံးပြုသူမှသာလျှင် ရေးသားနိုင်သော ပိတ်ဆို့မှုများဖြစ်သည်။ သို့သော် အကယ်၍ သင်သည် ပြဿနာကို အမြန်ဖြေရှင်းရန် လိုအပ်ပါက၊ ယာယီဖြေရှင်းချက်အနေဖြင့် ၎င်းတို့ကို လူတိုင်းရရှိနိုင်စေရန်အတွက် နေရာလွတ်အချို့ကို ဖြစ်ပေါ်စေသည်-

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

အဲဒါတွေ။ ပုံမှန်အားဖြင့်၊ သင့်တွင် စာရေးရန်မရရှိနိုင်သော disk space ၏ 5% ရှိပြီး ခေတ်မီဒစ်များ၏ ပမာဏကိုပေး၍ ၎င်းသည် ရာနှင့်ချီသော ဂစ်ဂါဘိုက်များ ဖြစ်နိုင်သည်။

တခြားဘာဖြစ်နိုင်မလဲ။ အခမဲ့လုပ်ကွက်များ လည်းရှိနိုင်သော်လည်း နောက်ထပ် node များ မရှိတော့ပါ။ သင့်တွင် ဖိုင်စနစ်ပိတ်ဆို့သည့်အရွယ်အစားထက်သေးငယ်သော သင့်ဖိုင်စနစ်တွင် ဖိုင်အများအပြားရှိလျှင် ၎င်းသည် များသောအားဖြင့် ဖြစ်ပေါ်တတ်သည်။ 1 inode ကို 1 ဖိုင် သို့မဟုတ် directory တွင် သုံးစွဲသည်ဟု ယူဆကာ စုစုပေါင်း (ပေးထားသည့် ဖိုင်စနစ်အတွက်) 65536 ရှိသည် - အခြေအနေသည် လက်တွေ့ဆန်သည်ထက် ပိုပါသည်။ df command ၏ output မှ၎င်းကိုရှင်းလင်းစွာမြင်နိုင်သည်။

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

/var/www partition တွင် ရှင်းလင်းစွာမြင်နေရသည့်အတိုင်း၊ ဖိုင်စနစ်ရှိ အခမဲ့လုပ်ကွက်အရေအတွက်နှင့် အခမဲ့ node အရေအတွက်သည် အလွန်ကွာခြားပါသည်။

မင်း အိုင်နိုဒက်တွေ ကုန်သွားရင် ငါ မင်းကို စာလုံးပေါင်း တစ်လုံးမှ မပြောဘူးဆိုတော့... တစ်ခုမှ မရှိဘူး (မှားတာရှိရင် အကြောင်းကြားပါ)။ ထို့ကြောင့် သေးငယ်သောဖိုင်များ များပြားသည့် အပိုင်းများအတွက်၊ သင်သည် ဖိုင်စနစ်အား ပညာရှိစွာ ရွေးချယ်သင့်သည်။ ဥပမာအားဖြင့်၊ btrfs inodes သည် မဆုံးနိုင်သောကြောင့်ဖြစ်သည်။ လိုအပ်ပါက အသစ်များကို dynamically ဖန်တီးပါသည်။

source: www.habr.com

မှတ်ချက် Add