ืฉืืื ืืืืื, ืื ื ืืืืงืื ืืชืื ืืช ืืืืง ืืฉื ื ืฉื ืืคืจืกืื "ืืขืจืืืช ืงืืฆืื ืืืจืืืืืืืช ืืืื ืืงืก: ืืื ืื ื ืืืฆืืช ืืืื ืื ืขืืืืืช?" ืืชื ืืืื ืืงืจืื ืืช ืืืืง ืืจืืฉืื
ืืืฆื ืื ืืจ VFS ืืืืฆืขืืช ืืื eBPF ื-bcc
ืืืจื ืืงืื ืืืืชืจ ืืืืื ืืืฆื ืืืืื ืคืืขืืช ืขื ืงืืฆืื sysfs
ืื ืืจืืืช ืืช ืื ืืคืืขื, ืืืืจื ืืงืื ืืืืชืจ ืืฆืคืืช ื-ARM64 ืืื ืืืฉืชืืฉ ื-eBPF. eBPF (ืงืืฆืืจ ืฉื Berkeley Packet Filter) ืืืจืื ืืืืื ื ืืืจืืืืืืช ืืคืืขืืช ืคื ืืื query
) ืืฉืืจืช ืืคืงืืื. ืืงืืจืืช ืืืืื ืืืืจืื ืืงืืจื ืื ืืืืื ืืืืื ืืขืฉืืช; ืืคืขืืช ืืื ื-eBPF ืขื ืืขืจืืช ืืขืื ื ืืจืื ืื ืืขืฆื ืืืืื ืขืืฉื.
ืืืจืื ืืืื, ืืชืืืช ืืฉืืืืฉ ื-eBPF ืืื ืื ืงืื ืืขืืจืช ืืืื bcc
ืื ืกืงืจืืคืืื ืฉื Python ืขื ืชืืกืคืืช ืงืื ืืช ืฉื ืงืื C, ืื ืฉืืืืจ ืฉืื ืื ืฉืืืืจ ืืช ืฉืชื ืืฉืคืืช ืืืื ืืฉื ืืช ืืืชื ืืงืืืช. IN bcc/tools
ืืฉื ื 80 ืกืงืจืืคืืื ืฉื Python, ืื ืฉืืืืจ ืฉืืื ืื ืจืื ืืคืชื ืื ืื ืื ืืขืจืืช ืืืืื ืืืืืจ ืืฉืื ืืชืืื ืืคืชืจืื ืืืขืื.
ืืื ืืงืื ืืคืืืช ืืืฉื ืฉืืื ืขื ืื ืืขืืืื ืฉื VFSs ืขื ืืขืจืืช ืคืืขืืช, ื ืกื 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 text." ืืคืชืืื ืฉืืืืจืื ืืช 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, ืืื ืื ื ืชืืื, ืชืจืืืกืืืื ืืืืื ืืืช, ืืจืืฆืื ืืขืช ืืื ืืงืก. ืืจืืื ืืืืืฉืืจืื ืืืื ืืฉ ืืขื ืืืฉืง ืืฉืชืืฉ, ืืืื ืฉืื ืืจื ืืืืืช ืืืชื "ืืฆืืจื ื ืงืืื". ืชืืจื ืืขืฆืืื ืฉืืชื ืืขืื ืืืื ืืช ืขื ืกืืืื ืืชื ืืืฉืจ ืืืื ืืืืืืช ืืืงืจื ื ืืฆื fsck
ืืชื ืกืืฃ ืกืืฃ ืืื ืืข ืืชืืื ืืคืขืื? ืืืชืฉืืื ืคืฉืืื. ืืชืงื ืื ืืฉืืืฆืื ืืกืชืืืื ืขื ืืขืจืืช ืงืืฆื ืืฉืืจืฉ ro-rootfs
(ืืขืจืืช ืืกืืก ืืงืจืืื ืืืื)).
ro-rootfs
ืืฆืืขืื ืืชืจืื ืืช ืจืืื ืฉืคืืืช ืืจืืจืื ืืืืชื ืืืืช. ืืชืจืื ืืื ืืื ืฉืชืืื ืืช ืืืื ืืืช ืื ืืืืืืช ืืืชืื /usr
ืื /lib
, ืื ืฉืื ืชืืืื ืืื ืืงืก ืื ืืืื ืืืชืื ืฉื. ืืืจ ืืื ืฉืืขืจืืช ืงืืฆืื ื ืืชื ืช ืืฉืื ืื ืืืืื ืจืื ืืื ืงืจืืืืช ืืชืืืื ืืฉืื ืฉื ืืชืงื ืื ืืจืืืงืื, ืืืืืื ืฉืื ืฉื ืืชืืืื ืืกืชืืืื ืขื ืืขืจืืืช ืืงืืืืืช ืฉืืืืช ื ืืืื ืืืช ืืืขืจืืืช ืืฉืื. ืืืื ืืืชืจืื ืืืฉืื ืืืืชืจ (ืื ืื ืืื ืขืจืืืื) ืืื ืฉ-ro-rootfs ืืืืฅ ืืคืชืืื ืืืืืื ืืืื ืืืืืืงืื ืืขืจืืช ืืืื ืืืชื ื ืืชื ืื ืืฉืื ืื ืืฉืื ืืชืื ืื ืฉื ืืืขืจืืช. ืขืืืื ืขื ro-rootfs ืืืืื ืืืืืช ืืืืื ืืืืืืช, ืืืืืื ืฉืืฉืชื ื ืงืื ืกื ื ืืฆืืื ืืจืื ืืฉืคืืช ืชืื ืืช, ืื ืืืชืจืื ืืช ืฉืืื ืืฆืืืงืื ืืงืืืช ืืช ืืชืงืืจื ืื ืืกืคืช.
ืืฆืืจื rootfs
ืงืจืืื ืืืื ืืืจืฉืช ืงืฆืช ืืืืฅ ื ืืกืฃ ืขืืืจ ืืคืชืืื ืืฉืืืฆืื, ืืืื VFS ื ืื ืก ืืชืืื ื. ืืื ืืงืก ืืืจืฉืช ืฉืืงืืฆืื ืืืื ืืคื ืื /var
ืืื ื ืืชื ืื ืืืชืืื, ืืื ืืกืฃ, ืืืฉืืืื ืคืืคืืืจืืื ืจืืื ืืืจืืฆืื ืืขืจืืืช ืืฉืืืฆืืช ืื ืกื ืืืฆืืจ ืชืฆืืจื dot-files
ะฒ $HOME
. ืคืชืจืื ืืื ืืงืืืฆื ืชืฆืืจื ืืกืคืจืืื ืืืืชืืช ืืื ืืืจื ืืื ืืืฆืืจ ืืจืืฉ ืืืื ืืช ืืืชื rootfs
. ืขืืืจ /var
ืืืฉื ืืคืฉืจืืช ืืืช ืืื ืืืจืืื ืืืชื ืขื ืืืืฆื ื ืคืจืืช ืืืชืืื, ืชืื ืืื /
ืืืชืงื ืืงืจืืื ืืืื. ืืืืจื ืืืื ืคืืคืืืจืืช ื ืืกืคืช ืืื ืืืฉืชืืฉ ืืชืืฉืืืช ืืจืืื ืื ืืืกืื.
ืชืืฉืืืช ื ืืชื ืืช ืืงืืฉืืจ ืืืขืจืืื, ืืฉืืืืฉ ืืื ืขื ืืื ืืืืืืช
ืืืฆืืข ืคืงืืื man mount
ืืื ืืืจื ืืืืื ืืืืชืจ ืืืืื ืขื mounts ืื ืืชื ืื ืืืื ืื ืืชื ืืฉืืืืช, ืืืขื ืืงืืช ืืืคืชืืื ืืื ืืื ืืขืจืืช ืืช ืืืืืืช ืืืฆืืจ ืืขืจืืช ืงืืฆืื ืื ืชืื ืืื ืืื ืืืฉืืฃ ืืืชื ืืืืฉืืืื ืื ืชืื ืืืจ. ืขืืืจ ืืขืจืืืช ืืฉืืืฆืืช, ืืฉืืขืืช ืืืืจ ืืื ืืืืืืช ืืืืกื ืงืืฆืื /var
ืืืื ื ืืืืง ืืงืจืืื ืืืื, ืื ื ืชืื ืืืกืื ืื ื ืชืื ืืจืืื ืื ืืชื ืืงืืฉืืจ tmpfs
ะฒ /var
ืืขืช ืืืขืื ื, ืื ืืืคืฉืจ ืืืคืืืงืฆืืืช ืืืชืื ืฉื ืืขืจืืช (ืงืฉืงืืฉืื). ืืคืขื ืืืื ืฉืชืคืขืื ืืช ืืฉืื ืืืื ื /var
ืืืื. ืชืืฉืืช ืฉืืืช-ืขื ืืืฆืจืช ืืืืื ืืื ืืื tmpfs
ืืืขืจืืช ืืงืืฆืื ืืืกืืกืืช ืืืืคืฉืจืช ืื ืืืฆืข ืฉืื ืืืื ืืืืืจื ืืงืืฆืื ืงืืืืื ื ro-tootf
ืืืืื ืชืืฉืืช ืื ืืชื ืช ืืืืืืจ ืืืืื ืืืคืื ืืืฉืื ืืจืืง tmpfs
ืชืืงืืืช ืื ืจืืืช ืื ืืชื ืืช ืืืชืืื ื ro-rootfs
ืืจืืื. ืืืื overlayfs
ืื ืื ืืื (proper
) ืกืื ืืขืจืืช ืืงืืฆืื, ืืจืืื ืื ืืชื ืช ืืืืืืจ ืืืืฉื ื
ืืืชืืกืก ืขื ืืชืืืืจ ืฉื ืฉืืืช ืืขื ืืืชืืฉืืช ืื ืืชื ืช ืืงืืฉืืจ, ืืฃ ืืื ืื ืืืคืชืข ืืื mountsnoop
ื bcc
.
ะัะทะพะฒ system-nspawn
ืืคืขืื ืืช ืืืืื ืชืื ืืื ืจืืฆื mountsnoop.py
.
ืืื ื ืจืื ืื ืงืจื:
ืืคืขืื mountsnoop
ืืืื ืฉืืืืื "ืืืชืื" ืืจืื ืฉืืื ืืจืืฆื ืฉื ืืืืื ืชืืื ืืืื ื-mount ืืืงืืฉืจ (ืจืง ืืืชืืื ืฉื ืืคืื ืืืจืื ืืืฆืืช).
ืืื systemd-nspawn
ืืกืคืง ืงืืฆืื ื ืืืจืื ื procfs
ะธ sysfs
ืืืจื ืืืืืื ืืฉืืืืื ืืืื rootfs
. ืืืขื MS_BIND
ืืื ืฉืืืืืจ ืืช ืืืจ ืืืืืื, ืืื ืืืืื ืืืจืื ื-mount ืืืืืจืื ืืช ืืงืฉืจ ืืื ืืฉืื ืืืื ืืืจืืื ืืฉืืืช ืฉื ืืืืจื ื-container. ืืืืืื, mount ืืงืืฉืจ ืืืื ืืืื ืขื ืฉืื ืืืื /proc
ะธ /sys
ืืชืื ืืืืืื, ืื ืืกืชืจ ืืืชื ืืืชืื ืืฉืืื.
ืืกืงื ื
ืืื ืช ืคืขืืืชื ืืคื ืืืืช ืฉื ืืื ืืงืก ืืืืื ืืืืจืืืช ืืืฉืืื ืืืชื ืืคืฉืจืืช, ืืืืืื ืฉืืงืจื ื ืขืฆืื ืืืื ืืืืช ืขืฆืืื ืฉื ืงืื, ืชืื ืืฉืืจืช ืืืฉืืื ืืจืื ืืฉืชืืฉ ืฉื ืืื ืืงืก ืืืืฉืงื ืฉืืืืช ืืขืจืืช ืืกืคืจืืืช C ืืืื glibc
. ืืืช ืืืจืืื ืืืชืงืื ืืื ืืงืจืื ืืช ืงืื ืืืงืืจ ืฉื ืชืช-ืืขืจืืช ืืืื ืืืช, ืขื ืืืฉ ืขื ืืื ืช ืงืจืืืืช ืืขืจืืช ืืืืชืจืืช ืืจืื ืืฉืชืืฉ, ืืื ืื ืืืฉืงื ืืืืื ืืคื ืืืืื ืืขืืงืจืืื, ืืืื ืืืืืืช file_operations
. ืคืขืืืืช ืงืืฆืื ืืกืคืงืืช ืืช ืขืงืจืื "ืืื ืงืืืฅ", ืื ืฉืืืคื ืืืชื ืืืื ื ืืืืืื ืื ืืืื. ืงืืฆื ืืงืืจ ืืืืช C ืืกืคืจืืื ืืจืื ืืขืืืื ื fs/
ืืฆืืืื ืืืฉืื ืฉื ืืขืจืืืช ืงืืฆืื ืืืจืืืืืืืช, ืฉืื ืฉืืืช ืขืืืคื ืืืกืคืงืช ืชืืืืืช ืจืืื ืืคืฉืืื ืืืกืืช ืืื ืืขืจืืืช ืงืืฆืื ืคืืคืืืจืืืช ืืืชืงื ื ืืืกืื. ืงืืฉืืจ ืืืจืืืช ืฉืืืช-ืขื ืืืืฆืขืืช ืืจืืื ืฉืืืช ืฉื ืืื ืืงืก ืื ืืงืกื ืฉื VFS ืฉืืืคืฉืจ ืืฆืืจืช ืงืื ืืืื ืจืื ืืงืจืืื ืืืื ืืืขืจืืืช ืงืืฆืื ืฉืืจืฉืืืช. ืืฉืืืื ืืืืงื ืฉื ืงืื ืืืงืืจ, ืืื ืืืืื eBPF ืืืืืฉืง ืฉืื bcc
ืื ืฉืืืคื ืืช ืืงืจ ืืืืื ืืงื ืืชืืื.
ืืืจืื, ืืชืื, ืืื ืืืืจ ืื ืืื ืฉืืืืฉื ืขืืืจืื? ืืืื ืืฉ ืื ืืขืจืืช ืื ืืขืจืืช? ืืื ืฉืืชืขื ืืื ืืงืืจืก ืื ืื ืืื ืืงืก ืืืืื
ืืงืืจ: www.habr.com