Hal ngeunaan inode

Périodik, dina urutan pindah ka Center Distribusi Tengah, abdi wawancara di sagala rupa pausahaan badag, utamana di St. Petersburg jeung Moscow, pikeun posisi DevOps. Kuring perhatikeun yén seueur perusahaan (seueur perusahaan anu saé, contona Yandex) naroskeun dua patarosan anu sami:

  • naon inode;
  • pikeun alesan naon anjeun bisa meunang kasalahan nulis disk (atawa contona: naha anjeun bisa kaluar tina spasi disk, panggih téh sarua).

Sakumaha sering kajadian, kuring yakin yén kuring terang topik ieu, tapi pas kuring mimiti ngajelaskeun, jurang pangaweruh janten katingali. Pikeun sistematis pangaweruh kuring, ngeusian lolongkrang sarta henteu deui ngerakeun sorangan, kuring nulis artikel ieu, meureun bakal mangpaat keur batur.

Kuring gé mimitian ti handap, i.e. ti hard drive (urang bakal Piceun flash drive, SSDs jeung hal modern lianna; Contona, hayu urang nganggap sagala 20 atawa 80 manggung drive heubeul, saprak ukuran blok aya 512 bait).

Hard drive henteu terang kumaha alamat bait rohangan na ku bait; éta sacara kondisional dibagi kana blok. Panomeran blok dimimitian ti 0. (Ieu disebut LBA, rinci di dieu: ru.wikipedia.org/wiki/LBA)

Hal ngeunaan inode

Salaku bisa ditempo ti inohong, abdi ditunjuk blok LBA salaku tingkat HDD. Ku jalan kitu, anjeun tiasa ningali naon ukuran blok disk anjeun sapertos kieu:

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

Tingkat di luhur nyaéta partisi, hiji pikeun sakabéh disk (deui pikeun kesederhanaan). Seringna, dua jinis markup partisi dianggo: msdos sareng gpt. Sasuai, msdos mangrupa format heubeul nu ngarojong disk nepi ka 2Tb, gpt mangrupakeun format anyar sanggup alamat nepi ka 1 zettabyte blok 512 byte. Dina kasus urang, urang boga partisi tipe msdos, sakumaha bisa ditempo dina gambar, partisi dimimitian ku blok No.. 1, bari enol dipaké pikeun MBR.

Dina partisi munggaran kuring nyiptakeun sistem file ext2, ukuran blok standarna nyaéta 4096 bait, anu ogé ditingali dina gambar. Anjeun tiasa ningali ukuran blok sistem file sapertos kieu:

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 anu urang peryogikeun nyaéta "Ukuran Blok".

Ayeuna bagian anu pikaresepeun nyaéta kumaha cara maca file /home/serp/testfile? Hiji file diwangun ku hiji atawa leuwih blok sistem file dimana data na disimpen. Nyaho nami file, kumaha mendakanana? Blok mana anu kuring kedah baca?

Ieu dimana inodes datangna gunana. Sistem file ext2fs ngagaduhan "tabel" anu ngandung inpormasi pikeun sadaya inode. Jumlah inode dina kasus ext2fs diatur nalika nyieun sistem file. Urang kasampak di angka diperlukeun dina parameter "Inode count" kaluaran tune2fs, i.e. urang gaduh 65536 lembar. Inode ngandung inpormasi anu urang peryogikeun: daptar blok sistem file pikeun file anu urang pilari. Kumaha milarian nomer inode pikeun file anu dipasihkeun?

Ngaran saluyu jeung nomer inode dikandung dina diréktori, sarta diréktori di ext2fs mangrupakeun tipe husus tina file, i.e. ogé boga nomer inode sorangan. Pikeun megatkeun bunderan setan ieu, hiji "dibereskeun" jumlah inode "2" ieu ditugaskeun ka diréktori root. Hayu urang tingali eusi inode nomer 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

Sakumaha anjeun tiasa tingali, diréktori anu urang butuhkeun dikandung dina blok nomer 579. Di jerona urang bakal mendakan nomer titik pikeun folder bumi, teras teras turun ranté dugi ka diréktori serp urang ningali nomer titik pikeun file anu dipénta. Upami ujug-ujug aya anu hoyong pariksa naha nomerna leres sareng naha inpormasi anu diperyogikeun aya, éta henteu sesah. Urang ngalakukeun:

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

Dina kaluaran anjeun tiasa maca nami file dina diréktori.

Janten kuring dugi ka patarosan utama: "kusabab naon waé kasalahan ngarékam tiasa lumangsung?"

Alami, ieu bakal kajantenan upami teu aya blok gratis anu tinggaleun dina sistem file. Naon anu tiasa dilakukeun dina hal ieu? Di sagigireun atra "ngahapus nanaon teu perlu", anjeun kudu inget yen dina ext2,3 jeung 4 sistem file aya hiji hal kayaning "Ditangtayungan block count". Upami anjeun ningali daptar di luhur, kami ngagaduhan "13094" blok sapertos kitu. Ieu mangrupikeun blok anu ngan ukur tiasa ditulis ku pangguna akar. tapi upami anjeun kedah gancang ngabéréskeun masalah éta, salaku solusi samentawis anjeun tiasa nyayogikeunana ka sadayana, nyababkeun sababaraha rohangan bébas:

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

Jelema. sacara standar, anjeun boga 5% tina spasi disk teu sadia pikeun nulis, sarta dibéré volume disk modern, ieu bisa jadi ratusan gigabyte.

Naon deui bisa jadi? Ieu oge mungkin yen aya blok bébas, tapi euweuh deui titik. Ieu biasana kajadian upami anjeun gaduh sakumpulan file dina sistem file anjeun anu langkung alit tibatan ukuran blok sistem file. Tempo yén 1 inode ieu spent dina 1 file atawa diréktori, sarta dina total kami boga (pikeun sistem file dibikeun) 65536 - kaayaan téh leuwih ti realistis. Ieu tiasa katingali jelas tina kaluaran paréntah 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

Sapertos anu jelas katingali dina partisi /var/www, jumlah blok gratis dina sistem file sareng jumlah titik gratis béda-béda.

Upami anjeun kehabisan inode, kuring moal nyarioskeun mantra naon waé, sabab ... teu aya (upami abdi lepat, wartosan abdi). Janten pikeun partisi dimana file leutik ngalikeun, anjeun kedah milih sistem file sacara bijaksana. Contona, btrfs inodes teu bisa mungkas, sabab Anu anyar diciptakeun sacara dinamis upami diperyogikeun.

sumber: www.habr.com

Tambahkeun komentar