ስለ inode የሆነ ነገር

ከጊዜ ወደ ጊዜ, ወደ CRS ለመሸጋገር, በተለያዩ ትላልቅ ኩባንያዎች ውስጥ በተለይም በሴንት ፒተርስበርግ እና ሞስኮ ውስጥ ለዴቭኦፕስ ቦታ ቃለ መጠይቅ አደርጋለሁ. ብዙ ኩባንያዎች (ብዙ ጥሩ ኩባንያዎች ለምሳሌ Yandex) ሁለት ተመሳሳይ ጥያቄዎችን ሲጠይቁ አስተውያለሁ-

  • ኢኖድ ምንድን ነው
  • በየትኞቹ ምክንያቶች የዲስክ መፃፍ ስህተት ሊያገኙ ይችላሉ (ወይም ለምሳሌ: ለምን የዲስክ ቦታ ሊያልቅ ይችላል, ዋናው ነገር አንድ ነው).

ብዙ ጊዜ እንደሚሆነው፣ ይህንን ርዕስ በደንብ እንደማውቀው እርግጠኛ ነበርኩ፣ ነገር ግን ማብራራት እንደጀመርኩ፣ የእውቀት ክፍተቶች ነበሩ። እውቀቴን ለማደራጀት ፣ ክፍተቶችን ለመሙላት እና ከአሁን በኋላ ላለማዋረድ ፣ ይህንን ጽሑፍ እየፃፍኩ ነው ፣ ምናልባት ለሌላ ሰው ጠቃሚ ሊሆን ይችላል።

"ከታች" እጀምራለሁ, ማለትም. ከሃርድ ዲስክ (ፍላሽ አንፃፊዎችን ፣ ኤስኤስዲዎችን እና ሌሎች ዘመናዊ ነገሮችን እናስወግዳለን ፣ ለምሳሌ ማንኛውንም 20 ወይም 80 ጊጋባይት አሮጌ ዲስክ አስቡበት ፣ ምክንያቱም እዚያ የማገጃው መጠን 512 ባይት ነው)።

ሃርድ ዲስክ የቦታውን ባይት በባይት ማስተናገድ አይችልም፤ ሁኔታዊ በሆነ መልኩ በብሎኮች የተከፋፈለ ነው። አግድ ቁጥር ከ 0 ይጀምራል (ይህ LBA ይባላል፣ ዝርዝሮች እዚህ፡- en.wikipedia.org/wiki/LBA)

ስለ inode የሆነ ነገር

ከሥዕሉ ላይ እንደሚታየው፣ LBA ብሎኮችን እንደ HDD ደረጃ ሾምኩ። በነገራችን ላይ የዲስክዎ የማገጃ መጠን ይህን ይመስላል።

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

ከላይ ያለው ደረጃ ክፋዩን ያመላክታል, አንዱ ለጠቅላላው ዲስክ (እንደገና, ቀላልነት). አብዛኛውን ጊዜ ሁለት ዓይነት ክፍፍል ጥቅም ላይ ይውላሉ፡ msdos እና gpt. በዚህ መሰረት msdos እስከ 2Tb የሚደርሱ ዲስኮችን የሚደግፍ አሮጌ ፎርማት ነው gpt ከ 1 ባይት ብሎኮች እስከ 512 zettabyte የሚደርስ አዲስ ፎርማት ነው። በእኛ ሁኔታ, ከሥዕሉ ላይ እንደሚታየው የ msdos ዓይነት ክፍፍል አለን, ክፋዩ የሚጀምረው በብሎክ ቁጥር 1 ሲሆን, ዜሮ ለ MBR ጥቅም ላይ ይውላል.

በመጀመሪያው ክፍል የ ext2 ፋይል ስርዓት ፈጠርኩ ፣ እሱም በምስሉ ላይ የሚታየው ነባሪው 4096 ባይት መጠን ያለው ነው። የፋይል ስርዓቱን የማገጃ መጠን እንደሚከተለው ማየት ይችላሉ-

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

የሚያስፈልገን መለኪያ "መጠንን አግድ" ነው.

አሁን አስደሳችው ክፍል ፋይሉን /home/serp/testfileን እንዴት ማንበብ ይቻላል? ፋይሉ ውሂቡን የሚያከማች አንድ ወይም ከዚያ በላይ የፋይል ስርዓት ብሎኮችን ያካትታል። የፋይሉን ስም ማወቅ, እንዴት ማግኘት ይቻላል? ለማንበብ ምን ያግዳል?

ኢኖዶች ጠቃሚ ሆነው የሚመጡበት ቦታ ይህ ነው። የ ext2fs የፋይል ሲስተም በሁሉም ኢንኖዶች ላይ መረጃን የያዘ "ጠረጴዛ" አለው። በ ext2fs ሁኔታ ውስጥ ያሉት የኢኖዶች ብዛት የፋይል ስርዓቱ ሲፈጠር ይዘጋጃል። በ tune2fs ውፅዓት በ "Inode count" መለኪያ ውስጥ አስፈላጊዎቹን ቁጥሮች እንመለከታለን, ማለትም. 65536 ቁርጥራጮች አሉን. ኢንኖዱ የምንፈልገውን መረጃ ይዟል፡ ለፈለግነው ፋይል የፋይል ስርዓት ብሎኮች ዝርዝር። ለአንድ ፋይል የኢኖድ ቁጥር እንዴት ማግኘት ይቻላል?

ተጓዳኝ ስም እና የኢኖድ ቁጥሩ በማውጫ ውስጥ ተካትቷል, እና በ ext2fs ውስጥ ያለው ማውጫ ልዩ የፋይል አይነት ነው, ማለትም. እንዲሁም የራሱ የኢኖድ ቁጥር አለው። ይህንን አዙሪት ለመስበር፣ ለስር ማውጫው "ቋሚ" የሆነ "2" ቁጥር ተመድቧል። የኢኖድ ቁጥር 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

እንደሚመለከቱት, እኛ የምንፈልገው ማውጫ በብሎክ ቁጥር 579. በውስጡ, ለሆም ፎልደር መስቀለኛ ቁጥር እናገኛለን, እና በሰንሰለቱ ውስጥ የተፈለገውን ፋይል መስቀለኛ ቁጥር በሰርፕ ማውጫ ውስጥ እስክናይ ድረስ እናያለን. . በድንገት አንድ ሰው ቁጥሩ ትክክል መሆኑን ማረጋገጥ ከፈለገ፣ እና እዚያ አስፈላጊው መረጃ ካለ፣ አስቸጋሪ አይደለም። እናደርጋለን:

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

በውጤቱ ውስጥ የፋይሎችን ስም በማውጫው ውስጥ ማንበብ ይችላሉ.

ስለዚህ ወደ ዋናው ጥያቄ መጣሁ: "በየትኞቹ ምክንያቶች የመጻፍ ስህተት ሊፈጠር ይችላል"?

በተፈጥሮ ፣ የፋይል ስርዓቱ ነፃ ብሎኮች ከሌሉ ይህ ይከሰታል። በዚህ ጉዳይ ላይ ምን ማድረግ ይቻላል? ግልጽ "አላስፈላጊ ነገርን ሰርዝ" ከሚለው በተጨማሪ በ ext2,3 እና 4 የፋይል ስርዓቶች ውስጥ እንደ "የተያዙ እገዳዎች ብዛት" የሚባል ነገር እንዳለ መታወስ አለበት. ከላይ ያለውን ዝርዝር ከተመለከቱ, እንደዚህ ያሉ እገዳዎች "13094" አሉን. እነዚህ በስር ተጠቃሚ ብቻ የሚጻፉ ብሎኮች ናቸው። ነገር ግን ጉዳዩን በፍጥነት መፍታት ከፈለጉ፣ እንደ ጊዜያዊ መፍትሄ ለሁሉም ሰው እንዲደርሱ ማድረግ ይችላሉ፣ በዚህም ምክንያት የተወሰነ ነፃ ቦታ:

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

እነዚያ። በነባሪ፣ 5% የሚሆነው የዲስክ ቦታህ የማይጻፍ ነው፣ እና ከዘመናዊ ዲስኮች መጠን አንጻር ይህ በመቶዎች የሚቆጠሩ ጊጋባይት ሊሆን ይችላል።

ሌላ ምን ሊሆን ይችላል? በተጨማሪም ነጻ ብሎኮች ሊኖሩ ይችላሉ, ግን አንጓዎቹ አልቀዋል. ይሄ ብዙውን ጊዜ የሚከሰተው በፋይል ሲስተምዎ ውስጥ ከፋይል ሲስተሙ የማገጃ መጠን ያነሱ ፋይሎች ካሉዎት ነው። 1 ኢንዶድ በ 1 ፋይል ወይም ማውጫ ላይ እንደሚውል ግምት ውስጥ በማስገባት በአጠቃላይ 65536 (ለተወሰነ የፋይል ስርዓት) አሉን, ሁኔታው ​​ከእውነታው በላይ ነው. ይህ ከዲኤፍ ትእዛዝ ውፅዓት በግልፅ ይታያል፡-

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 ላይ በግልፅ እንደሚታየው የነጻ የፋይል ሲስተም ብሎኮች ቁጥር እና የነፃ ኖዶች ብዛት በእጅጉ ይለያያሉ።

የ inodes ካለቀብህ፣ ድግምት አልነግርህም፣ ምክንያቱም እነሱ አይደሉም (ትክክል ካልሆነ, አሳውቀኝ). ስለዚህ ትናንሽ ፋይሎች የሚራቡባቸው ክፍልፋዮች የፋይል ስርዓቱን በትክክል መምረጥ አለብዎት። ለምሳሌ, btrfs inodes ሊያልቅ አይችልም, ምክንያቱም አዲሶቹ እንደ አስፈላጊነቱ በተለዋዋጭ ሁኔታ ይፈጠራሉ።

ምንጭ: hab.com

አስተያየት ያክሉ