ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ, ΡΠΏΠΎΠ΄Π΅Π»ΡΠΌΠ΅ Ρ Π²Π°Ρ Π²ΡΠΎΡΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΡΠ° βΠΠΈΡΡΡΠ°Π»Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π² Linux: Π·Π°ΡΠΎ ΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ ΠΈ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΡΡ?β ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΡΡΠ²Π°ΡΠ° ΡΠ°ΡΡ
ΠΠ°ΠΊ Π΄Π° Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΡΠ΅ VFS Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° eBPF ΠΈ bcc ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ
ΠΠ°ΠΉ-Π»Π΅ΡΠ½ΠΈΡΡ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊ ΡΠ΄ΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ sysfs
Π΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°, Π° Π½Π°ΠΉ-Π»Π΅ΡΠ½ΠΈΡΡ Π½Π°ΡΠΈΠ½ Π΄Π° Π³Π»Π΅Π΄Π°ΡΠ΅ ARM64 Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ eBPF. eBPF (ΡΡΠΊΡΠ°ΡΠ΅Π½ΠΎ ΠΎΡ Berkeley Packet Filter) ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΡΠ°Π±ΠΎΡΠ΅ΡΠ° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° query
) ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄. ΠΠ·ΡΠΎΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π° ΡΠ΄ΡΠΎΡΠΎ ΠΊΠ°Π·Π²Π°Ρ Π½Π° ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠ΄ΡΠΎΡΠΎ; ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ eBPF Π½Π° Π·Π°ΡΠ΅Π΄Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊΠ²ΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΠΏΡΠ°Π²ΠΈ ΡΠ΄ΡΠΎΡΠΎ.
ΠΠ° ΡΠ°ΡΡΠΈΠ΅, Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ eBPF Π΅ Π΄ΠΎΡΡΠ° Π»Π΅ΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ bcc
ΡΠ° Python ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Ρ ΠΌΠ°Π»ΠΊΠΈ Π²ΠΌΡΠΊΠ²Π°Π½ΠΈΡ Π½Π° C ΠΊΠΎΠ΄, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ, Π·Π°ΠΏΠΎΠ·Π½Π°Ρ Ρ Π΄Π²Π°ΡΠ° Π΅Π·ΠΈΠΊΠ°, ΠΌΠΎΠΆΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°. IN 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 ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΠΎΠΏΠΈΡΠΈΡΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΡΡ Π½Π΅ΡΠ°ΡΠ° ΡΠ°ΠΌΠΎ ΠΎΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ°.
ΠΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π½ΠΈΠΊΠΎΠΉ Π½Π΅ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π° ΡΡΡΠ²ΡΡΠ° ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΡΠ° ΡΠΈ, ΠΊΠ°ΡΠΎ ΠΈΠ·Π΄ΡΡΠΏΠ° ΡΠ΅ΠΏΡΠ΅Π»Π° ΠΎΡ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ°. ΠΠΎ Π·Π°ΡΠΎ? Π’ΠΎΠ²Π° Π΅ ΡΠ°ΠΊΠ°, Π·Π°ΡΠΎΡΠΎ ΠΌΠΎΠ½ΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π·Π° ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Ρ Π·Π°ΠΊΡΡΠ½Π΅Π»ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΡΡΡΠΊΡΡΡΠΈΡΠ΅ ΠΎΡ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Ρ ΡΡΡ
Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΡΡ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°. ΠΠΎΠ³Π°ΡΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ»ΡΡΠΈ, ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΡΠ°ΠΊΠ°Ρ Π΄ΠΎ ΡΠ»Π΅Π΄Π²Π°ΡΠΎΡΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅, Π·Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΠΏΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°. fsck filesystem-recovery
ΠΈ Π² Π½Π°ΠΉ-Π»ΠΎΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ Π·Π°Π³ΡΠ±Π° Π½Π° Π΄Π°Π½Π½ΠΈ.
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π²ΡΠΈΡΠΊΠΈ Π·Π½Π°Π΅ΠΌ, ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ IoT ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΡΡΠ΅ΡΠΈ, ΡΠ΅ΡΠΌΠΎΡΡΠ°ΡΠΈ ΠΈ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ, ΡΠ΅Π³Π° ΡΠ°Π±ΠΎΡΡΡ Ρ 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
) ΡΠΈΠΏ ΡΠ°ΠΉΠ»ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΌΠΎΠ½ΡΠΈΡΠ°Π½Π΅ Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΎ Π²
ΠΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π½Π°ΡΠ»Π°Π³Π²Π°Π½Π΅ΡΠΎ ΠΈ ΠΌΠΎΠ½ΡΠ°ΠΆΠ° Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅, Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Π΅ ΠΈΠ·Π½Π΅Π½Π°Π΄Π°Π½ ΠΎΡ ΡΠΎΠ²Π° 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 Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ, ΡΠ° ΠΏΠΎΠΊΠ°Π½Π΅Π½ΠΈ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com