ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ, Π΄Π΅Π»ΠΈΠΌΡΡ Ρ Π²Π°ΠΌΠΈ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΡΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Β«ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π² Linux: Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ΠΈ Π½ΡΠΆΠ½Ρ ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ?Β» ΠΠ΅ΡΠ²ΡΡ ΡΠ°ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ
ΠΠ°ΠΊ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° VFS Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² eBPF ΠΈ bcc
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ΄ΡΠΎ ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ sysfs
β ΡΡΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π·Π° ΡΡΠΈΠΌ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, Π° ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° ARM64 β ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ eBPF. eBPF (ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Berkeley Packet Filter) ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠΉ Π² query
) ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ ΡΠ΄ΡΠ° ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΡΠΈΡΠ°ΡΠ΅Π»Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΄ΡΠΎ; Π·Π°ΠΏΡΡΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² eBPF Π² Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΄Π΅Π»Π°Π΅Ρ ΡΠ΄ΡΠΎ.
Π ΡΡΠ°ΡΡΡΡ, Π½Π°ΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ eBPF Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² bcc
β ΡΡΠΎ ΡΠΊΡΠΈΠΏΡΡ Π½Π° Python Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΌΠΈ Π²ΡΡΠ°Π²ΠΊΠ°ΠΌΠΈ ΠΊΠΎΠ΄Π° Π½Π° Π‘, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ, ΠΊΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ Ρ ΠΎΠ±ΠΎΠΈΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ Ρ Π»Π΅Π³ΠΊΠΎΡΡΡΡ ΠΈΡ
ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ. Π bcc/tools
Π΅ΡΡΡ 80 Python ΡΠΊΡΠΈΠΏΡΠΎΠ², Π° ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°ΡΡ ΡΠ΅Π±Π΅ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠ΅Π΅ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Ρ
ΠΎΡΡ Π±Ρ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΡΡ ΡΠ°Π±ΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ VFS Π² Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ vfscount
ΠΈΠ»ΠΈ vfsstat
. ΠΡΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΡΡΠΎ Π΄Π΅ΡΡΡΠΊΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠ² vfs_open()
ΠΈ Β«Π΅Π³ΠΎ Π΄ΡΡΠ·Π΅ΠΉΒ» ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠ΅ΠΊΡΠ½Π΄Ρ.
vfsstat.py
β ΡΡΠΎ ΡΠΊΡΠΈΠΏΡ Π½Π° Python, ΡΠΎ Π²ΡΡΠ°Π²ΠΊΠ°ΠΌΠΈ Π‘ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΡΠΎ ΡΡΠΈΡΠ°Π΅Ρ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ VFS.
ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΡΠ°Π²Π»ΡΠ΅ΠΌ USB-ΡΠ»Π΅Ρ Π½Π°ΠΊΠΎΠΏΠΈΡΠ΅Π»Ρ Π² ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ ΠΈ Π΅Π³ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ°.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ eBPF ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²
/sys
, ΠΊΠΎΠ³Π΄Π° Π²ΡΡΠ°Π²Π»Π΅Π½ USB-ΡΠ»Π΅Ρ Π½Π°ΠΊΠΎΠΏΠΈΡΠ΅Π»Ρ. ΠΠ΄Π΅ΡΡ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΡΠ²Π΅ΡΡ
Ρ, bcc
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ 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? ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ disk_add_events ()
, ΠΈ Π»ΠΈΠ±ΠΎ "media_change"
, Π»ΠΈΠ±ΠΎ "eject_request"
ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΠΏΠΈΡΠ°Π½Ρ Π² ΡΠ°ΠΉΠ» ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠ΄Π΅ΡΡ Π±Π»ΠΎΡΠ½ΡΠΉ ΡΠ»ΠΎΠΉ ΡΠ΄ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ userspace ΠΎ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠΈ Β«Π΄ΠΈΡΠΊΠ°Β». ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π΅Π½ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ°Π²ΠΊΠΈ USB-Π½Π°ΠΊΠΎΠΏΠΈΡΠ΅Π»Ρ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠΏΡΡΠΊΠ°ΠΌΠΈ Π²ΡΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΎΠ².
ΠΠΎΡΠ½Π΅Π²ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ Π΄Π΅Π»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π½ΠΈΠΊΡΠΎ Π½Π΅ Π²ΡΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ΅ΡΠ²Π΅Ρ ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ, Π²ΡΡΠ°ΡΠΊΠΈΠ²Π°Ρ Π²ΠΈΠ»ΠΊΡ ΠΈΠ· ΡΠΎΠ·Π΅ΡΠΊΠΈ. ΠΠΎ ΠΏΠΎΡΠ΅ΠΌΡ? Π Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ
Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ, Π° ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
, Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ ΠΈΡ
ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΌΠΎΠ³ΡΡ Π½Π΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ Ρ Π·Π°ΠΏΠΈΡΡΠΌΠΈ Π² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. ΠΠΎΠ³Π΄Π° ΡΡΠΎ ΡΠ»ΡΡΠ°Π΅ΡΡΡ, Π²Π»Π°Π΄Π΅Π»ΡΡΠ°ΠΌ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ ΠΆΠ΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠΈΠ»ΠΈΡΡ fsck filesystem-recovery
ΠΈ, Π² Ρ
ΡΠ΄ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΠΎΡΠ΅ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²ΡΠ΅ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ IoT ΡΡΡΡΠΎΠΉΡΡΠ²Π°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΎΡΡ, ΡΠ΅ΡΠΌΠΎΡΡΠ°ΡΡ ΠΈ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ 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
) ΡΠΈΠΏ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π²
ΠΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΈΠΊΡΠΎ Π½Π΅ ΡΠ΄ΠΈΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΎ 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Β», ΠΏΡΠΈΠ³Π»Π°ΡΠ°Π΅ΠΌ Π½Π°
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com