Periodiski, lai pÄrietu uz CentrÄlo sadales centru, veicu intervijas dažÄdos lielos uzÅÄmumos, galvenokÄrt SanktpÄterburgÄ un MaskavÄ, DevOps amatam. Es pamanÄ«ju, ka daudzi uzÅÄmumi (daudzi labi uzÅÄmumi, piemÄram, Yandex) uzdod divus lÄ«dzÄ«gus jautÄjumus:
- kas ir inode;
- KÄdu iemeslu dÄļ var rasties diska rakstÄ«Å”anas kļūda (vai piemÄram: kÄpÄc diskÄ var pietrÅ«kt vietas, bÅ«tÄ«ba ir tÄda pati).
KÄ jau tas bieži notiek, biju pÄrliecinÄta, ka labi pÄrzinu Å”o tÄmu, taÄu, tiklÄ«dz sÄku skaidrot, atklÄjÄs nepilnÄ«bas zinÄÅ”anÄs. Lai sistematizÄtu savas zinÄÅ”anas, aizpildÄ«tu robus un vairs sevi neapmulsinÄtu, rakstu Å”o rakstu, varbÅ«t vÄl kÄdam noderÄs.
SÄkÅ”u no apakÅ”as, t.i. no cietÄ diska (atmetÄ«sim zibatmiÅas diskus, SSD un citas modernas lietas; piemÄram, Åemsim vÄrÄ jebkuru 20 vai 80 giga vecu disku, jo bloka izmÄrs ir 512 baiti).
Cietais disks nezina, kÄ uzrunÄt savu vietu baitu pa baitam, tas ir nosacÄ«ti sadalÄ«ts blokos. Bloku numerÄcija sÄkas no 0. (To sauc par LBA, sÄ«kÄka informÄcija Å”eit:
KÄ redzams attÄlÄ, es norÄdÄ«ju LBA blokus kÄ HDD lÄ«meni. Starp citu, jÅ«s varat redzÄt, kÄds bloka lielums ir jÅ«su diskÄ, piemÄram:
root@ubuntu:/home/serp# blockdev --getpbsz /dev/sdb
512
IepriekÅ” minÄtais lÄ«menis ir nodalÄ«jums, viens visam diskam (atkal vienkÄrŔības labad). VisbiežÄk tiek izmantoti divu veidu nodalÄ«jumu iezÄ«mÄÅ”anas veidi: msdos un gpt. AttiecÄ«gi msdos ir vecs formÄts, kas atbalsta diskus lÄ«dz 2Tb, gpt ir jauns formÄts, kas spÄj adresÄt lÄ«dz 1 zettabaitu no 512 baitu blokiem. MÅ«su gadÄ«jumÄ mums ir msdos tipa nodalÄ«jums, kÄ redzams attÄlÄ, nodalÄ«jums sÄkas ar bloku Nr. 1, savukÄrt MBR tiek izmantota nulle.
PirmajÄ nodalÄ«jumÄ izveidoju ext2 failu sistÄmu, tÄs noklusÄjuma bloka izmÄrs ir 4096 baiti, kas arÄ« ir atspoguļots attÄlÄ. Failu sistÄmas bloka lielumu varat skatÄ«t Å”Ädi:
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
Mums nepiecieÅ”amais parametrs ir āBloka izmÄrsā.
Tagad interesantÄ daļa ir, kÄ lasÄ«t /home/serp/testfile failu? Fails sastÄv no viena vai vairÄkiem failu sistÄmas blokiem, kuros tiek glabÄti tÄ dati. Zinot faila nosaukumu, kÄ to atrast? Kurus blokus man vajadzÄtu lasÄ«t?
Å eit noder inodes. Ext2fs failu sistÄmai ir "tabula", kurÄ ir informÄcija par visÄm inodes. Inodes skaits ext2fs gadÄ«jumÄ tiek iestatÄ«ts, veidojot failu sistÄmu. ApskatÄm vajadzÄ«gos skaitļus tune2fs izvades parametrÄ āInode countā, t.i. mums ir 65536 gab. Inode satur mums nepiecieÅ”amo informÄciju: failu sistÄmas bloku sarakstu failam, kuru mÄs meklÄjam. KÄ atrast inode numuru konkrÄtam failam?
AttiecÄ«gais nosaukums un inode numurs ir ietverts direktorijÄ, un direktorijs ext2fs ir Ä«paÅ”s faila veids, t.i. ir arÄ« savs inodes numurs. Lai pÄrtrauktu Å”o apburto loku, saknes direktorijam tika pieŔķirts "fiksÄts" inodes numurs "2". ApskatÄ«sim 2. inodes saturu:
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Ä redzat, mums nepiecieÅ”amais direktorijs atrodas blokÄ ar numuru 579. TajÄ mÄs atradÄ«sim mÄjas mapes mezgla numuru un tÄ tÄlÄk pa Ä·Ädi, lÄ«dz serp direktorijÄ mÄs redzÄsim pieprasÄ«tÄ faila mezgla numuru. Ja pÄkÅ”Åi kÄds vÄlas pÄrbaudÄ«t, vai numurs ir pareizs un vai ir vajadzÄ«gÄ informÄcija, tas nav grÅ«ti. MÄs darÄm:
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
IzvadÄ var izlasÄ«t direktorijÄ esoÅ”o failu nosaukumus.
TÄpÄc es nonÄku pie galvenÄ jautÄjuma: "kÄdu iemeslu dÄļ var rasties ierakstÄ«Å”anas kļūda?"
Protams, tas notiks, ja failu sistÄmÄ nav palicis neviens brÄ«vs bloks. Ko Å”ajÄ gadÄ«jumÄ var darÄ«t? Papildus acÄ«mredzamajam āizdzÄsiet visu nevajadzÄ«goā, jums jÄatceras, ka ext2,3, 4 un 13094 failu sistÄmÄs ir tÄda lieta kÄ āRezervÄto bloku skaitsā. Ja paskatÄs uz iepriekÅ” minÄto sarakstu, mums ir Å”Ädi bloki āXNUMXā. Tie ir bloki, kurus var rakstÄ«t tikai saknes lietotÄjs. bet, ja problÄma ir Ätri jÄatrisina, kÄ pagaidu risinÄjumu varat tos padarÄ«t pieejamus ikvienam, tÄdÄjÄdi radot brÄ«vu vietu:
root@ubuntu:/mnt# tune2fs -m 0 /dev/sdb1
tune2fs 1.42.9 (4-Feb-2014)
Setting reserved blocks percentage to 0% (0 blocks)
Tie. pÄc noklusÄjuma jums ir 5% no diska vietas, kas nav pieejama rakstÄ«Å”anai, un, Åemot vÄrÄ mÅ«sdienu disku apjomu, tas var bÅ«t simtiem gigabaitu.
Kas gan cits tas varÄtu bÅ«t? IespÄjams arÄ«, ka ir brÄ«vi bloki, bet mezglu vairs nav. Tas parasti notiek, ja jÅ«su failu sistÄmÄ ir daudz failu, kas ir mazÄki par failu sistÄmas bloka lielumu. Å emot vÄrÄ, ka 1 inode tiek iztÄrÄta 1 failam vai direktorijam, un kopÄ mums ir (attiecÄ«gai failu sistÄmai) 65536 - situÄcija ir vairÄk nekÄ reÄla. To var skaidri redzÄt no komandas df izvades:
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Ä skaidri redzams /var/www nodalÄ«jumÄ, brÄ«vo bloku skaits failu sistÄmÄ un brÄ«vo mezglu skaits ir ļoti atŔķirÄ«gs.
GadÄ«jumÄ, ja jums beigsies inodes, es jums nestÄstÄ«Å”u nekÄdas burvestÄ«bas, jo... tÄdu nav (ja kļūdos, dariet man zinÄmu). TÄpÄc starpsienÄm, kurÄs vairojas mazi faili, jums vajadzÄtu saprÄtÄ«gi izvÄlÄties failu sistÄmu. PiemÄram, btrfs inodes nevar beigties, jo Ja nepiecieÅ”ams, tiek dinamiski izveidoti jauni.
Avots: www.habr.com