ืžืขืจื›ื•ืช ืงื‘ืฆื™ื ื•ื™ืจื˜ื•ืืœื™ื•ืช ื‘ืœื™ื ื•ืงืก: ืžื“ื•ืข ื”ืŸ ื ื—ื•ืฆื•ืช ื•ื›ื™ืฆื“ ื”ืŸ ืคื•ืขืœื•ืช? ื—ืœืง 2

ืฉืœื•ื ืœื›ื•ืœื, ืื ื• ื—ื•ืœืงื™ื ืืชื›ื ืืช ื”ื—ืœืง ื”ืฉื ื™ ืฉืœ ื”ืคืจืกื•ื "ืžืขืจื›ื•ืช ืงื‘ืฆื™ื ื•ื™ืจื˜ื•ืืœื™ื•ืช ื‘ืœื™ื ื•ืงืก: ืœืžื” ื”ืŸ ื ื—ื•ืฆื•ืช ื•ืื™ืš ื”ืŸ ืขื•ื‘ื“ื•ืช?" ืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ืืช ื”ื—ืœืง ื”ืจืืฉื•ืŸ ื›ืืŸ. ื ื–ื›ื™ืจ ืœื›ื ืฉืกื“ืจืช ื”ืคืจืกื•ืžื™ื ื”ื–ื• ืžืชื•ื›ื ื ืช ืœื—ืคืฃ ืขื ื”ืฉืงืช ื–ืจื ื—ื“ืฉ ื‘ืงื•ืจืก "ืžื ื”ืœ ืœื™ื ื•ืงืก", ืฉืžืชื—ื™ืœ ื‘ืงืจื•ื‘ ืžืื•ื“.

ื›ื™ืฆื“ ืœื ื˜ืจ VFS ื‘ืืžืฆืขื•ืช ื›ืœื™ eBPF ื•-bcc

ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ืœื”ื‘ื™ืŸ ื›ื™ืฆื“ ื”ืœื™ื‘ื” ืคื•ืขืœืช ืขืœ ืงื‘ืฆื™ื sysfs ื–ื” ืœืจืื•ืช ืืช ื–ื” ื‘ืคื•ืขืœ, ื•ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ืœืฆืคื•ืช ื‘-ARM64 ื”ื™ื ืœื”ืฉืชืžืฉ ื‘-eBPF. eBPF (ืงื™ืฆื•ืจ ืฉืœ Berkeley Packet Filter) ืžื•ืจื›ื‘ ืžืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื”ืคื•ืขืœืช ืคื ื™ืžื” ื”ืœื™ื‘ื”, ืฉืžืฉืชืžืฉื™ื ืžื•ืจืฉื™ื ื™ื›ื•ืœื™ื ืœื‘ืงืฉ (query) ืžืฉื•ืจืช ื”ืคืงื•ื“ื”. ืžืงื•ืจื•ืช ื”ืœื™ื‘ื” ืื•ืžืจื™ื ืœืงื•ืจื ืžื” ื”ืœื™ื‘ื” ื™ื›ื•ืœื” ืœืขืฉื•ืช; ื”ืคืขืœืช ื›ืœื™ ื”-eBPF ืขืœ ืžืขืจื›ืช ื˜ืขื•ื ื” ืžืจืื” ืžื” ื‘ืขืฆื ื”ืœื™ื‘ื” ืขื•ืฉื”.

ืžืขืจื›ื•ืช ืงื‘ืฆื™ื ื•ื™ืจื˜ื•ืืœื™ื•ืช ื‘ืœื™ื ื•ืงืก: ืžื“ื•ืข ื”ืŸ ื ื—ื•ืฆื•ืช ื•ื›ื™ืฆื“ ื”ืŸ ืคื•ืขืœื•ืช? ื—ืœืง 2

ืœืžืจื‘ื” ื”ืžื–ืœ, ื”ืชื—ืœืช ื”ืฉื™ืžื•ืฉ ื‘-eBPF ื”ื™ื ื“ื™ ืงืœื” ื‘ืขื–ืจืช ื›ืœื™ื BCC, ื”ื–ืžื™ื ื•ืช ื›ื—ื‘ื™ืœื•ืช ืžื”ื”ืคืฆื” ื”ื›ืœืœื™ืช ืœื™ื ื•ืงืก ื•ืžืชื•ืขื“ ื‘ืคื™ืจื•ื˜ ื‘ืจื ืจื“ ื’ืจื’. ื›ืœื™ื bcc ื”ื ืกืงืจื™ืคื˜ื™ื ืฉืœ Python ืขื ืชื•ืกืคื•ืช ืงื˜ื ื•ืช ืฉืœ ืงื•ื“ C, ืžื” ืฉืื•ืžืจ ืฉื›ืœ ืžื™ ืฉืžื›ื™ืจ ืืช ืฉืชื™ ื”ืฉืคื•ืช ื™ื›ื•ืœ ืœืฉื ื•ืช ืื•ืชื ื‘ืงืœื•ืช. IN bcc/tools ื™ืฉื ื 80 ืกืงืจื™ืคื˜ื™ื ืฉืœ Python, ืžื” ืฉืื•ืžืจ ืฉื›ื›ืœ ื”ื ืจืื” ืžืคืชื— ืื• ืžื ื”ืœ ืžืขืจื›ืช ื™ื•ื›ืœื• ืœื‘ื—ื•ืจ ืžืฉื”ื• ืžืชืื™ื ืœืคืชืจื•ืŸ ื”ื‘ืขื™ื”.
ื›ื“ื™ ืœืงื‘ืœ ืœืคื—ื•ืช ืžื•ืฉื’ ืฉื˜ื—ื™ ืขืœ ืžื” ื”ืขื‘ื•ื“ื” ืฉืœ VFSs ืขืœ ืžืขืจื›ืช ืคื•ืขืœืช, ื ืกื” vfscount ืื• vfsstat. ื–ื” ื™ืจืื”, ื ื ื™ื—, ืฉืขืฉืจื•ืช ืฉื™ื—ื•ืช vfs_open() ื•"ื”ื—ื‘ืจื™ื ืฉืœื•" ืงื•ืจื™ื ืžืžืฉ ื›ืœ ืฉื ื™ื™ื”.

ืžืขืจื›ื•ืช ืงื‘ืฆื™ื ื•ื™ืจื˜ื•ืืœื™ื•ืช ื‘ืœื™ื ื•ืงืก: ืžื“ื•ืข ื”ืŸ ื ื—ื•ืฆื•ืช ื•ื›ื™ืฆื“ ื”ืŸ ืคื•ืขืœื•ืช? ื—ืœืง 2

vfsstat.py ื”ื•ื ืกืงืจื™ืคื˜ Python ืขื ื”ื•ืกืคืช ืงื•ื“ C ืฉืคืฉื•ื˜ ืกื•ืคืจ ืงืจื™ืื•ืช ืœืคื•ื ืงืฆื™ื•ืช VFS.

ื‘ื•ืื• ื ื™ืชืŸ ื“ื•ื’ืžื” ื˜ืจื™ื•ื•ื™ืืœื™ืช ื™ื•ืชืจ ื•ื ืจืื” ืžื” ืงื•ืจื” ื›ืืฉืจ ืื ื• ืžื›ื ื™ืกื™ื ื›ื•ื ืŸ ื”ื‘ื–ืง ืžืกื•ื’ USB ืœืžื—ืฉื‘ ื•ื”ืžืขืจื›ืช ืžื–ื”ื” ืื•ืชื•.

ืžืขืจื›ื•ืช ืงื‘ืฆื™ื ื•ื™ืจื˜ื•ืืœื™ื•ืช ื‘ืœื™ื ื•ืงืก: ืžื“ื•ืข ื”ืŸ ื ื—ื•ืฆื•ืช ื•ื›ื™ืฆื“ ื”ืŸ ืคื•ืขืœื•ืช? ื—ืœืง 2

ื‘ืืžืฆืขื•ืช eBPF ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืžื” ืงื•ืจื” ื‘ /sysื›ืืฉืจ ืžื•ื›ื ืก ื›ื•ื ืŸ ื”ื‘ื–ืง ืžืกื•ื’ USB. ื“ื•ื’ืžื” ืคืฉื•ื˜ื” ื•ืžื•ืจื›ื‘ืช ืžื•ืฆื’ืช ื›ืืŸ.

ื‘ื“ื•ื’ืžื” ื”ืžื•ืฆื’ืช ืœืžืขืœื”, bcc ื›ืœื™ trace.py ืžื“ืคื™ืก ื”ื•ื“ืขื” ื›ืืฉืจ ื”ืคืงื•ื“ื” ืžื•ืคืขืœืช 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 ืงื™ืฉื•ืจื™ื ืกืžืœื™ื™ื ื ื•ืฆืจื•.

ืื– ืžื” ื”ื˜ืขื ื‘ืชื™ืง ื”ืื™ืจื•ืขื™ื? ื ื•ึนื”ึธื’ cscope ืœื—ื™ืคื•ืฉ __device_add_disk(), ืžืจืื” ืœืžื” ื–ื” ื’ื•ืจื 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) ืกื•ื’ ืžืขืจื›ืช ื”ืงื‘ืฆื™ื, ื”ืจื›ื‘ื” ื”ื ื™ืชื ืช ืœื—ื™ื‘ื•ืจ ืžื™ื•ืฉื ื‘ ืžืจื—ื‘ ื”ืฉืžื•ืช ืฉืœ VFS.

ื‘ื”ืชื‘ืกืก ืขืœ ื”ืชื™ืื•ืจ ืฉืœ ืฉื›ื‘ืช ื”ืขืœ ื•ื”ืชื•ืฉื‘ืช ื”ื ื™ืชื ืช ืœืงื™ืฉื•ืจ, ืืฃ ืื—ื“ ืœื ืžื•ืคืชืข ืžื›ืš ืžื™ื›ืœื™ ืœื™ื ื•ืงืก ื”ื ื ืžืฆืื™ื ื‘ืฉื™ืžื•ืฉ ืคืขื™ืœ. ื‘ื•ื ื ืจืื” ืžื” ืงื•ืจื” ื›ืฉืื ื—ื ื• ืžืฉืชืžืฉื™ื systemd-nspawn ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ืžื™ื›ืœ ื‘ืืžืฆืขื•ืช ื”ื›ืœื™ 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
ืžื” ืฉื”ื•ืคืš ืืช ื—ืงืจ ื”ืœื™ื‘ื” ืœืงืœ ืžืชืžื™ื“.

ื—ื‘ืจื™ื, ื›ืชื‘ื•, ื”ืื ืžืืžืจ ื–ื” ื”ื™ื” ืฉื™ืžื•ืฉื™ ืขื‘ื•ืจื›ื? ืื•ืœื™ ื™ืฉ ืœืš ื”ืขืจื•ืช ืื• ื”ืขืจื•ืช? ื•ืžื™ ืฉืžืชืขื ื™ื™ืŸ ื‘ืงื•ืจืก ืžื ื”ืœ ืœื™ื ื•ืงืก ืžื•ื–ืžืŸ ื™ื•ื ืคืชื•ื—, ืฉื™ืชืงื™ื™ื ื‘-18 ื‘ืืคืจื™ืœ.

ื—ืœืง ืจืืฉื•ืŸ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”