ΠΠ΄ΡΠ°Π²ΠΎ Π½Π° ΡΠΈΡΠ΅, ΡΠΎ Π²Π°Ρ Π³ΠΎ ΡΠΏΠΎΠ΄Π΅Π»ΡΠ²Π°ΠΌΠ΅ Π²ΡΠΎΡΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° βΠΠΈΡΡΡΠ΅Π»Π½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π²ΠΎ Linux: Π·ΠΎΡΡΠΎ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ ΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π°Ρ?β ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠ²ΠΈΠΎΡ Π΄Π΅Π»
ΠΠ°ΠΊΠΎ Π΄Π° Π³ΠΎ ΡΠ»Π΅Π΄ΠΈΡΠ΅ VFS ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π°Π»Π°ΡΠΊΠΈ eBPF ΠΈ bcc
ΠΠ°ΡΠ»Π΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΎ ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ ΡΠ°Π±ΠΎΡΠΈ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ sysfs
Π΅ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈ Π²ΠΎ ΠΏΡΠ°ΠΊΡΠ°, Π° Π½Π°ΡΠ»Π΅ΡΠ½ΠΈΠΎΡ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈ ARM64 Π΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ eBPF. eBPF (ΠΊΡΠ°ΡΠ΅Π½ΠΊΠ° ΠΎΠ΄ ΠΠ΅ΡΠΊΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΡΠΈΠ»ΡΠ΅Ρ) ΡΠ΅ ΡΠΎΡΡΠΎΠΈ ΠΎΠ΄ Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Π²Π½Π°ΡΡΠ΅ query
) ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ°. ΠΠ·Π²ΠΎΡΠΈΡΠ΅ Π½Π° ΡΠ°Π΄ΡΠΎΡΠΎ ΠΌΡ ΠΊΠ°ΠΆΡΠ²Π°Π°Ρ Π½Π° ΡΠΈΡΠ°ΡΠ΅Π»ΠΎΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ; ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π°Π»Π°ΡΠΊΠΈΡΠ΅ eBPF Π½Π° Π²ΡΠΈΡΠ°Π½ ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° ΡΡΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΠΏΡΠ°Π²ΠΈ ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ.
ΠΠ° ΡΡΠ΅ΡΠ°, Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π°ΡΠ΅ΡΠΎ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° eBPF Π΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π»Π΅ΡΠ½ΠΎ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Π°Π»Π°ΡΠΊΠΈ bcc
ΡΠ΅ Python ΡΠΊΡΠΈΠΏΡΠΈ ΡΠΎ ΠΌΠ°Π»ΠΈ Π²ΠΌΠ΅ΡΠ½ΡΠ²Π°ΡΠ° Π½Π° C ΠΊΠΎΠ΄, ΡΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° ΡΠ΅ΠΊΠΎΡ ΡΡΠΎ Π΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Π½ ΡΠΎ Π΄Π²Π°ΡΠ° ΡΠ°Π·ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈ. ΠΠ bcc/tools
ΠΠΌΠ° 80 Python ΡΠΊΡΠΈΠΏΡΠΈ, ΡΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° Π½Π°ΡΠ²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°Ρ ΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ Π½Π΅ΡΡΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ Π·Π° ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ.
ΠΠ° Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ Π±Π°ΡΠ΅ΠΌ ΠΏΠΎΠ²ΡΡΠ½Π° ΠΈΠ΄Π΅ΡΠ° Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠ²Π° ΡΠ°Π±ΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ°Ρ VFS Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ, ΠΎΠ±ΠΈΠ΄Π΅ΡΠ΅ ΡΠ΅ vfscount
ΠΈΠ»ΠΈ vfsstat
. ΠΠ²Π° ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅, Π΄Π° ΡΠ΅ΡΠ΅ΠΌΠ΅, Π΄Π΅ΠΊΠ° Π΄Π΅ΡΠ΅ΡΠΈΡΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ vfs_open()
Π° βΠ½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΈΡΠ°ΡΠ΅Π»ΠΈβ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π°Π°Ρ Π±ΡΠΊΠ²Π°Π»Π½ΠΎ ΡΠ΅ΠΊΠΎΡΠ° ΡΠ΅ΠΊΡΠ½Π΄Π°.
vfsstat.py
Π΅ Python ΡΠΊΡΠΈΠΏΡΠ° ΡΠΎ Π²ΠΌΠ΅ΡΠ½ΡΠ²Π°ΡΠΈ Π½Π° C ΠΊΠΎΠ΄ ΡΡΠΎ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π³ΠΈ Π±ΡΠΎΠΈ ΠΏΠΎΠ²ΠΈΡΠΈΡΠ΅ Π½Π° VFS ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠ΄Π΅ Π΄Π° Π΄Π°Π΄Π΅ΠΌΠ΅ ΠΏΠΎΠ±Π°Π½Π°Π»Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° ΠΊΠΎΠ³Π° ΡΠ΅ Π²ΠΌΠ΅ΡΠ½Π΅ΠΌΠ΅ USB ΡΠ»Π΅Ρ Π΄ΡΠ°ΡΠ² Π²ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΡΠ΅ Π³ΠΎ ΠΎΡΠΊΡΠΈΠ΅.
ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ eBPF, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° Π²ΠΎ
/sys
ΠΊΠΎΠ³Π° Π΅ Π²ΠΌΠ΅ΡΠ½Π°Ρ USB ΡΠ»Π΅Ρ Π΄ΡΠ°ΡΠ². ΠΠ΄Π½ΠΎΡΡΠ°Π²Π΅Π½ ΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π΅ ΠΏΡΠΈΠΊΠ°ΠΆΠ°Π½ ΠΎΠ²Π΄Π΅.
ΠΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ ΠΏΡΠΈΠΊΠ°ΠΆΠ°Π½ ΠΏΠΎΠ³ΠΎΡΠ΅, bcc
Π°Π»Π°ΡΠΊΠ° 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 ΡΠΈΠΌΠ±ΠΎΠ»ΠΈΡΠ½ΠΈ Π²ΡΡΠΊΠΈ.
ΠΠ½Π°ΡΠΈ, ΡΡΠΎ Π΅ ΠΏΠΎΠ΅Π½ΡΠ°ΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠΎ Π½Π°ΡΡΠ°Π½ΠΈ? Π£ΠΏΠΎΡΡΠ΅Π±Π° disk_add_events ()
, ΠΈ Π±ΠΈΠ»ΠΎ "media_change"
ΠΠ»ΠΈ "eject_request"
ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ½ΠΈΠΌΠΈ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠΎ Π½Π°ΡΡΠ°Π½ΠΈ. ΠΠ²Π΄Π΅ ΡΠ»ΠΎΡΠΎΡ Π·Π° Π±Π»ΠΎΠΊΠΎΠ²ΠΈ Π½Π° ΡΠ°Π΄ΡΠΎΡΠΎ Π³ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ° ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ Π΄Π΅ΠΊΠ° ΡΠ΅ ΠΏΠΎΡΠ°Π²ΠΈΠ» ΠΈ ΠΈΡΡΡΠ»Π΅Π½ βΠ΄ΠΈΡΠΊβ. ΠΠ°Π±Π΅Π»Π΅ΠΆΠ΅ΡΠ΅ ΠΊΠΎΠ»ΠΊΡ Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π΅Π½ ΠΎΠ²ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° ΠΈΡΡΡΠ°ΠΆΡΠ²Π°ΡΠ΅ ΡΠΎ Π²ΠΌΠ΅ΡΠ½ΡΠ²Π°ΡΠ΅ USB-ΡΡΠ΅Π΄, Π²ΠΎ ΡΠΏΠΎΡΠ΅Π΄Π±Π° ΡΠΎ ΠΎΠ±ΠΈΠ΄ΠΎΡ Π΄Π° Π΄ΠΎΠ·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π°Ρ ΡΠΈΡΡΠΎ ΠΎΠ΄ ΠΈΠ·Π²ΠΎΡΠΎΡ.
root-Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΡΠΈΡΠ°ΡΠ΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°Π°Ρ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΡΠ΅Π΄ΠΈ
Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, Π½ΠΈΠΊΠΎΡ Π½Π΅ Π³ΠΎ ΠΈΡΠΊΠ»ΡΡΡΠ²Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΠΈΠ»ΠΈ Π½ΠΈΠ²Π½ΠΈΠΎΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ ΡΠΎ ΠΏΠΎΠ²Π»Π΅ΠΊΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊΠΎΡ ΠΎΠ΄ ΡΡΠ΅ΠΊΠ΅ΡΠΎΡ. ΠΠΎ Π·ΠΎΡΡΠΎ? ΠΠ²Π° Π΅ Π·Π°ΡΠΎΠ° ΡΡΠΎ ΠΌΠΎΠ½ΡΠΈΡΠ°Π½ΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° ΡΠΈΠ·ΠΈΡΠΊΠΈ ΡΡΠ΅Π΄ΠΈ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ ΠΌΠΎΠΆΠ΅Π±ΠΈ ΠΈΠΌΠ°Π°Ρ Π·Π°ΠΎΡΡΠ°Π½Π°ΡΠΈ Π·Π°ΠΏΠΈΡΠΈ, Π° ΡΡΡΡΠΊΡΡΡΠΈΡΠ΅ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΡΠΎ ΡΠ° ΡΠ½ΠΈΠΌΠ°Π°Ρ Π½ΠΈΠ²Π½Π°ΡΠ° ΡΠΎΡΡΠΎΡΠ±Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΡΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π°Ρ ΡΠΎ Π·Π°ΠΏΠΈΡΠΈΡΠ΅ Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ. ΠΠΎΠ³Π° ΡΠΎΠ° ΡΠ΅ ΡΠ΅ ΡΠ»ΡΡΠΈ, ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ΠΊΠ°Π°Ρ Π΄ΠΎ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΠΏΠΎΠ΄ΠΈΠ³Π°ΡΠ΅ Π·Π° Π΄Π° ΡΠ° ΡΡΠ°ΡΡΡΠ²Π°Π°Ρ Π°Π»Π°ΡΠΊΠ°ΡΠ°. fsck filesystem-recovery
ΠΈ, Π²ΠΎ Π½Π°ΡΠ»ΠΎΡ ΡΠ»ΡΡΠ°Ρ, Π³ΡΠ±Π΅ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ.
Π‘Π΅ΠΏΠ°ΠΊ, ΡΠΈΡΠ΅ Π·Π½Π°Π΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΌΠ½ΠΎΠ³Ρ IoT ΡΡΠ΅Π΄ΠΈ, ΠΊΠ°ΠΊΠΎ ΠΈ ΡΡΡΠ΅ΡΠΈ, ΡΠ΅ΡΠΌΠΎΡΡΠ°ΡΠΈ ΠΈ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ, ΡΠ΅Π³Π° ΡΠ°Π±ΠΎΡΠ°Ρ ΡΠΎ Linux. ΠΠ½ΠΎΠ³Ρ ΠΎΠ΄ ΠΎΠ²ΠΈΠ΅ ΡΡΠ΅Π΄ΠΈ ΠΈΠΌΠ°Π°Ρ ΠΌΠ°Π»ΠΊΡ ΠΈΠ»ΠΈ Π½Π΅ΠΌΠ°Π°Ρ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ ΠΈ Π½Π΅ ΠΏΠΎΡΡΠΎΠΈ Π½Π°ΡΠΈΠ½ Π΄Π° Π³ΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅ βΡΠΈΡΡΠΎβ. ΠΠ°ΠΌΠΈΡΠ»Π΅ΡΠ΅ Π΄Π° ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ» ΡΠΎ ΠΈΠ·ΡΠΌΡΠ΅Π½Π° Π±Π°ΡΠ΅ΡΠΈΡΠ° ΠΊΠΎΠ³Π° Π΅ Π½Π°ΠΏΠΎΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π°ΡΠ° Π΅Π΄ΠΈΠ½ΠΈΡΠ° fsck
ΠΊΠΎΠ³Π° ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΏΠΎΡΠ½ΡΠ²Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΌΠΎΡΠΎΡΠΎΡ? Π ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΎΡ Π΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½. ΠΠ³ΡΠ°Π΄Π΅Π½ΠΈΡΠ΅ ΡΡΠ΅Π΄ΠΈ ΡΠ΅ ΠΏΠΎΡΠΏΠΈΡΠ°Π°Ρ Π½Π° root Π΄Π°ΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ ro-rootfs
(root Π΄Π°ΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΌΠΎ Π·Π° ΡΠΈΡΠ°ΡΠ΅)).
ro-rootfs
Π½ΡΠ΄Π°Ρ ΠΌΠ½ΠΎΠ³Ρ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²ΠΊΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΠΏΠΎΠΌΠ°Π»ΠΊΡ ΠΎΡΠΈΠ³Π»Π΅Π΄Π½ΠΈ ΠΎΠ΄ Π°Π²ΡΠ΅Π½ΡΠΈΡΠ½ΠΎΡΡΠ°. ΠΠ΄Π½Π° ΠΎΠ΄ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π΅ ΡΡΠΎ ΠΌΠ°Π»ΠΈΡΠΈΠΎΠ·Π½ΠΈΠΎΡ ΡΠΎΡΡΠ²Π΅Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΈΡΡΠ²Π° /usr
ΠΈΠ»ΠΈ /lib
, Π°ΠΊΠΎ Π½ΠΈΠ΅Π΄Π΅Π½ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΠΈΠ½ΡΠΊΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΈΡΡΠ²Π° ΡΠ°ΠΌΡ. ΠΡΡΠ³Π° Π΅ Π΄Π΅ΠΊΠ° Π²ΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° ΠΌΠ΅ΡΠ° Π½Π΅ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΠΎΡ Π΄Π°ΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ Π΅ ΠΊΡΠΈΡΠΈΡΠ΅Π½ Π·Π° ΡΠ΅ΡΠ΅Π½ΡΠΊΠ°ΡΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π½Π° Π΄Π°Π»Π΅ΡΠΈΠ½ΡΠΊΠΈΡΠ΅ ΡΡΠ΅Π΄ΠΈ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΎΡ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° ΡΠ΅ ΠΏΠΎΡΠΏΠΈΡΠ° Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΊΠΎΠΈ ΡΠ΅ Π½ΠΎΠΌΠΈΠ½Π°Π»Π½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ ΡΠΎ ΡΠ΅ΡΠ΅Π½ΡΠΊΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΠΎΠΆΠ΅Π±ΠΈ Π½Π°ΡΠ²Π°ΠΆΠ½Π°ΡΠ° (Π½ΠΎ ΠΈ Π½Π°ΡΠΏΠΎΠ΄ΠΌΠΎΠ»Π½Π°ΡΠ°) ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²ΠΊΠ° Π΅ ΡΠΎΠ° ΡΡΠΎ ro-rootfs Π³ΠΈ ΠΏΡΠΈΠ½ΡΠ΄ΡΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ Π΄Π° ΠΎΠ΄Π»ΡΡΠ°Ρ ΠΊΠΎΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ Π½Π΅ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π²ΠΎ ΡΠ°Π·Π°ΡΠ° Π½Π° Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ. Π Π°Π±ΠΎΡΠ΅ΡΠ΅ΡΠΎ ΡΠΎ ro-rootf ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ Π½Π΅ΠΏΡΠΈΡΠ°ΡΠ½ΠΎ ΠΈ Π±ΠΎΠ»Π½ΠΎ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ const ΡΠ΅ΡΡΠΎ ΡΠ΅ Π²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈΡΠ΅ ΡΠ°Π·ΠΈΡΠΈ, Π½ΠΎ Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²ΠΊΠΈ Π»Π΅ΡΠ½ΠΎ Π³ΠΎ ΠΎΠΏΡΠ°Π²Π΄ΡΠ²Π°Π°Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈΠΎΡ ΡΠΎΠ²Π°Ρ.
ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ rootfs
Π‘Π°ΠΌΠΎ Π·Π° ΡΠΈΡΠ°ΡΠ΅ Π±Π°ΡΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ Π½Π°ΠΏΠΎΡ Π·Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈ, ΠΈ ΡΡΠΊΠ° Π΄ΠΎΠ°ΡΠ° VFS Π½Π° ΡΠ»ΠΈΠΊΠ°ΡΠ°. Linux Π±Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π΄Π° Π±ΠΈΠ΄Π°Ρ Π²Π½Π°ΡΡΠ΅ /var
ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ΅, Π° ΠΏΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Ρ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΠ΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π°Ρ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° dot-files
Π² $HOME
. ΠΠ΄Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΊΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π²ΠΎ Π΄ΠΎΠΌΠ°ΡΠ½ΠΈΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ ΠΎΠ±ΠΈΡΠ½ΠΎ Π΅ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π°Ρ ΠΈ Π΄Π° ΡΠ΅ Π²Π³ΡΠ°Π΄Π°Ρ Π²ΠΎ Π½ΠΈΠ² rootfs
. ΠΠ° /var
ΠΠ΄Π΅Π½ ΠΌΠΎΠΆΠ΅Π½ ΠΏΡΠΈΡΡΠ°ΠΏ Π΅ Π΄Π° Π³ΠΎ ΠΌΠΎΠ½ΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠΎΡΠ΅Π±Π½Π° ΠΏΠ°ΡΡΠΈΡΠΈΡΠ° ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ΅, Π΄ΠΎΠ΄Π΅ΠΊΠ° /
ΠΌΠΎΠ½ΡΠΈΡΠ°Π½ ΡΠ°ΠΌΠΎ Π·Π° ΡΠΈΡΠ°ΡΠ΅. ΠΡΡΠ³Π° ΠΏΠΎΠΏΡΠ»Π°ΡΠ½Π° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π΄ΡΠΆΠ°ΡΠΈ Π·Π° Π²ΡΠ·ΡΠ²Π°ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅.
ΠΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠΊΠΈ ΠΈ ΡΠΊΠ»ΠΎΠΏΠ»ΠΈΠ²ΠΈ Π΄ΡΠΆΠ°ΡΠΈ, Π½ΠΈΠ²Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° ΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ
ΠΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° man mount
Π΅ Π½Π°ΡΠ΄ΠΎΠ±ΡΠΈΠΎΡ Π½Π°ΡΠΈΠ½ Π΄Π° Π½Π°ΡΡΠΈΡΠ΅ Π·Π° ΠΏΡΠΈΡΠ²ΡΡΡΡΠ²Π°ΡΠΈΡΠ΅ ΡΡΠΎ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ΅ Π²ΡΠ·ΡΠ²Π°Π°Ρ ΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΊΠ»ΠΎΠΏΡΠ²Π°Π°Ρ, ΠΊΠΎΠΈ ΠΈΠΌ Π΄Π°Π²Π°Π°Ρ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΈ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈΡΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΈ ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π°Ρ Π΄Π°ΡΠΎΡΠ΅ΡΠ΅Π½ ΡΠΈΡΡΠ΅ΠΌ Π½Π° Π΅Π΄Π½Π° ΠΏΠ°ΡΠ΅ΠΊΠ°, Π° ΠΏΠΎΡΠΎΠ° Π΄Π° Π³ΠΎ ΠΈΠ·Π»ΠΎΠΆΠ°Ρ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π²ΠΎ Π΄ΡΡΠ³Π°. ΠΠ° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΎΠ²Π° Π·Π½Π°ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΠ°ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π²ΠΎ /var
Π½Π° ΡΠ»Π΅Ρ-ΡΡΠ΅Π΄ ΡΠ°ΠΌΠΎ Π·Π° ΡΠΈΡΠ°ΡΠ΅, Π½ΠΎ ΠΏΠ°ΡΠ΅ΠΊΠ° Π·Π° ΠΌΠΎΠ½ΡΠΈΡΠ°ΡΠ΅ ΡΠΎ ΠΏΡΠ΅ΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ ΠΎΠ΄ tmpfs
Π² /var
ΠΊΠΎΠ³Π° ΡΠ΅ Π²ΡΠΈΡΡΠ²Π°, ΡΠ΅ ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Π΄Π° ΠΏΠΈΡΡΠ²Π°Π°Ρ Π±Π΅Π»Π΅ΡΠΊΠΈ ΡΠ°ΠΌΡ (Π΄Π° ΡΠ΅ Π³ΡΠ΅Π±Π΅). Π‘Π»Π΅Π΄Π½ΠΈΠΎΡ ΠΏΠ°Ρ ΠΊΠΎΠ³Π° ΡΠ΅ Π³ΠΈ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π½Π° /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 ΡΡΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΡΠΈΡΠ°ΡΠ΅ ΠΈ root Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠ° ΡΠΎ ΠΈΡΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΈΠ·Π²ΠΎΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ΄, ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π°Π»Π°ΡΠΊΠ° eBPF ΠΈ Π½Π΅ΡΠ·ΠΈΠ½ΠΈΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ bcc
ΡΡΠΎ Π³ΠΎ ΠΏΡΠ°Π²ΠΈ ΠΈΡΡΡΠ°ΠΆΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΠ°Π΄ΡΠΎΡΠΎ ΠΏΠΎΠ»Π΅ΡΠ½ΠΎ ΠΎΠ΄ ΠΊΠΎΠ³Π° Π±ΠΈΠ»ΠΎ.
ΠΡΠΈΡΠ°ΡΠ΅Π»ΠΈ, ΠΏΠΈΡΠ΅ΡΠ΅, Π΄Π°Π»ΠΈ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° Π²ΠΈ Π±Π΅ΡΠ΅ ΠΊΠΎΡΠΈΡΠ½Π°? ΠΠΎΠΆΠ΅Π±ΠΈ ΠΈΠΌΠ°ΡΠ΅ Π½Π΅ΠΊΠ°ΠΊΠ²ΠΈ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ ΠΈΠ»ΠΈ Π·Π°Π±Π΅Π»Π΅ΡΠΊΠΈ? Π ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ ΡΠ΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π½ΠΈ Π·Π° ΠΊΡΡΡΠΎΡ Linux Administrator ΡΠ΅ ΠΏΠΎΠΊΠ°Π½Π΅ΡΠΈ
ΠΠ·Π²ΠΎΡ: www.habr.com