Yon bagay sou inode

Tanzantan, nan lòd yo deplase nan Sant Distribisyon Santral la, mwen fè entèvyou nan divès gwo konpayi, sitou nan Saint Petersburg ak Moskou, pou yon pozisyon DevOps. Mwen remake ke anpil konpayi (anpil konpayi bon, pou egzanp Yandex) poze de kesyon ki sanble:

  • ki sa ki inode;
  • pou ki rezon ou ka jwenn yon erè ekriti disk (oswa pou egzanp: poukisa ou ta ka kouri soti nan espas ki gen kapasite, sans nan se menm bagay la).

Kòm souvan rive, mwen te asire w ke mwen te konnen sijè sa a byen, men le pli vit ke mwen te kòmanse eksplike, twou vid ki genyen nan konesans te vin aparan. Pou sistematize konesans mwen, ranpli twou vid ki genyen yo epi pa anbarase tèt mwen ankò, mwen ekri atik sa a, petèt li pral itil yon lòt moun.

Mwen pral kòmanse depi anba a, i.e. soti nan yon kondwi difisil (nou pral jete kondui flash, SSD ak lòt bagay modèn; pou egzanp, ann konsidere nenpòt kondwi 20 oswa 80 gig, depi gwosè blòk la gen 512 byte).

Disk di a pa konnen ki jan yo adrese espas li yo byte pa byte; li se kondisyonèl divize an blòk. Blòk nimero kòmanse nan 0. (Sa rele LBA, detay isit la: ru.wikipedia.org/wiki/LBA)

Yon bagay sou inode

Kòm ka wè nan figi a, mwen deziyen blòk LBA kòm nivo HDD a. By wout la, ou ka wè ki gwosè blòk disk ou a genyen tankou sa a:

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

Nivo ki anwo a se yon patisyon, youn pou tout disk la (ankò pou senplisite). Pi souvan, yo itilize de kalite partisyon: msdos ak gpt. An konsekans, msdos se yon ansyen fòma ki sipòte disk jiska 2Tb, gpt se yon nouvo fòma ki kapab adrese jiska 1 zettabyte nan blòk 512 byte. Nan ka nou an, nou gen yon patisyon nan kalite msdos, jan yo ka wè nan figi a, patisyon an kòmanse ak blòk No 1, pandan y ap zewo yo itilize pou MBR la.

Nan premye patisyon mwen te kreye yon sistèm fichye ext2, gwosè blòk default li se 4096 bytes, ki reflete tou nan figi a. Ou ka wè gwosè blòk sistèm fichye a tankou sa a:

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

Paramèt nou bezwen an se "gwosè blòk".

Koulye a, pati ki enteresan an se ki jan yo li / home/serp/testfile dosye a? Yon fichye konsiste de youn oswa plizyè blòk sistèm dosye kote done li yo estoke. Lè w konnen non fichye a, kijan pou w jwenn li? Ki blòk mwen ta dwe li?

Sa a se kote inodes vin an sou la men. Sistèm fichye ext2fs la gen yon "tab" ki gen enfòmasyon pou tout inodes. Nimewo a nan inodes nan ka a nan ext2fs yo mete lè kreye sistèm nan dosye. Nou gade nimewo ki nesesè yo nan paramèt "Inode konte" pwodiksyon tune2fs la, i.e. nou gen 65536 moso. Inode la gen enfòmasyon nou bezwen an: yon lis blòk sistèm fichye pou fichye n ap chèche a. Ki jan yo jwenn nimewo inode pou yon dosye bay?

Non korespondan ak nimewo inode yo genyen nan anyè a, epi yon anyè nan ext2fs se yon kalite fichye espesyal, sa vle di. tou gen nimewo inode pwòp li yo. Pou kraze sèk visye sa a, yo te bay yon nimewo inode "fiks" "2" nan anyè rasin lan. Ann gade sa ki nan nimewo 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

Kòm ou ka wè, anyè a nou bezwen genyen nan nimewo blòk 579. Nan li nou pral jwenn nimewo a node pou folder nan kay la, ak sou sa desann chèn nan jiskaske nan anyè a serp nou wè nimewo a ne pou dosye a mande. Si toudenkou yon moun vle tcheke si nimewo a kòrèk epi si enfòmasyon ki nesesè yo la, li pa difisil. Nou fè:

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

Nan pwodiksyon an ou ka li non dosye yo nan anyè a.

Se konsa, mwen rive nan kesyon prensipal la: "pou ki rezon yon erè anrejistreman ka rive?"

Natirèlman, sa a pral rive si pa gen okenn blòk gratis ki rete nan sistèm nan dosye. Ki sa ki ka fè nan ka sa a? Anplis evidan "efase anyen ki pa nesesè", ou ta dwe sonje ke nan sistèm fichye ext2,3 ak 4 gen yon bagay tankou "Konte blòk rezève". Si ou gade nan lis ki pi wo a, nou gen "13094" blòk sa yo. Sa yo se blòk ekri sèlman pa itilizatè rasin lan. men si ou bezwen byen vit rezoud pwoblèm nan, kòm yon solisyon tanporè ou ka fè yo disponib pou tout moun, sa ki lakòz kèk espas gratis:

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

Moun sa yo. pa default, ou gen 5% nan espas ki la ki gen kapasite ki pa disponib pou ekri, epi yo bay volim nan disk modèn, sa a ka dè santèn de jigokte.

Ki lòt bagay li ta ka? Li posib tou ke gen blòk gratis, men pa gen okenn nœuds plis. Sa a anjeneral rive si ou gen yon pakèt moun sou sistèm dosye ou ki pi piti pase gwosè a blòk sistèm dosye. Lè nou konsidere ke 1 inode depanse sou 1 dosye oswa anyè, ak nan total nou gen (pou yon sistèm dosye bay) 65536 - sitiyasyon an se pi plis pase reyalis. Sa a ka byen klè nan pwodiksyon an nan lòd df la:

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

Kòm vizib klèman sou patisyon /var/www, kantite blòk gratis nan sistèm fichye a ak kantite nœuds gratis yo varye anpil.

Nan ka ou fini nan inodes, mwen p'ap di ou okenn òneman, paske... pa gen okenn (si mwen mal, fè m 'konnen). Se konsa, pou patisyon nan ki ti dosye miltipliye, ou ta dwe chwazi sistèm nan dosye avèk sajès. Pou egzanp, btrfs inodes pa ka fini, paske Nouvo yo dinamik kreye si sa nesesè.

Sous: www.habr.com

Add nouvo kòmantè