Rudeigin mu dheidhinn inode

Bho àm gu àm, gus gluasad chun Ionad Sgaoilidh Mheadhanach, bidh mi ag agallamhan aig diofar chompanaidhean mòra, gu sònraichte ann an St Petersburg agus Moscow, airson suidheachadh DevOps. Mhothaich mi gu bheil mòran chompanaidhean (mòran chompanaidhean math, mar eisimpleir Yandex) a’ faighneachd dà cheist coltach ris:

  • dè th' ann an inode;
  • carson a gheibh thu mearachd sgrìobhaidh diosc (no mar eisimpleir: carson a dh’ fhaodadh tu ruith a-mach à àite diosc, is e an aon rud a th’ ann).

Mar a thachras gu tric, bha mi cinnteach gu robh eòlas math agam air a’ chuspair seo, ach cho luath ‘s a thòisich mi air mìneachadh, thàinig beàrnan ann an eòlas am follais. Gus an eòlas agam a chuir air dòigh, lìon na beàrnan agus na cuir nàire orm fhèin tuilleadh, tha mi a’ sgrìobhadh an artaigil seo, is dòcha gum bi e feumail do chuideigin eile.

Tòisichidh mi bhon bhonn, i.e. bho dhràibhear cruaidh (tilgidh sinn air falbh draibhearan flash, SSDs agus rudan ùr-nodha eile; mar eisimpleir, beachdaichidh sinn air seann dhràibhear 20 no 80 gig, leis gu bheil meud a’ bhloca ann 512 bytes).

Chan eil fios aig a’ chlàr cruaidh ciamar a dhèiligeas e ris an space byte aige le byte; tha e air a roinn ann am blocaichean le cumhachan. Bidh àireamhachadh blocaichean a’ tòiseachadh bho 0. (Canar LBA ris an seo, mion-fhiosrachadh an seo: ru.wikipedia.org/wiki/LBA)

Rudeigin mu dheidhinn inode

Mar a chithear bhon fhigear, chomharraich mi blocaichean LBA mar an ìre HDD. Air an t-slighe, chì thu dè am meud bloca a tha aig an diosc agad mar seo:

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

Tha an ìre gu h-àrd na sgaradh, aon airson an diosc gu lèir (a-rithist airson sìmplidh). Mar as trice, bidh dà sheòrsa de chomharradh sgaradh air an cleachdadh: msdos agus gpt. Mar sin, is e seann chruth a th’ ann an msdos a bheir taic do dhiosg suas gu 2Tb, is e cruth ùr a th’ ann an gpt a tha comasach air dèiligeadh ri suas ri 1 zettabyte de bhlocaichean byte 512. Anns a 'chùis againn, tha sgaradh de sheòrsa msdos againn, mar a chithear bhon fhigear, tha an sgaradh a' tòiseachadh le bloc Àir. 1, fhad 'sa tha neoni air a chleachdadh airson an MBR.

Anns a ’chiad sgaradh chruthaich mi siostam faidhle ext2, is e am meud bloca bunaiteach aige 4096 bytes, a tha cuideachd ri fhaicinn san fhigear. Chì thu meud bloc an t-siostam faidhle mar seo:

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

Is e am paramadair a dh’ fheumas sinn “Meud bloca”.

A-nis is e am pàirt inntinneach mar a leughas tu am faidhle /home/serp/testfile? Tha faidhle air a dhèanamh suas de aon bhloca siostam faidhle no barrachd anns a bheil an dàta aige air a stòradh. A bhith eòlach air ainm an fhaidhle, ciamar a lorgas tu e? Dè na blocaichean a bu chòir dhomh a leughadh?

Seo far a bheil inodes a 'tighinn gu feum. Tha “clàr” aig an t-siostam faidhle ext2fs anns a bheil fiosrachadh airson a h-uile inodes. Tha an àireamh de inodes ann an cùis ext2fs air a shuidheachadh nuair a thathar a’ cruthachadh an t-siostam faidhle. Bidh sinn a’ coimhead air na h-àireamhan a tha a dhìth ann am paramadair “Inode count” de thoradh tune2fs, i.e. Tha 65536 pìosan againn. Anns an inode tha am fiosrachadh a tha a dhìth oirnn: liosta de bhlocaichean siostam faidhle airson an fhaidhle a tha sinn a’ sireadh. Ciamar a lorgas tu an àireamh inode airson faidhle sònraichte?

Tha an t-ainm co-fhreagarrach agus an àireamh inode anns an eòlaire, agus tha eòlaire ann an ext2fs na sheòrsa sònraichte de fhaidhle, i.e. tha an àireamh inode aige fhèin cuideachd. Gus an cearcall borb seo a bhriseadh, chaidh àireamh inode “stèidhichte” “2” a shònrachadh don eòlaire freumh. Bheir sinn sùil air susbaint inode àireamh 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

Mar a chì thu, tha an eòlaire a dh’ fheumas sinn ann am bloc àireamh 579. Ann gheibh sinn an àireamh nód airson am pasgan dachaigh, agus mar sin air adhart sìos an t-seine gus am faic sinn anns an eòlaire serp an àireamh nód airson an fhaidhle a chaidh iarraidh. Ma tha cuideigin gu h-obann ag iarraidh faighinn a-mach a bheil an àireamh ceart agus a bheil am fiosrachadh riatanach ann, chan eil e doirbh. Bidh sinn a 'dèanamh:

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

Anns an toradh is urrainn dhut ainmean nam faidhlichean san eòlaire a leughadh.

Mar sin thig mi chun phrìomh cheist: “dè na h-adhbharan a dh’ fhaodadh mearachd clàraidh tachairt? ”

Gu nàdarra, tachraidh seo mura h-eil blocaichean an-asgaidh air fhàgail san t-siostam faidhle. Dè ghabhas dèanamh sa chùis seo? A bharrachd air an “sguab às rud sam bith neo-riatanach”, bu chòir dhut cuimhneachadh gu bheil leithid de rud ann ri “cunntadh blocaichean glèidhte” ann an siostaman faidhle ext2,3 agus 4. Ma choimheadas tu air an liostadh gu h-àrd, tha “13094” blocaichean mar sin againn. Is iad seo blocaichean nach gabh sgrìobhadh ach leis an neach-cleachdaidh freumh. ach ma dh’ fheumas tu a’ chùis fhuasgladh gu sgiobalta, mar fhuasgladh sealach faodaidh tu am faighinn don h-uile duine, a’ leantainn gu beagan àite an-asgaidh:

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

An fheadhainn sin. gu gnàthach, tha 5% den àite diosc agad nach eil ri fhaighinn airson sgrìobhadh, agus leis na tha de dhioscaichean ùra ann, faodaidh seo a bhith ceudan de gigabytes.

Dè eile a dh’ fhaodadh a bhith? Tha e comasach cuideachd gu bheil blocaichean an-asgaidh ann, ach chan eil barrachd nodan ann. Mar as trice bidh seo a’ tachairt ma tha dòrlach de fhaidhlichean air an t-siostam faidhle agad a tha nas lugha na meud bloc an t-siostam faidhle. Leis gu bheil 1 inode air a chaitheamh air 1 faidhle no eòlaire, agus gu h-iomlan tha 65536 againn (airson siostam faidhle sònraichte) - tha an suidheachadh nas motha na fìor. Tha seo ri fhaicinn gu soilleir bho thoradh an àithne 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

Mar a chithear gu soilleir air an sgaradh /var/www, tha an àireamh de bhlocaichean an-asgaidh san t-siostam faidhle agus an àireamh de nodan an-asgaidh ag atharrachadh gu mòr.

Ma ruitheas tu a-mach à inodes, chan innis mi geasan dhut, oir ... chan eil gin ann (ma tha mi ceàrr, leig fios dhomh). Mar sin airson sgaraidhean anns am bi faidhlichean beaga ag iomadachadh, bu chòir dhut an siostam faidhle a thaghadh gu ciallach. Mar eisimpleir, chan urrainn dha inodes btrfs crìochnachadh, air sgàth Tha feadhainn ùra air an cruthachadh gu dinamach ma tha sin riatanach.

Source: www.habr.com

Cuir beachd ann