Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми Π² Linux: Π·Π°Ρ‰ΠΎ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΈ ΠΊΠ°ΠΊ работят? Част 2

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ всички, сподСлямС с вас Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° част ΠΎΡ‚ публикацията β€žΠ’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми Π² Linux: Π·Π°Ρ‰ΠΎ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΈ ΠΊΠ°ΠΊ работят?β€œ ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° част Ρ‚ΡƒΠΊ. НСка Π²ΠΈ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Π΅ Ρ‚Π°Π·ΠΈ ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π° ΠΎΡ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΅ насрочСна Π΄Π° съвпаднС с пусканСто Π½Π° Π½ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° курса β€žLinux Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€β€œ, ΠΊΠΎΠΉΡ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π²Π° съвсСм скоро.

Как Π΄Π° Π½Π°Π±Π»ΡŽΠ΄Π°Π²Π°Ρ‚Π΅ VFS с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° eBPF ΠΈ bcc инструмСнти

Най-лСсният Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ ядрото Ρ€Π°Π±ΠΎΡ‚ΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ sysfs Π΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Π° Π½Π°ΠΉ-лСсният Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π³Π»Π΅Π΄Π°Ρ‚Π΅ ARM64 Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ eBPF. eBPF (ΡΡŠΠΊΡ€Π°Ρ‚Π΅Π½ΠΎ ΠΎΡ‚ Berkeley Packet Filter) сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина ΡΡŠΡ€Ρ†Π΅Π²ΠΈΠ½Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° поискат (query) ΠΎΡ‚ командния Ρ€Π΅Π΄. Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° ядрото ΠΊΠ°Π·Π²Π°Ρ‚ Π½Π° читатСля ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ ядрото; стартиранСто Π½Π° инструмСнтитС eBPF Π½Π° Π·Π°Ρ€Π΅Π΄Π΅Π½Π° систСма ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊΠ²ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΏΡ€Π°Π²ΠΈ ядрото.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми Π² Linux: Π·Π°Ρ‰ΠΎ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΈ ΠΊΠ°ΠΊ работят? Част 2

Π—Π° щастиС, Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ eBPF Π΅ доста лСсно с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° инструмСнти ск, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΎΡ‚ ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ разпространСниС Linux ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ Π‘ΡŠΡ€Π½Π°Ρ€Π΄ Π“Ρ€Π΅Π³. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΈ bcc са Python скриптовС с ΠΌΠ°Π»ΠΊΠΈ вмъквания Π½Π° C ΠΊΠΎΠ΄, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ всСки, Π·Π°ΠΏΠΎΠ·Π½Π°Ρ‚ с Π΄Π²Π°Ρ‚Π° Π΅Π·ΠΈΠΊΠ°, ΠΌΠΎΠΆΠ΅ лСсно Π΄Π° Π³ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°. IN bcc/tools Има 80 Python скрипта, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π½Π°ΠΉ-вСроятно Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ»ΠΈ систСмСн администратор Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ Π½Π΅Ρ‰ΠΎ подходящо Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.
Π—Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ½Π΅ ΠΏΠΎΠ²ΡŠΡ€Ρ…Π½ΠΎΡΡ‚Π½Π° прСдстава ΠΊΠ°ΠΊΠ²Π° Ρ€Π°Π±ΠΎΡ‚Π° Π²ΡŠΡ€ΡˆΠ°Ρ‚ VFS Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° систСма, ΠΎΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ vfscount ΠΈΠ»ΠΈ vfsstat. Π’ΠΎΠ²Π° Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅ дСсСтки обаТдания vfs_open() Π° β€žΠΏΡ€ΠΈΡΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΌΡƒβ€œ сС случват Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ всяка сСкунда.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми Π² Linux: Π·Π°Ρ‰ΠΎ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΈ ΠΊΠ°ΠΊ работят? Част 2

vfsstat.py Π΅ скрипт Π½Π° Python с вмъквания Π½Π° C ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ просто Π±Ρ€ΠΎΠΈ извикванията Π½Π° VFS функция.

НСка Π΄Π°Π΄Π΅ΠΌ ΠΏΠΎ-Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС случва, ΠΊΠΎΠ³Π°Ρ‚ΠΎ поставим USB Ρ„Π»Π°ΡˆΠΊΠ° Π² ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π° ΠΈ систСмата Π³ΠΎ засСчС.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми Π² Linux: Π·Π°Ρ‰ΠΎ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΈ ΠΊΠ°ΠΊ работят? Част 2

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° eBPF ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ сС случва Π² /sysΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ поставСно USB Ρ„Π»Π°Ρˆ устройство. Π’ΡƒΠΊ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ прост ΠΈ слоТСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΠΎ-Π³ΠΎΡ€Π΅, bcc инструмСнт trace.py ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ изпълнСниС Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° sysfs_create_files(). Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅ Ρ‚ΠΎΠ²Π° sysfs_create_files() бСшС стартиран с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° kworker ΠΏΠΎΡ‚ΠΎΠΊ Π² ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Ρ„Π»Π°Ρˆ устройството Π΅ поставСно, Π½ΠΎ какъв Ρ„Π°ΠΉΠ» Π΅ създадСн? Вторият ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Π²Π° силата Π½Π° eBPF. Π’ΡƒΠΊ trace.py ΠžΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π²Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ прослСдяванС Π½Π° ядрото (опция -K) ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ създадСн sysfs_create_files(). Π’ΠΌΡŠΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ ΠΈΠ·Ρ€Π°Π· Π΅ C ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° лСсно Ρ€Π°Π·ΠΏΠΎΠ·Π½Π°Π²Π°Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Ρ‰ Π½ΠΈΠ·, прСдоставСн ΠΎΡ‚ скрипта Π½Π° Python, ΠΊΠΎΠΉΡ‚ΠΎ изпълнява LLVM ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π°Π²Ρ€Π΅ΠΌΠ΅. Π’ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅Π΄ ΠΈ Π³ΠΎ изпълнява във Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина Π² ядрото. ПълСн Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ подпис sysfs_create_files () трябва Π΄Π° сС Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅ във Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ форматиращият Π½ΠΈΠ· Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π° към Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅. Π“Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ Π² Ρ‚Π°Π·ΠΈ част ΠΎΡ‚ C ΠΊΠΎΠ΄Π° водят Π΄ΠΎ Ρ€Π°Π·ΠΏΠΎΠ·Π½Π°Π²Π°Π΅ΠΌΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΎΡ‚ C ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π°. НапримСр, Π°ΠΊΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ΡŠΡ‚ -l Π΅ пропуснат, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ β€žΠΠ΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° BPF Ρ‚Π΅ΠΊΡΡ‚β€œ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са Π·Π°ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ със C ΠΈ Python, Ρ‰Π΅ намСрят инструмСнтитС bcc лСсСн Π·Π° Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π°Π½Π΅ ΠΈ промяна.

ΠšΠΎΠ³Π°Ρ‚ΠΎ USB устройството бъдС поставСно, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ прослСдяванС Π½Π° ядрото Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ PID 7711 Π΅ нишка kworkerΠΊΠΎΠΉΡ‚ΠΎ създадС Ρ„Π°ΠΉΠ»Π° Β«eventsΒ» Π² sysfs. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ ΠΎΠ±Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΎΡ‚ sysfs_remove_files() Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° устройството Π΅ Π΄ΠΎΠ²Π΅Π»ΠΎ Π΄ΠΎ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π° events, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° ΠΎΠ±Ρ‰Π°Ρ‚Π° концСпция Π·Π° Π±Ρ€ΠΎΠ΅Π½Π΅ Π½Π° справки. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π³Π»Π΅Π΄Π°Π½Π΅ sysfs_create_link () с eBPF, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ поставятС USB устройството, Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ са създадСни ΠΏΠΎΠ½Π΅ 48 символни Π²Ρ€ΡŠΠ·ΠΊΠΈ.

И Ρ‚Π°ΠΊΠ°, какъв Π΅ ΡΠΌΠΈΡΡŠΠ»ΡŠΡ‚ Π½Π° Ρ„Π°ΠΉΠ»Π° със ΡΡŠΠ±ΠΈΡ‚ΠΈΡ? ИзползванС cscope Π—Π° Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ __device_add_disk(), ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊΠ²ΠΎ причинява disk_add_events (), ΠΈ Π΅Π΄Π½ΠΎ ΠΎΡ‚ Π΄Π²Π΅Ρ‚Π΅ "media_change"Или "eject_request" ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ записани във Ρ„Π°ΠΉΠ» Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ. Π’ΡƒΠΊ блоковият слой Π½Π° ядрото ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€Π° потрСбитСлското пространство, Ρ‡Π΅ "диск" сС Π΅ появил ΠΈ Π΅ ΠΈΠ·Π²Π°Π΄Π΅Π½. ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π΅Π½ Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π° изслСдванС Ρ‡Ρ€Π΅Π· поставянС Π½Π° USB устройство Π² сравнСниС с ΠΎΠΏΠΈΡ‚ΠΈΡ‚Π΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ работят Π½Π΅Ρ‰Π°Ρ‚Π° само ΠΎΡ‚ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ°.

ΠžΡΠ½ΠΎΠ²Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ позволяват Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ устройства

Π Π°Π·Π±ΠΈΡ€Π° сС, Π½ΠΈΠΊΠΎΠΉ Π½Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π° ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π° си, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Π΄ΡŠΡ€ΠΏΠ° щСпсСла ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°. Но Π·Π°Ρ‰ΠΎ? Π’ΠΎΠ²Π° Π΅ Ρ‚Π°ΠΊΠ°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми Π½Π° физичСски устройства Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Ρ‚ закъснСли записи ΠΈ структуритС ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ записват тяхното ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ са синхронизирани със записи Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° сС случи, собствСницитС Π½Π° систСмата трябва Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°Ρ‚ Π΄ΠΎ слСдващото Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅, Π·Π° Π΄Π° стартират ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°. fsck filesystem-recovery ΠΈ Π² Π½Π°ΠΉ-лошия случай Π·Π°Π³ΡƒΠ±Π° Π½Π° Π΄Π°Π½Π½ΠΈ.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, всички Π·Π½Π°Π΅ΠΌ, Ρ‡Π΅ ΠΌΠ½ΠΎΠ³ΠΎ IoT устройства, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ€ΡƒΡ‚Π΅Ρ€ΠΈ, тСрмостати ΠΈ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ, сСга работят с Linux. Много ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ устройства ΠΈΠΌΠ°Ρ‚ малък ΠΈΠ»ΠΈ никакъв потрСбитСлски интСрфСйс ΠΈ няма Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ "чисто". ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Ρ‚Π΅ си Π΄Π° Π·Π°ΠΏΠ°Π»ΠΈΡ‚Π΅ ΠΊΠΎΠ»Π° с ΠΈΠ·Ρ‚ΠΎΡ‰Π΅Π½ Π°ΠΊΡƒΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π·Π°Ρ…Ρ€Π°Π½Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° контролния Π±Π»ΠΎΠΊ Π΅ ΠΈΠ·Ρ‡Π΅Ρ€ΠΏΠ°Π½ΠΎ Linux постоянно подскача Π½Π°Π³ΠΎΡ€Π΅-Π½Π°Π΄ΠΎΠ»Ρƒ. Как Ρ‚Π°ΠΊΠ° систСмата сС Π·Π°Ρ€Π΅ΠΆΠ΄Π° Π±Π΅Π· дълго fsckΠΊΠΎΠ³Π° двигатСля Π½Π°ΠΉ-накрая Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ? А ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Π΅ прост. Π’Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ устройства Ρ€Π°Π·Ρ‡ΠΈΡ‚Π°Ρ‚ Π½Π° основната Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ (ΡΡŠΠΊΡ€Π°Ρ‚Π΅Π½ΠΎ ro-rootfs (основна Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅)).

ro-rootfs ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ прСдимства, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΈ ΠΎΡ‚ автСнтичността. Π•Π΄Π½ΠΎ прСдимство Π΅, Ρ‡Π΅ Π·Π»ΠΎΠ²Ρ€Π΅Π΄Π΅Π½ софтуСр Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° пишС /usr ΠΈΠ»ΠΈ /lib, Π°ΠΊΠΎ Π½ΠΈΠΊΠΎΠΉ Linux процСс Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° пишС Ρ‚Π°ΠΌ. Π”Ρ€ΡƒΠ³ΠΎ Π΅, Ρ‡Π΅ Π΄ΠΎ голяма стСпСн Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма Π΅ ΠΎΡ‚ Ρ€Π΅ΡˆΠ°Π²Π°Ρ‰ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° място Π½Π° ΠΎΡ‚Π΄Π°Π»Π΅Ρ‡Π΅Π½ΠΈ устройства, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŠΡ‚ ΠΏΠΎ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Ρ€Π°Π·Ρ‡ΠΈΡ‚Π° Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ систСми, ΠΊΠΎΠΈΡ‚ΠΎ са Π½ΠΎΠΌΠΈΠ½Π°Π»Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ Π½Π° систСмитС Π½Π° място. МоТС Π±ΠΈ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ (Π½ΠΎ ΠΈ Π½Π°ΠΉ-ΠΊΠΎΠ²Π°Ρ€Π½ΠΎΡ‚ΠΎ) прСдимство Π΅, Ρ‡Π΅ ro-rootfs ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π΄Π° Ρ€Π΅ΡˆΠ°Ρ‚ ΠΊΠΎΠΈ систСмни ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΈ Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° систСмата. Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° с ro-rootfs ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π΅ΡƒΠ΄ΠΎΠ±Π½Π° ΠΈ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ const чСсто са Π² Π΅Π·ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, Π½ΠΎ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ прСдимства лСсно ΠΎΠΏΡ€Π°Π²Π΄Π°Π²Π°Ρ‚ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ.

създаванС rootfs Π‘Π°ΠΌΠΎ Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ изисква Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ усилия Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ систСми ΠΈ Ρ‚ΡƒΠΊ сС появява VFS. Linux изисква Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π΄Π° са Π²ΡŠΡ‚Ρ€Π΅ /var ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС записват ΠΈ Π² допълнСниС ΠΌΠ½ΠΎΠ³ΠΎ популярни прилоТСния, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ систСми, Ρ‰Π΅ сС ΠΎΠΏΠΈΡ‚Π°Ρ‚ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ конфигурация dot-files Π² $HOME. Π•Π΄Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² Π½Π°Ρ‡Π°Π»Π½Π°Ρ‚Π° дирСктория ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎΡ‚ΠΎ ΠΈΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ ΠΈ Π²Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ rootfs. Π—Π° /var Π•Π΄ΠΈΠ½ възмоТСн ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΅ Π΄Π° Π³ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Ρ‚Π΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π΅Π½ дял с Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° запис, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ / ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½ само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅. Π”Ρ€ΡƒΠ³Π° популярна Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° скоби Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΈΠ»ΠΈ наслагванС.

Π‘Π²ΡŠΡ€Π·Π²Π°Ρ‰ΠΈ сС ΠΈ ΠΏΠΎΠ΄Ρ€Π΅ΠΆΠ΄Π°Ρ‰ΠΈ сС стойки, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

ИзпълнСниС Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° man mount Π΅ Π½Π°ΠΉ-добрият Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ Π·Π° ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½Π΅ с Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΎΠ±Π²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΈ наслагванС, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΈ систСмнитС администратори Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма Π² Π΅Π΄Π½Π° ΠΏΡŠΡ‚Π΅ΠΊΠ° ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° я ΠΈΠ·Π»Π°Π³Π°Ρ‚ Π½Π° прилоТСния Π² Π΄Ρ€ΡƒΠ³Π°. Π—Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ систСми Ρ‚ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ /var Π½Π° Ρ„Π»Π°Ρˆ устройство само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅, Π½ΠΎ ΠΏΡŠΡ‚ Π·Π° наслагванС ΠΈΠ»ΠΈ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΎΡ‚ tmpfs Π² /var ΠΏΡ€ΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° прилоТСнията Π΄Π° ΠΏΠΈΡˆΠ°Ρ‚ Π±Π΅Π»Π΅ΠΆΠΊΠΈ Ρ‚Π°ΠΌ (драсканС). БлСдващият ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² /var Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π·Π°Π³ΡƒΠ±Π΅Π½ΠΈ. ΠœΠΎΠ½Ρ‚Π°ΠΆΡŠΡ‚ Π·Π° наслагванС създава съюз ΠΌΠ΅ΠΆΠ΄Ρƒ tmpfs ΠΈ основната Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма ΠΈ Π²ΠΈ позволява Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ²ΠΈΠ΄Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² ro-tootf ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΏΠΎΠ΄Π²ΡŠΡ€Π·Π²Π°Π΅ΠΌΠΎΡ‚ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Π½ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΡ€Π°Π·Π½ΠΈ tmpfs ΠΏΠ°ΠΏΠΊΠΈ, Π²ΠΈΠ΄ΠΈΠΌΠΈ ΠΊΠ°Ρ‚ΠΎ Π² тях ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС записват ro-rootfs Π½Π°Ρ‡ΠΈΠ½ΠΈ. Π”ΠΎΠΊΠ°Ρ‚ΠΎ overlayfs Ρ‚ΠΎΠ²Π° Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎ (proper) Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма, ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½Π΅ с Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π΅ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΎ Π² ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° Π½Π° VFS.

Π’ΡŠΠ· основа Π½Π° описаниСто Π½Π° наслагванСто ΠΈ ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ° Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅, Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Π΅ ΠΈΠ·Π½Π΅Π½Π°Π΄Π°Π½ ΠΎΡ‚ Ρ‚ΠΎΠ²Π° Linux ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Ρ‚Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ. НСка Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС случва, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ systemd-nspawn Π·Π° Π΄Π° стартиратС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° инструмСнта mountsnoop ΠΎΡ‚ bcc.

ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ system-nspawn стартира ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ mountsnoop.py.

Π”Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ сС случи:

Ρ…Π²ΡŠΡ€Π»ΡΠΌ mountsnoop Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ сС "Π·Π°Ρ€Π΅ΠΆΠ΄Π°" ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π΅ силно зависимо ΠΎΡ‚ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ (ΠΏΠΎΠΊΠ°Π·Π²Π° сС само Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° дългия ΠΈΠ·Ρ…ΠΎΠ΄).

Π’ΡƒΠΊ systemd-nspawn прСдоставя ΠΈΠ·Π±Ρ€Π°Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² procfs ΠΈ sysfs хост към ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠ°Ρ‚ΠΎ ΠΏΡŠΡ‚ΠΈΡ‰Π° към Π½Π΅Π³ΠΎ rootfs, ОсвСн Ρ‚ΠΎΠ²Π° MS_BIND Ρ„Π»Π°Π³, ΠΊΠΎΠΉΡ‚ΠΎ настройва ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‰ΠΎΡ‚ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½Π΅, някои Π΄Ρ€ΡƒΠ³ΠΈ Ρ„Π»Π°Π³ΠΎΠ²Π΅ Π½Π° ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² пространството Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° хоста ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. НапримСр, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½Π΅ ΠΌΠΎΠΆΠ΅ ΠΈΠ»ΠΈ Π΄Π° пропуснС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ към /proc ΠΈ /sys Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ»ΠΈ Π³ΠΈ скрийтС Π² зависимост ΠΎΡ‚ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° Linux ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ нСвъзмоТна Π·Π°Π΄Π°Ρ‡Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ самото ядро β€‹β€‹ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎ количСство ΠΊΠΎΠ΄, оставяйки настрана прилоТСнията Π·Π° потрСбитСлско пространство Π½Π° Linux ΠΈ интСрфСйситС Π·Π° систСмни повиквания Π² C Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€. glibc. Π•Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°Ρ‡ΠΈΠ½ΠΈΡ‚Π΅ Π΄Π° постигнСтС Π½Π°ΠΏΡ€Π΅Π΄ΡŠΠΊ Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ изходния ΠΊΠΎΠ΄ Π½Π° Π΅Π΄Π½Π° подсистСма Π½Π° ядрото, с Π°ΠΊΡ†Π΅Π½Ρ‚ Π²ΡŠΡ€Ρ…Ρƒ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° систСмнитС извиквания ΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈΡ‚Π΅ Π½Π° потрСбитСлското пространство, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ основнитС Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ интСрфСйси Π½Π° ядрото, ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π° file_operations. Π€Π°ΠΉΠ»ΠΎΠ²ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ осигуряват ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° β€žΠ²ΡΠΈΡ‡ΠΊΠΎ Π΅ Ρ„Π°ΠΉΠ»β€œ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π³ΠΈ ΠΏΡ€Π°Π²ΠΈ особСно приятни Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅. Π˜Π·Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° C ядрото Π² дирСкторията ΠΎΡ‚ Π½Π°ΠΉ-високо Π½ΠΈΠ²ΠΎ fs/ прСдставя имплСмСнтация Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΎΠ±Π²ΠΈΠ²Π°Ρ‰ слой, ΠΊΠΎΠΉΡ‚ΠΎ осигурява ΡˆΠΈΡ€ΠΎΠΊΠ° ΠΈ относитСлно проста ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ популярни Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми ΠΈ устройства Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅. Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° наслагванС Ρ‡Ρ€Π΅Π· пространства ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° Π½Π° Linux Π΅ магията Π½Π° VFS, която ΠΏΡ€Π°Π²ΠΈ възмоТно ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ основни Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми. Π’ комбинация с ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° изходния ΠΊΠΎΠ΄, основния инструмСнт Π½Π° eBPF ΠΈ нСговия интСрфСйс bcc
ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ ΠΏΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ядрото ΠΏΠΎ-лСсно ΠΎΡ‚ всякога.

ΠŸΡ€ΠΈΡΡ‚Π΅Π»ΠΈ, ΠΏΠΈΡˆΠ΅Ρ‚Π΅, бСшС Π»ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Π° Π·Π° вас Ρ‚Π°Π·ΠΈ статия? МоТС Π±ΠΈ ΠΈΠΌΠ°Ρ‚Π΅ някакви ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ ΠΈΠ»ΠΈ Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠΈ? А Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС интСрСсуват ΠΎΡ‚ курса Π·Π° Linux администратор, са ΠΏΠΎΠΊΠ°Π½Π΅Π½ΠΈ ΠžΡ‚Π²ΠΎΡ€Π΅Π½ Π΄Π΅Π½, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ сС ΡΡŠΡΡ‚ΠΎΠΈ Π½Π° 18 Π°ΠΏΡ€ΠΈΠ».

ΠŸΡŠΡ€Π²Π° част.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€