Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Π² Linux: Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚? Π§Π°ΡΡ‚ΡŒ 2

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚, дСлимся с Π²Π°ΠΌΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Β«Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Π² Linux: Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚?Β» ΠŸΠ΅Ρ€Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΡƒΡ‚. Напомним, данная сСрия ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈΡƒΡ€ΠΎΡ‡Π΅Π½Π° ΠΊ запуску Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΏΠΎ курсу «Администратор LinuxΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стартуСт ΡƒΠΆΠ΅ совсСм скоро.

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

Π‘Π°ΠΌΡ‹ΠΉ простой способ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ядро ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ sysfs – это ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π·Π° этим Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, Π° самый простой способ ΠΏΠΎΠ½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° ARM64 – это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ eBPF. eBPF (сокращСниС ΠΎΡ‚ Berkeley Packet Filter) состоит ΠΈΠ· Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ Π² ядрС, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ (query) ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π˜ΡΡ…ΠΎΠ΄Π½ΠΈΠΊΠΈ ядра ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ядро; запуск инструмСнтов eBPF Π² Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ систСмС ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ядро.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Π² Linux: Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚? Π§Π°ΡΡ‚ΡŒ 2

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ eBPF достаточно Π»Π΅Π³ΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнтов bcc, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ доступны Π² качСствС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· ΠΎΠ±Ρ‰Π΅Π³ΠΎ дистрибутива Linux ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π‘Π΅Ρ€Π½Π°Ρ€Π΄ΠΎΠΌ Π“Ρ€Π΅Π³Π³ΠΎΠΌ. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ bcc – это скрипты Π½Π° Python с малСнькими вставками ΠΊΠΎΠ΄Π° Π½Π° Π‘, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ, ΠΊΡ‚ΠΎ Π·Π½Π°ΠΊΠΎΠΌ с ΠΎΠ±ΠΎΠΈΠΌΠΈ языками ΠΌΠΎΠΆΠ΅Ρ‚ с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’ bcc/tools Π΅ΡΡ‚ΡŒ 80 Python скриптов, Π° это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ скорСС всСго Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ»ΠΈ систСмный администратор смоТСт ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ сСбС Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ подходящСС для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ.
Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ хотя Π±Ρ‹ повСрхностноС прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ VFS Π² Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ систСмС, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ vfscount ΠΈΠ»ΠΈ vfsstat. Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, допустим, Ρ‡Ρ‚ΠΎ дСсятки Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² vfs_open() ΠΈ Β«Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ·Π΅ΠΉΒ» происходят Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Π² Linux: Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚? Π§Π°ΡΡ‚ΡŒ 2

vfsstat.py – это скрипт Π½Π° Python, со вставками Π‘ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто считаСт Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ VFS.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ посмотрим, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ вставляСм USB-Ρ„Π»Π΅Ρˆ Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΈ Π΅Π³ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ систСма.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Π² Linux: Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚? Π§Π°ΡΡ‚ΡŒ 2

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ eBPF ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Π² /sys, ΠΊΠΎΠ³Π΄Π° вставлСн USB-Ρ„Π»Π΅Ρˆ Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒ. Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠΊΠ°Π·Π°Π½ простой ΠΈ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ свСрху, bcc инструмСнт trace.py Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС, ΠΊΠΎΠ³Π΄Π° запускаСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° sysfs_create_files(). ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ sysfs_create_files() Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ kworker ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ„Π»Π΅ΡˆΠΊΠ° Π±Ρ‹Π»Π° вставлСна, Π½ΠΎ ΠΊΠ°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΈ этом создался? Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ всю ΠΌΠΎΡ‰ΡŒ eBPF. Π—Π΄Π΅ΡΡŒ trace.py Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ трассировку ядра (kernel backtrace) (опция -K) ΠΈ имя Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» создан sysfs_create_files(). Вставка Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… высказываниях – это ΠΊΠΎΠ΄ Π½Π° Π‘, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ Π»Π΅Π³ΠΊΠΎ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π΅ΠΌΡƒΡŽ строку Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ Python скриптом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСт LLVM just-in-time компилятор. Π­Ρ‚Ρƒ строку ΠΎΠ½ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ выполняСт Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС Π²Π½ΡƒΡ‚Ρ€ΠΈ ядра. Полная сигнатура Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sysfs_create_files () Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ воспроизвСдСна Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ строка Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΌΠΎΠ³Π»Π° ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Ошибки Π² этом Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° Π½Π° Π‘ приводят ΠΊ распознаваСмым ошибкам C-компилятора. НапримСр, Ссли ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -l, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Β«Failed to compile BPF text.Β» Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Π‘ ΠΈ Python, Π½Π°ΠΉΠ΄ΡƒΡ‚ инструмСнты bcc простыми для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈ измСнСния.

Когда USB-Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒ вставлСн, обратная трассировка ядра ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ PID 7711 – это ΠΏΠΎΡ‚ΠΎΠΊ kworker, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создал Ρ„Π°ΠΉΠ» Β«eventsΒ» Π² sysfs. БоотвСтствСнно, Π²Ρ‹Π·ΠΎΠ² с sysfs_remove_files() ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ накопитСля ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ Ρ„Π°ΠΉΠ»Π° events, Ρ‡Ρ‚ΠΎ соотвСтствуСт ΠΎΠ±Ρ‰Π΅ΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ подсчСта ссылок. ΠŸΡ€ΠΈ этом, просмотр sysfs_create_link () с eBPF Π²ΠΎ врСмя вставки USB-накопитСля ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ создано Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 48 ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ссылок.

Π’Π°ΠΊ Π² Ρ‡Π΅ΠΌ ΠΆΠ΅ смысл Ρ„Π°ΠΉΠ»Π° events? ИспользованиС cscope для поиска __device_add_disk(), ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ disk_add_events (), ΠΈ Π»ΠΈΠ±ΠΎ "media_change", Π»ΠΈΠ±ΠΎ "eject_request" ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ записаны Π² Ρ„Π°ΠΉΠ» событий. Π—Π΄Π΅ΡΡŒ Π±Π»ΠΎΡ‡Π½Ρ‹ΠΉ слой ядра ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ userspace ΠΎ появлСнии ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠΈ «диска». ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, насколько ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π΅Π½ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ исслСдования Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ вставки USB-накопитСля ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ· исходников.

ΠšΠΎΡ€Π½Π΅Π²Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния Π΄Π΅Π»Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ встроСнныС устройства

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ сСрвСр ΠΈΠ»ΠΈ свой ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, вытаскивая Π²ΠΈΠ»ΠΊΡƒ ΠΈΠ· Ρ€ΠΎΠ·Π΅Ρ‚ΠΊΠΈ. Но ΠΏΠΎΡ‡Π΅ΠΌΡƒ? А всС ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ смонтированныС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ систСмы Π½Π° физичСских устройствах хранСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ записи, Π° структуры Π΄Π°Π½Π½Ρ‹Ρ…, Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΡ… состояниС, ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с записями Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Когда это случаСтся, Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°ΠΌ систСмы приходится ΠΆΠ΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ для запуска ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ fsck filesystem-recovery ΠΈ, Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС, ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, всС ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ IoT устройства, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹, тСрмостаты ΠΈ Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Linux. МногиС ΠΈΠ· этих устройств практичСски Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, ΠΈ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ способа Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… «чисто». ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС запуск автомобиля с разряТСнной Π±Π°Ρ‚Π°Ρ€Π΅Π΅ΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΈΡ‚Π°Π½ΠΈΠ΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ устройства Π½Π° Linux постоянно скачСт Π²Π²Π΅Ρ€Ρ…-Π²Π½ΠΈΠ·. Как получаСтся, Ρ‡Ρ‚ΠΎ систСма загруТаСтся Π±Π΅Π· Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ fsck, ΠΊΠΎΠ³Π΄Π° Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΊΠΎΠ½Π΅Ρ† Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ? А ΠΎΡ‚Π²Π΅Ρ‚ прост. ВстроСнныС устройства ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° ΠΊΠΎΡ€Π½Π΅Π²ΡƒΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния (сокращСнно ro-rootfs (read-only root fileystem)).

ro-rootfs ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ мноТСство прСимущСств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹, Ρ‡Π΅ΠΌ Π½Π΅ΠΏΠΎΠ΄Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Одно ΠΈΠ· прСимущСств Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ врСдоносноС ПО Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² /usr ΠΈΠ»ΠΈ /lib, Ссли Π½ΠΈ ΠΎΠ΄ΠΈΠ½ процСсс Linux Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΡƒΠ΄Π° ΠΏΠΈΡΠ°Ρ‚ΡŒ. Π”Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни нСизмСняСмая файловая систСма ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΏΠΎΠ»Π΅Π²ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… устройств, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ пСрсонал ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ систСмами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ номинально ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ систСмам Π½Π° мСстах. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, самым Π²Π°ΠΆΠ½Ρ‹ΠΌ (Π½ΠΎ ΠΈ самым ΠΊΠΎΠ²Π°Ρ€Π½Ρ‹ΠΌ) прСимущСством являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ro-rootfs заставляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ систСмныС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Π΅Ρ‰Π΅ Π½Π° этапС проСктирования систСмы. Π Π°Π±ΠΎΡ‚Π° с ro-rootfs ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΈ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎΠΉ, ΠΊΠ°ΠΊ это часто Π±Ρ‹Π²Π°Π΅Ρ‚ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ const Π² языках программирования, Π½ΠΎ ΠΈΡ… прСимущСства Π»Π΅Π³ΠΊΠΎ ΠΎΠΊΡƒΠΏΠ°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ rootfs Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² встраиваСмых систСм, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ здСсь Π½Π° сцСну Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ VFS. Linux Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„Π°ΠΉΠ»Ρ‹ Π² /var Π±Ρ‹Π»ΠΈ доступны для записи, ΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ популярныС прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ встроСнныС систСмы, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ dot-files Π² $HOME. Одним ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ для ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² домашнСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся ΠΈΡ… ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ гСнСрация ΠΈ сборка Π² rootfs. Для /var ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² β€” это ΡΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π», доступный для записи, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ сам / монтируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. Π”Ρ€ΡƒΠ³ΠΎΠΉ популярной Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ являСтся использованиС связываСмых ΠΈΠ»ΠΈ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΌΠ°ΡƒΠ½Ρ‚ΠΎΠ² (bind or overlay mounts).

БвязываСмыС ΠΈ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ°ΡƒΠ½Ρ‚Ρ‹, использованиС ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ man mount – Π»ΡƒΡ‡ΡˆΠΈΠΉ способ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ связываСмыС ΠΈ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ°ΡƒΠ½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ систСмным администраторам Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΅Π΅ прилоТСниям Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Для встроСнных систСм это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² /var Π½Π° Ρ„Π»Π΅Ρˆ-Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»Π΅, доступном Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Π½ΠΎ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΠΈΠ»ΠΈ связываСмоС ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡƒΡ‚ΠΈ ΠΈΠ· tmpfs Π² /var ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ прилоТСниям Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π° Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ (scrawl). ΠŸΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ измСнСния Π² /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 апрСля.

ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ.

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