ααααΆααα½αα’αααααΆααα’ααααααΆ αα½αααΎααααα»αα
αααααααααΆαα½αα’αααααΌααααααααΈααΈαααααΆαααααα»ααα βααααααααα―αααΆααα·αααα·ααα
αααα»αααΈαα»α
α α ααα»α’αααΈααΆαααΆαα½αααααααΌαααΆα α αΎαααΎαα½αααααααΎαααΆααααΆαααΌα
ααααα
?β α’αααα’αΆα
α’αΆααααααααααΌα
αααααααα½ααα·αα·ααα VFS αααααααΎα§ααααα eBPF αα·α bcc
αααααααΆαααΆααααα½ααααα»αααΎααααΈαααααΈαααααααααΊαααααααΎαααΆαααΎα―αααΆα sysfs
ααΊααΎααααΈααΎαααΆαα
αααα»αααΆαα’αα»αααα α αΎααα·ααΈααααααα½ααααα»ααααα»αααΆαααΎα ARM64 ααΊααααΌαααααΎ eBPF α eBPF (ααααΈαααααΆααααααααααα
αα Berkeley) ααΆααααΆαααΈααα·αααα·αααααααα»αααααΎαααΆα query
) ααΈαααααΆααααΆααααααααΆα αααααααΊαααααααΆααα’αααα’αΆαααΌαα’αααΈαααααΊαααα’αΆα
ααααΎααΆαα ααΆαααααΎαααΆαα§ααααα eBPF αα
ααΎαααααααααααααΆααααα»ααααα αΆαααΈα’αααΈαααααΊααααααα»αααααΎα
ααΆααααΆαααα’ ααΆαα
αΆααααααΎαααααΎααααΆαα eBPF ααΊααΆααααα½αααΆαααααααΆααααα½αααΈα§ααααα bcc
ααΊααΆα’αααα Python ααΆαα½αααΉαααΆααααα
αΌαααΌα
αααααΌα C αααααΆααααααΆα’αααααΆααααΆαααααααααΆααααΆααΆααΆααααΈαα’αΆα
ααααααααΆααΆααααΆαααΆααααα½αα IN bcc/tools
ααΆαααααααΈα Python α
ααα½α 80 αααααΆααααααΆααΆαα
αααΎαααααααΆα’αααα’αα·αααααα α¬α’ααααααααααααααααααααααΉαα’αΆα
ααααΎαααΎαα’αααΈααααααααααααααΆααααΆααααααααΆααααα αΆα
ααΎααααΈααα½αααΆααααΆαα αα
ααΆαααααα·αααααα·α
ααααα·αααααΆαααΆαααα VFSs ααααΎαα
ααΎααααααααααααααα»αααααΎαααΆα ααΌαααΆααααα vfscount
α¬ vfsstat
. αααααΉααααα αΆα, α§αααΆααΆ, ααΆαα α
ααΌααααααααΆαααα·α vfs_open()
α αΎα "αα·αααααααααΆαα" ααΎαα‘αΎαααΆαααααΆαααα·ααΆααΈα
vfsstat.py
ααΊααΆααααααΈα Python ααΆαα½αααΉαααΆααααα αΌαααΌα C αααααααΆααααααΆααααΆαα α αα»αααΆα VFS α
α αΌαααΎααααααα§ααΆα αααααααΌα αα½αααααααααα α αΎαααΎαααΆααΎααΆαα’αααΈααΎαα‘αΎααα ααααααααΎααααα αΌα USB flash drive αα αααα»ααα»αααααΌααα α αΎαααααααααααααΎαααΆα
αααααααΎ eBPF α’αααα’αΆα ααΎαα’αααΈααααααα»αααΎαα‘αΎααα αααα»α
/sys
αα ααααααα αΌα USB flash drive α α§ααΆα αααααΆαααα αα·ααααα»αααααΆαααααΌαααΆααααα αΆααα ααΈαααα
αα
αααα»αα§ααΆα ααααααααΆααααα αΆαααΆαααΎα bcc
α§ααααα sysfs_create_files()
. ααΎαααΎααααα sysfs_create_files()
ααααΌαααΆαααΎαααααΎαααΆααααααααΎ kworker
ααααααΈαααααΎααααα
ααΉαααΆααα·ααααααΆααααΆααααααααΊααααΌαααΆααααα
αΌαααα»ααααααΎα―αααΆαα’αααΈααααΌαααΆααααααΎα? α§ααΆα αααααΈααΈααααα αΆαααΈα’αααΆα
αα eBPF α αα
ααΈααα trace.py
ααααα»αααααΊααα backtrace (-K αααααΎα) αα·ααααααα―αααΆααααααααΌαααΆααααααΎα sysfs_create_files()
. ααΆααααα
αΌαααα
ααααΈαααααααΆααααααα½αααΊααΆααΌα C ααααα½ααααα
αΌαααααα’αααααααααααααα’αΆα
ααααΆααααΆααααΆαααΆααααα½ααααααααααααααααααΈα Python αααααααΎαααΆα LLVM αααααα·ααΈα
αααααααΆααααααααΆ. ααΆα
ααααααααααΆααααα α αΎαααααα·ααααα·ααΆαα
αααα»ααααΆαααΈααα·αααα·ααα
ααΆααααα»αααΊαααα α αααααααΆαα»αααΆααααααα sysfs_create_files ()
ααααΌαααααα·αα‘αΎααα·ααα
αααα»αααΆααααααααΆααΈααΈα ααΌα
ααααααααααααααα’αΆα
ααααα
ααΎαααΆαααΆαααααααα½ααααα»αα
αααααααΆαααΆααααααα ααα α»ααα
αααα»ααααααααααΌα C ααααααααΆαα±ααααΆαααα α»ααααα’αΆα
ααααΆααααΆαααΈ C compiler α α§ααΆα ααα ααααα·αααΎαααΆαααΆαααααα -l ααααΌαααΆααα»αα
αα α’αααααΉαααΎα "αααΆααααααα»αααΆαα
αααααα’ααααα BPF" α α’αααα’αα·αααααααααααααΆαα C αα·α Python ααΉααααααααα§ααααα bcc
ααΆααααα½ααααααΈα αα·αααααΆααααααΌαα
αα
ααααααα
αΌα USB drive ααα kernel backtrace ααΉααααα αΆαααΆ PID 7711 ααΊααΆαααααααα‘αΆα kworker
αααααΆααααααΎαα―αααΆα Β«eventsΒ»
Π² sysfs
. α’αΆαααααα ααα»ααα ααΆαα α
ααΌααααααααΈ sysfs_remove_files()
ααΉααααα αΆαααΆααΆαααααααΆαα
ααααΆαααααααααα―αααΆαααααΌαααΆααα»α events
αααααααΌαααΉααααα·αααΌαα
ααααΆαααΆαααααα αααααΉαααΉααααααΆαααΎα sysfs_create_link ()
ααΆαα½α eBPF ααααααα
αΌα USB drive ααΉααααα αΆαααΆαααΆαα αα
ααΆαα 48 αααααααΆαααα·αα·ααααααααΆααααΌαααΆααααααΎαα‘αΎαα
ααΌα
ααααααΎα’αααΈααΆα
ααα»α
ααα―αααΆαααααΉαααα·ααΆααα? ααΆαααααΎααααΆαα disk_add_events ()
, αα·α "media_change"
, α¬ "eject_request"
α’αΆα
ααααΌαααΆααααααααΆαα
αααα»αα―αααΆαααααΉαααα·ααΆαααα αα
ααΈααα αααααΆαααααα»αααΊαααααΌαααααΉααααααα α’αααααααΎααααΆααααΆ "ααΆα" ααΆαααα
α
αα αα·αα
αααΆαα
ααα α
αααΆαααΆααΎαα·ααΈααΆαααααααααΆαααααΆαααααααααααααααΆααααΆαααΆαααααΆααααα
αΌα USB drive ααΎαααααααααα
ααΉαααΆαααααΆααΆαααααααααααΈαααααααα’αααΈαααααΎαααΆααα»αααααΆαααΈαααααα
ααααααααα―αααΆα root ααΆαααα’αΆα ααΎαα§ααααααααααΆααααααα
ααΆααΆααα·αααΆαα ααααΆαααααΆααααΆαααα·ααααΆαααΈααα α¬αα»αααααΌααααααααα½ααααααααΆααααα
ααααΈαααααααααα ααβα ααα»α’αααΈ? αααααΊαααααΆαααααααααααα―αααΆααααααΆααααααα
ααΎα§ααααααααα»ααα·ααααααα’αΆα
ααΆαααΆααααααααΊα α αΎααα
ααΆαααααααααα·ααααααααααααααααΆααααΆαααΆααααααα½αααα’αΆα
ααΉααα·αααααΌαααΆαααααΎααααΆαααααααΆαα½αααΉαααΆαααααααα
αααααααααα»αα αα
αααααΆααΎαα‘αΎα ααα
αΆααααααααααααααΌααααα
αΆααα αΌααααααΆαα
αΆααααααΎααααααΆααααΎααααΈααΎαααααΎαααΆαα§αααααααααΎααααΆααα fsck filesystem-recovery
α αΎααααα»αααααΈααα’αΆααααααααα»α ααΆαααΆααααααα·ααααααα
αααααΆαααΆαααΆααααα ααΎαααΆααα’ααααααΆααΉαααΆα§ααααα IoT ααΆα
αααΎα ααααΌα
ααΆααααααα α§αααααααααα
αα·ααααααα α₯α‘αΌααααααααΎαααΆαααΈαα»α
α α§αααααααΆαααααααΆα
αααΎαααΆαα
ααα»α
αααααΆααα’αααααααΎαα·α
αα½α
α¬ααααΆα α αΎααα·αααΆααα·ααΈααΎααααΈαα·ααα½αααΆ "αααΆαααα’αΆα" αααααα αααααααΆα
αΆααααααΎαα‘αΆαααααααααΆαααα
ααααααααΆααααα
α’αααααΆααααααΆ fsck
ααΎαα
αααααΆααααααΆαααΈαα
αΆααααααΎαααααΎαααΆα? α αΎαα
ααααΎαααΊααΆααααα α§ααααααααααΆαααααααααΉαααα’ααααΎααααααααα―αααΆαα«α ro-rootfs
(ααααααααα―αααΆαα«αααΆαααα’αΆα)) α
ro-rootfs
αααααα’αααααααααααααΆα
αααΎαααααα·αα
αααΆααααΆαααΆααα·αααααΆααα α’ααααααααααααα½αααΊααΆααααααα·αα’αΆα
ααααααα
/usr
α¬ /lib
ααααα·αααΎααααΆαααααΎαααΆαααΈαα»α
α’αΆα
ααααααα
ααΈαααα αα½ααααααΊααΆααααααααα―αααΆαααααα·αα’αΆα
ααααΆααααααΌαααΆαααΊααΆαααΆααααααΆαααααααΆααααΆαααΆαααααααααα§αααααααΈα
ααααΆα α
αΆααααΆααααΈαα»ααααα·ααααα½αααΉαααα’ααααΎααααααααααΌαααααΆααααααΆαααααααααΌα
ααααΆααααα·ααα
ααΉαααααααααααΆαα αααα ααααΆα’αααααααααααααααααΆαααααα»α (ααα»ααααααα’αΆααααααααα»αααααα) ααΊααΆ ro-rootfs αααααα’αααα’αα·ααααααα±αααααααα
α
α·αααααΆααΎααααα»ααααααααααΆαα½αααΉααα·αα’αΆα
ααααΆααααααΌαααΆααα
ααααΆααααΆααα
ααΆααααααααααα ααΆαααααΎααΆαααΆαα½α ro-rootfs α’αΆα
ααΆααΏααααα αα·αααΊα
αΆαα αααααΆαα’ααα const α
αααΎαααααΆααα
αααα»αααΆααΆααααααααααα·ααΈ ααα»ααααα’αααααααααααααααααΆααΆααααα½ααααα αΆαα’αααΈααΆαααααΉαααααΌαααααααα
ααΆααααααΎα rootfs
ααΆαα’αΆαααΆαααααΆαααΆαααΆααα·αααααααΉαααααααααααααα½αα
ααα½ααααααΆααα’αααα’αα·αααααααααααΆααααααα α αΎααααααΊααΆααααααααα VFS α
αΌααααααα»αααΌαααΆαα ααΈαα»α
ααΆαααΆαα±ααα―αααΆααα
αααα»α /var
α’αΆα
αααααααΆα α αΎαααΎαααΈαααααα αααααα·ααΈααααα·ααααΆα
αααΎααααααααΎαααΆαααααααααααααααααΉαααααΆααΆααααααΎαααΆαααααα dot-files
Π² $HOME
. αααααβααααΆαβαα½αβαααααΆααβα―αααΆαβαααααβαα
ααΆααααααααβαααα»αβααβααααβααΆβααααααΆβααΊβααααΌαβαααααΎαβααΆβαα»αβ αα·αβαααααΎαβααΆβα
αΌαβαααα»αβ rootfs
α αααααΆαα /var
αα·ααΈααΆααααααα½ααααα’αΆα
ααααΎαα
ααΆαααΊααααΌαααααααΆαα
ααΎααΆαααΆααααα’αΆα
αααααααΆαααΆα
ααααα‘αα /
ααΆαααα‘αΎααααααΆααααα’αΆαα αααααΎαααααααα·αααα½ααααααΊααααΎααΆαα
α α¬ααΆααααΆααααΎα
αααααααα’αΆα ααααΆααααΆα αα·αα’αΆα αααααΆα ααΆαααααΎααααΆαααααααα½αααααααα»α
ααΆαααααα·ααααα·ααΆααααααααΆ man mount
ααΊααΆαα·ααΈααααα’αααα»αααΎααααΈαα·ααααΆα’αααΈ bindable and overlayable mounts ααααααααα±ααα’αααα’αα·αααααα αα·αα’ααααααααααααααααααααααΌααααααααΆααααα»αααΆααααααΎαααααααααα―αααΆααα½ααααα»αααααΌααα½α α αΎααααααΆααααααΆααααααΆαααΆαα
αααααα·ααΈαααα»ααα½αααααααααα αααααΆαααααααααααααααα αααααΆααααααΆαααααααΆααααα»αααΆααααααΆαα»αα―αααΆααα
αααα»α /var
αα
ααΎααααΆααααααααΊααΆαααα’αΆα ααα»ααααααΆααααΌαααααΆαα α¬ααααΌααααααααα’αΆα
ααααΆααααΆαααΈ tmpfs
Π² /var
αα
ααααααα»α ααΆααΉαα’αα»ααααΆαα±αααααααα·ααΈααααααααααα
αααΆααα
ααΈααα (α’αΌαααΆα)α ααΎαααααααααα’αααααΎαααΆαααααΆααααααΌααα
/var
ααΉαααααΌαααΆαααααα αααααααα½αααΎααααΆαααααΎααα ααΈααααΆα tmpfs
αα·αααααααααα―αααΆαααΌαααααΆα αα·αα’αα»ααααΆαα±ααα’αααααααΎααΆαααααΆααααααΌαααΆαααααααα
ααααα―αααΆααααααΆαααααΆαααα
αααα»α ro-tootf
α
ααααβα―βααααβαααβα’αΆα
βα
αβααΆαβα’αΆα
βααααΎβα±ααβααααΈβααα tmpfs
αααααα’αΆα
ααΎαααΎαααΆα’αΆα
αααααααΆααα
αααα»α ro-rootfs
αα·ααΈα ααααααααα overlayfs
αααααΆααΆαααααΉαααααΌα (proper
) ααααααααααααααα―αααΆα αααααααα’αΆα
α
αααΆαααααΌαααΆαα’αα»αααααα
αααα»α
αααααα’ααααΎααΆααα·αααααΆααααΆααααα½αααααΆαα·ααααααααα’αΆα
ααααΆααααΆαααααΆαααααΆααααΆααααααΆααααα’αΎααααααα mountsnoop
ααΈ bcc
.
αααα αΆααααα system-nspawn
α
αΆααααααΎααα»ααααααααααα»αααααΎαααΆα mountsnoop.py
.
αααααΎαααΆααΆαα’αααΈααΎαα‘αΎαα
ααΎαααααΎαααΆα mountsnoop
ααααααααααα»αααΊααααααα»α "α
αΆααααααΎα" αααα αΆαααΆααααααααααΎαααΆααααααα»αααΊαααααΊααΉαααα’ααααααΆααααΎαααααααααααΌαααΆαααααΆαα (ααΆαααααΆαα
αΆααααααΎααααα·ααααααααααα»αααααααααΌαααΆααααα αΆα) α
ααΆααΊααΆααΆα systemd-nspawn
αααααα―αααΆααααααΆαααααΎαααΎααα
αααα»α procfs
ΠΈ sysfs
host αα
ααΆαααα»αααΊαααααΆααααΌααα
ααΆααααΆα rootfs
... αααα
ααΈ MS_BIND
αααααααααααααΆαααα‘αΎα binding mount ααααα½αα
ααα½ααααααααααα
ααΎ mount αααααααααΆαααααααααΆαααΆαααααΆααααααΌααα
host αα·α container namespaces α α§ααΆα ααα αααααααααααααΆααα’αΆα
ααααααΆαααααΆααααααΌααα
/proc
ΠΈ /sys
α
αΌααα
αααα»ααα»αααΊααα α¬ααΆαααα½αααΆα’αΆαααααααΎααΆαα α
ααΌαααααα
ααα ααααΈααααα·ααααΆα
ααΆααααααΉαααΈααΆαααΆαααΆααααα»αααααααΈαα»α
α’αΆα
α αΆααααΌα
ααΆαα·α
αα
ααΆαααααα·αα’αΆα
αα
αα½α
αααααααΊααααααα½αααΆαααα»αααΌαααΌααααΆαα
αααΎα ααααααααααα»αααΌααααααα·ααΈα
αααααα’αααααααΎααααΆααααΈαα»α
αα·αα
ααα»α
αααααΆααα α
αααααααααα
αααα»ααααααΆααα C ααΌα
ααΆ glibc
. αα·ααΈαα½αααΎααααΈααααΎα±ααααΆααααααααΆαααΊααΆαα’αΆαααΌααααααααααααααααααααΊααααα½α ααααααααααααααααΎααΆααααααΉαα’αααΈααΆαα α
αααααααα αα·αααααααΆααα αα’αααααααΎααααΆαα ααααΌα
ααΆα
ααα»α
αααααΆααααΊαααααΆααααα»αααααΆααα ααΌα
ααΆααΆααΆαα file_operations
. ααααα·ααααα·ααΆαα―αααΆααααααααΌααααααΆααα "α’αααΈααααααααΆαααΊααΆα―αααΆα" αααααααΎα±αααα½αααααΈαααΆαααΆαα·ααααααα»αααΆααααααααααα α―αααΆααααααααΊααα C αα
αααα»αααααααα·αααααΌα fs/
αααα αΆαααΈααΆαα’αα»ααααααααααααα―αααΆααα·αααα·α αααααΆαααααΆαααα»αααααααααααΌαααΆαααααααΆαααΆαααΌααααΌααΆα αα·αααΆαααααααΆαααααααααα―αααΆαααααα·αα αα·αα§ααααααααα»αα ααΆαααααΆαα αα·αααΆαααααΆαααααα½αααΎααααΆααΆαααα namespaces ααΈαα»α
ααΊααΆααααααααα VFS αααααααΎα±ααααΆααααααΎααα»ααααααΆααααα’αΆα αα·αααααααααα―αααΆαα«αα’αΆα
ααααΎαα
ααΆαα αα½ααααα
αΌαααααΆααΆαα½αααΉαααΆααα·αα·αααααΎαααΌαααααα α§αααααααααΌα eBPF αα·αα
ααα»α
αααααΆααααααααΆα bcc
ααααΎα±ααααΆααα»αααααααΌαααΆαααΆαααΆααααα½αααΆααααααΆααΆααα’ααα
αα·αααα’αααααααα ααΎα’ααααααααααΆααααααααααααααΆααα’ααααα? αααα ααβααΆβα’αααβααΆαβαααααβα¬βααΆαβαααβαααααΆαα? α αΎαα’ααααααα
αΆααα’αΆααααααααΎαααααα·ααααΆ Linux Administrator ααααΌαααΆαα’ααααΎαα±ααα
αΌααα½α
ααααα: www.habr.com