เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ virtual เปƒเบ™ Linux: เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบžเบงเบเบกเบฑเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”? เบžเบฒเบเบ—เบต 2

เบชเบฐเบšเบฒเบเบ”เบตเบ—เบธเบเบ„เบปเบ™, เบžเบงเบเป€เบฎเบปเบฒเปเบšเปˆเบ‡เบ›เบฑเบ™เบเบฑเบšเบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบญเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบžเบดเบกเป€เบœเบตเบเปเบœเปˆ "เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ virtual เปƒเบ™ Linux: เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบžเบงเบเบกเบฑเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?" เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบžเบฒเบเบ—เปเบฒเบญเบดเบ” เบ—เบตเปˆเบ™เบตเป‰. เบ‚เปเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบ•เบทเบญเบ™เบ—เปˆเบฒเบ™เบงเปˆเบฒเบŠเบธเบ”เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบžเบดเบกเบ™เบตเป‰เปเบกเปˆเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบเบปเบ‡เบเบฑเบšเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เปƒเบซเบกเปˆเปƒเบ™เบซเบผเบฑเบเบชเบนเบ”. "เบœเบนเป‰เป€เบšเบดเปˆเบ‡เปเบเบ‡เบฅเบฐเบšเบปเบš Linux", เป€เบŠเบดเปˆเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เป„เบงเป†เบ™เบตเป‰.

เบงเบดเบ—เบตเบเบฒเบ™เบเบงเบ”เบชเบญเบš VFS เป‚เบ”เบเปƒเบŠเป‰ eBPF เปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบกเบท bcc

เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเบดเบ—เบตเบเบฒเบ™ kernel เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒ sysfs เปเบกเปˆเบ™เบเบฒเบ™เป€เบšเบดเปˆเบ‡เบกเบฑเบ™เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เปเบฅเบฐเบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเป€เบšเบดเปˆเบ‡ ARM64 เปเบกเปˆเบ™เบเบฒเบ™เปƒเบŠเป‰ eBPF. eBPF (เบชเบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบš Berkeley Packet Filter) เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡ virtual เปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™ เบซเบผเบฑเบ, เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰เบชเบดเบ”เบ—เบดเบžเบดเป€เบชเบ”เบชเบฒเบกเบฒเบ”เบฎเป‰เบญเบ‡เบ‚เป (query) เบˆเบฒเบโ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹. เปเบซเบผเปˆเบ‡ kernel เบšเบญเบเบœเบนเป‰เบญเปˆเบฒเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆ kernel เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰; เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบท eBPF เปƒเบ™เบฅเบฐเบšเบปเบšเบ—เบตเปˆเป‚เบซเบฅเบ”เป„เบ”เป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒ kernel เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบซเบเบฑเบ‡.

เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ virtual เปƒเบ™ Linux: เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบžเบงเบเบกเบฑเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”? เบžเบฒเบเบ—เบต 2

เป‚เบŠเบเบ”เบต, เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบŠเป‰ eBPF เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเป‚เบ”เบเบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบท bcc, เป€เบŠเบดเปˆเบ‡เบกเบตเบขเบนเปˆเปƒเบ™เบŠเบธเบ”เบˆเบฒเบเบเบฒเบ™เปเบˆเบเบขเบฒเบเบ—เบปเปˆเบงเป„เบ› Linux เปเบฅเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™โ€‹เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹ Bernard Gregg. เป€เบ„เบทเปˆเบญเบ‡เบกเบท bcc เปเบกเปˆเบ™ Python scripts เบ—เบตเปˆเบกเบตเบเบฒเบ™เปเบŠเบเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” C, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปƒเบœเบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบ—เบฑเบ‡เบชเบญเบ‡เบžเบฒเบชเบฒเบชเบฒเบกเบฒเบ”เบ”เบฑเบ”เปเบ›เบ‡เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ. IN bcc/tools เบกเบต 80 เบชเบฐเบ„เบดเบš Python, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบชเปˆเบงเบ™เบซเบผเบฒเบเปเบกเปˆเบ™เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบซเบผเบทเบœเบนเป‰เป€เบšเบดเปˆเบ‡เปเบเบ‡เบฅเบฐเบšเบปเบšเบˆเบฐเบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ.
เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ™เป‰เบญเบเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเป€เบฅเบดเบเป€เบŠเบดเปˆเบ‡เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆ VFSs เป€เบฎเบฑเบ”เปƒเบ™เบฅเบฐเบšเบปเบšเปเบฅเปˆเบ™, เบžเบฐเบเบฒเบเบฒเบก vfscount เบซเบผเบท vfsstat. เบ™เบตเป‰เบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒ, เบเบฒเบ™เป‚เบ—เบซเบผเบฒเบเบชเบดเบš vfs_open() เปเบฅเบฐ "เป€เบžเบทเปˆเบญเบ™เบ‚เบญเบ‡เบฅเบฒเบง" เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบ—เบธเบเป†เบงเบดเบ™เบฒเบ—เบต.

เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ virtual เปƒเบ™ Linux: เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบžเบงเบเบกเบฑเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”? เบžเบฒเบเบ—เบต 2

vfsstat.py เปเบกเปˆเบ™เบชเบฐเบ„เบฃเบดเบš Python เบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ” C เบ—เบตเปˆเบ™เบฑเบšเบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เป€เบญเบตเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™ VFS.

เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบตเบซเบเบฑเบ‡เป€เบเบตเบ”เบ‚เบทเป‰เบ™เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเปƒเบชเปˆ USB flash drive เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเปเบฅเบฐเบฅเบฐเบšเบปเบšเบเบงเบ”เบžเบปเบšเบกเบฑเบ™.

เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ virtual เปƒเบ™ Linux: เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบžเบงเบเบกเบฑเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”? เบžเบฒเบเบ—เบต 2

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ eBPF เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™ /sysเป€เบกเบทเปˆเบญเปƒเบชเปˆ USB flash drive. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™เปเบกเปˆเบ™เบชเบฐเปเบ”เบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.

เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, bcc เป€เบ„เบทเปˆเบญเบ‡เบกเบท trace.py เบžเบดเบกเบ‚เปเป‰เบ„เบงเบฒเบกเป€เบกเบทเปˆเบญเบ„เบณเบชเบฑเปˆเบ‡เบ–เบทเบเปเบฅเปˆเบ™ sysfs_create_files(). เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบงเปˆเบฒ sysfs_create_files() เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเป‚เบ”เบเปƒเบŠเป‰ kworker stream เป€เบžเบทเปˆเบญเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒ flash drive เป„เบ”เป‰เบ–เบทเบเปƒเบชเปˆ, เปเบ•เปˆเบงเปˆเบฒเป„เบŸเบฅเปŒเปƒเบ”เบ—เบตเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™? เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเบชเบญเบ‡เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบ‚เบญเบ‡ eBPF. เบ—เบตเปˆเบ™เบตเป‰ trace.py เบžเบดเบก kernel backtrace (-K เบ—เบฒเบ‡เป€เบฅเบทเบญเบ) เปเบฅเบฐเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™ sysfs_create_files(). เบเบฒเบ™เปƒเบชเปˆเบ„เบณเบ–เบฐเปเบซเบผเบ‡เบ”เบฝเบงเปเบกเปˆเบ™เบฅเบฐเบซเบฑเบ” C เบ—เบตเปˆเบ›เบฐเบเบญเบšเบกเบตเบชเบฐเบ•เบฃเบดเบ‡เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบฎเบฑเบšเบฎเบนเป‰เป„เบ”เป‰เบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบฐเปœเบญเบ‡เปƒเบซเป‰เป‚เบ”เบเบชเบฐเบ„เบฃเบดเบš Python เบ—เบตเปˆเปเบฅเปˆเบ™ LLVM compiler เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹. เบกเบฑเบ™เบฅเบงเบšเบฅเบงเบกเป€เบชเบฑเป‰เบ™เบ™เบตเป‰เปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡ virtual เบžเบฒเบเปƒเบ™ kernel. เบฅเบฒเบเป€เบŠเบฑเบ™เบŸเบฑเบ‡เบŠเบฑเบ™เป€เบ•เบฑเบก sysfs_create_files () เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ„เบทเบ™เปƒเบซเบกเปˆเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเบชเบญเบ‡เป€เบžเบทเปˆเบญเปƒเบซเป‰เบชเบฐเบ•เบฃเบดเบ‡เบฎเบนเบšเปเบšเบšเบชเบฒเบกเบฒเบ”เบญเป‰เบฒเบ‡เบญเบตเบ‡เปƒเบชเปˆเบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต. เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” C เบ™เบตเป‰เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบฎเบฑเบšเบฎเบนเป‰เป„เบ”เป‰เบˆเบฒเบ C compiler. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต -l เบ–เบทเบเบฅเบฐเป€เบงเบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™ "เบฅเบปเป‰เบกเป€เบซเบฅเบงเปƒเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบ„เบงเบฒเบก BPF." เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบš C เปเบฅเบฐ Python เบˆเบฐเบŠเบญเบเบซเบฒเป€เบ„เบทเปˆเบญเบ‡เบกเบท bcc เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบ‚เบฐเบซเบเบฒเบเปเบฅเบฐเบ›เปˆเบฝเบ™เปเบ›เบ‡.

เป€เบกเบทเปˆเบญเป„เบ” USB เบ–เบทเบเปƒเบชเปˆ, kernel backtrace เบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒ PID 7711 เป€เบ›เบฑเบ™ thread. kworkerเบ—เบตเปˆเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ ยซeventsยป ะฒ sysfs. เบ•เบฒเบกโ€‹เบ™เบฑเป‰เบ™โ€‹เปเบฅเป‰เบง, เบ„เบณโ€‹เบฎเบฝเบเบฎเป‰เบญเบ‡โ€‹เบˆเบฒเบ sysfs_remove_files() เบˆเบฐโ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เบเบฒเบ™โ€‹เบฅเบปเบš drive เป„เบ”เป‰โ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบฅเบปเบšโ€‹ events, เป€เบŠเบดเปˆเบ‡เบเบปเบ‡เบเบฑเบšเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เบเบฒเบ™เบ™เบฑเบšเบญเป‰เบฒเบ‡เบญเบตเบ‡. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบเบฒเบ™เป€เบšเบดเปˆเบ‡ sysfs_create_link () เบเบฑเบš eBPF เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเปƒเบชเปˆเป„เบ” USB เบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบ 48 เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเบฑเบ™เบเบฒเบฅเบฑเบเป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเบธเบ”เบ‚เบญเบ‡เป„เบŸเบฅเปŒเป€เบซเบ”เบเบฒเบ™เปเบกเปˆเบ™เบซเบเบฑเบ‡? เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ cscope เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒ __device_add_disk(), เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ” disk_add_events (), เปเบฅเบฐเบšเปเปˆเบงเปˆเบฒเบˆเบฐ "media_change", เบซเบผเบท "eject_request" เบชเบฒเบกเบฒเบ”เบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™เป„เบŸเบฅเปŒเป€เบซเบ”เบเบฒเบ™. เบ—เบตเปˆเบ™เบตเป‰ kernel block layer เปเบˆเป‰เบ‡เปƒเบซเป‰ userspace เบงเปˆเบฒ "disk" เป„เบ”เป‰เบ›เบฒเบเบปเบ”เปเบฅเบฐ ejected. เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เบ„เบปเป‰เบ™เบ„เป‰เบงเบฒเบ™เบตเป‰เปเบกเปˆเบ™เปƒเบซเป‰เบ‚เปเป‰เบกเบนเบ™เปเบ™เบงเปƒเบ”เป‚เบ”เบเบเบฒเบ™เปƒเบชเปˆเป„เบ” USB, เป€เบกเบทเปˆเบญเบ—เบฝเบšเบเบฑเบšเบเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเบ„เบปเป‰เบ™เบซเบฒเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เบ”เบฝเบงเบˆเบฒเบเปเบซเบผเปˆเบ‡.

เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบฎเบฒเบเปเบšเบšเบญเปˆเบฒเบ™เบขเปˆเบฒเบ‡เบ”เบฝเบงเป€เบ›เบตเบ”เปƒเบŠเป‰เบญเบธเบ›เบฐเบเบญเบ™เบ—เบตเปˆเบเบฑเบ‡เป„เบงเป‰

เปเบ™เปˆเบ™เบญเบ™, เบšเปเปˆเบกเบตเปƒเบœเบ›เบดเบ”เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบผเบทเบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเป‚เบ”เบเบเบฒเบ™เบ”เบถเบ‡เบชเบฝเบšเบˆเบฒเบเป€เบ•เบปเป‰เบฒเบฎเบฑเบš. เปเบ•เปˆเป€เบ›เบฑเบ™เบซเบเบฑเบ‡? เบ™เบตเป‰เปเบกเปˆเบ™เบเป‰เบญเบ™เบงเปˆเบฒเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเบญเบฒเบ”เบˆเบฐเบŠเบฑเบเบŠเป‰เบฒเบเบฒเบ™เบ‚เบฝเบ™, เปเบฅเบฐเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ–เบทเบ synchronized เบเบฑเบš writes เบเบฑเบšเบšเปˆเบญเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ. เป€เบกเบทเปˆเบญเบชเบดเปˆเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบเบตเบ”เบ‚เบถเป‰เบ™, เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ•เป‰เบญเบ‡เบฅเปเบ–เป‰เบฒเบˆเบปเบ™เบเปˆเบงเบฒเบเบฒเบ™เบšเบนเบ”เบ„เบฑเป‰เบ‡เบ•เปเปˆเป„เบ›เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เบ™เปเบฒเปƒเบŠเป‰เบ›เบฐเป‚เบซเบเบ”. fsck filesystem-recovery เปเบฅเบฐ, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบฎเป‰เบฒเบเปเบฎเบ‡เบ—เบตเปˆเบชเบธเบ”, เบเบฒเบ™เบชเบนเบ™เป€เบชเบเบ‚เปเป‰เบกเบนเบ™.

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบžเบงเบเป€เบฎเบปเบฒเบ—เบธเบเบ„เบปเบ™เบฎเบนเป‰เบงเปˆเบฒเบญเบธเบ›เบฐเบเบญเบ™ IoT เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบ, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš routers, เป€เบ„เบทเปˆเบญเบ‡เบ„เบงเบšเบ„เบธเบกเบญเบธเบ™เบซเบฐเบžเบนเบกเปเบฅเบฐเบฅเบปเบ”, เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ Linux. เบซเบผเบฒเบเป†เบญเบธเบ›เบฐเบเบญเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบกเบตเบชเปˆเบงเบ™เบ•เบดเบ”เบ•เปเปˆเบœเบนเป‰เปƒเบŠเป‰เบžเบฝเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบเบซเบฒเบšเปเปˆเบกเบต, เปเบฅเบฐเบšเปเปˆเบกเบตเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเบ›เบดเบ”เบžเบงเบเบกเบฑเบ™ "เบชเบฐเบญเบฒเบ”." เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบฅเบปเบ”เบ—เบตเปˆเบกเบตเบซเบกเปเป‰เป„เบŸเบ—เบตเปˆเบ•เบฒเบเปเบฅเป‰เบงเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เบเบฑเบšเบซเบ™เปˆเบงเบเบ„เบงเบšเบ„เบธเบกเปเบกเปˆเบ™ Linux เป‚เบ”เบ”เบ‚เบถเป‰เบ™เปเบฅเบฐเบฅเบปเบ‡เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡. เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เปเบ™เบงโ€‹เปƒเบ”โ€‹เบ—เบตเปˆโ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เป€เบเบตเบšโ€‹เป‚เบ”เบโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบเบฒเบงโ€‹ fsckเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเป€เบฅเบตเปˆเบกเปเบฅเปˆเบ™เป€เบกเบทเปˆเบญเปƒเบ”? เปเบฅเบฐเบ„เปเบฒเบ•เบญเบšเปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ. เบญเบธเบ›เบฐเบเบญเบ™เบเบฑเบ‡เปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบฎเบฒเบ เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบญเปˆเบฒเบ™โ€‹ (เบซเบเปเป‰ ro-rootfs (เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบฎเบฒเบเบญเปˆเบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™)).

ro-rootfs เบชเบฐเป€เปœเบตเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบเบงเปˆเบฒเบ„เบงเบฒเบกเปเบ—เป‰เบˆเบดเบ‡. เบ›เบฐเป‚เบซเบเบ”เบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ malware เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป„เบ›เบซเบฒ /usr เบซเบผเบท /lib, เบ–เป‰เบฒเบšเปเปˆเบกเบตเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ Linux เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เบญเบตเบเบ›เบฐเบเบฒเบ™เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเปเบกเปˆเบ™เบชเปเบฒเบ„เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™เบซเปˆเบฒเบ‡เป„เบเบชเบญเบเบซเบผเบตเบ, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆเบฅเบฐเบšเบปเบšเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ—เบตเปˆเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบฅเบฐเบšเบปเบšเบžเบฒเบเบชเบฐเบซเบ™เบฒเบก. เบšเบฒเบ‡เบ—เบตเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ” (เปเบ•เปˆเบเบฑเบ‡ insidious เบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”) เปเบกเปˆเบ™เบงเปˆเบฒ ro-rootfs เบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบงเบฑเบ”เบ–เบธเบฅเบฐเบšเบปเบšเปƒเบ”เบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบญเบญเบเปเบšเบšเบ‚เบญเบ‡เบฅเบฐเบšเบปเบš. เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš ro-rootfs เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‡เบธเปˆเบกเบ‡เปˆเบฒเบกเปเบฅเบฐเป€เบˆเบฑเบšเบ›เบงเบ”, เบเป‰เบญเบ™เบงเปˆเบฒเบ•เบปเบงเปเบ› const เบกเบฑเบเบˆเบฐเบขเบนเปˆเปƒเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก, เปเบ•เปˆเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

เบเบฒเบ™เบชเป‰เบฒเบ‡ rootfs Read-only เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบžเบดเป€เบชเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบตเปˆเบเบฑเบ‡เป„เบงเป‰, เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆ VFS เป€เบ‚เบปเป‰เบฒเบกเบฒเปƒเบ™เบฎเบนเบš. Linux เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เป„เบŸเบฅเปŒเบขเบนเปˆเปƒเบ™ /var เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป„เบ”เป‰, เปเบฅเบฐเบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเบ™เบดเบเบปเบกเบซเบผเบฒเบเบ—เบตเปˆเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบเบฑเบ‡เบ•เบปเบงเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเบชเป‰เบฒเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ dot-files ะฒ $HOME. เบเบฒเบ™เปเบเป‰เป„เบ‚เบซเบ™เบถเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเป€เบฎเบทเบญเบ™เปเบกเปˆเบ™เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบเบฒเบ™เบชเป‰เบฒเบ‡เบเปˆเบญเบ™เปเบฅเบฐเบชเป‰เบฒเบ‡เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ rootfs. เบชเบณ เบฅเบฑเบš /var เบงเบดเบ—เบตเบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปเบกเปˆเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป„เบ”เป‰เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ / เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบšเบšเบญเปˆเบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบญเบทเปˆเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ—เบตเปˆเบ™เบดเบเบปเบกเปเบกเปˆเบ™เบเบฒเบ™เปƒเบŠเป‰ bind เบซเบผเบท overlay mounts.

mounts เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบฅเบฐ stackable, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป‚เบ”เบเบšเบฑเบ™เบˆเบธ

เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹ man mount เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเบฎเบฝเบ™เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบš mounts bindable เปเบฅเบฐ overlayable, เป€เบŠเบดเปˆเบ‡เปƒเบซเป‰เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเปเบฅเบฐเบœเบนเป‰เบšเปเบฅเบดเบซเบฒเบ™เบฅเบฐเบšเบปเบšเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเปƒเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบ›เบตเบ”เป€เบœเบตเบเบกเบฑเบ™เบเบฑเบšเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เปƒเบ™เบญเบตเบ. เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบšเบปเบšเบเบฑเบ‡, เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบŸเบฅเปŒเปƒเบ™ /var เบขเบนเปˆเปƒเบ™ flash drive เบ—เบตเปˆเบญเปˆเบฒเบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ”เบฝเบง, เปเบ•เปˆเป€เบ›เบฑเบ™ overlay เบซเบผเบท linkable mount path เบˆเบฒเบ tmpfs ะฒ /var เป€เบกเบทเปˆเบญเป‚เบซเบฅเบ”, เบกเบฑเบ™เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ‚เบฝเบ™เบšเบฑเบ™เบ—เบถเบเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™ (เบเบงเบฒเบ”เบฅเป‰เบฒ). เปƒเบ™เบ„เบฑเป‰เบ‡เบ•เปเปˆเป„เบ›เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบ›เบตเบ”เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ /var เบˆเบฐเบชเบนเบ™เป€เบชเบ. mount overlay เบชเป‰เบฒเบ‡เบชเบฐเบซเบฐเบžเบฒเบšเบฅเบฐเบซเบงเปˆเบฒเบ‡ tmpfs เปเบฅเบฐเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบ•เบดเบ”เบžเบฑเบ™เปเบฅเบฐเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ ostensible เบเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเปƒเบ™ ro-tootf เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ mountable bindable เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบญเบฑเบ™เปƒเบซเบกเปˆเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ tmpfs เป‚เบŸเบ™เป€เบ”เบตเบ—เบตเปˆเป€เบซเบฑเบ™เป„เบ”เป‰เป€เบ›เบฑเบ™เบฅเบฒเบเบฅเบฑเบเบญเบฑเบเบชเบญเบ™เปƒเบ™ ro-rootfs เบงเบดเบ—เบต. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ overlayfs เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบ–เบทเบโ€‹เบ•เป‰เบญเบ‡ (proper) เบ›เบฐเป€เบžเบ”เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ, mountable bindable เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™ VFS namespace.

เบญเบตเบ‡เบ•เบฒเบกเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ‚เบญเบ‡ overlay เปเบฅเบฐ mount เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ, เบšเปเปˆเบกเบตเปƒเบœเปเบ›เบเปƒเบˆเบงเปˆเบฒ เบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธ Linux เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบซเป‰เบฒเบงเบซเบฑเบ™. เปƒเบซเป‰เป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™เป€เบกเบทเปˆเบญเป€เบฎเบปเบฒเปƒเบŠเป‰ systemd-n เบเบฒเบ™เบœเบฐเบฅเบดเบ” เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบšเบฑเบ™เบˆเบธเป‚เบ”เบเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบท mountsnoop เบˆเบฒเบ bcc.

เบ—เป‰เบฒเบ—เบฒเบ system-nspawn เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเปเบฅเปˆเบ™ mountsnoop.py.

เบกเบฒเป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™:

เป€เบ›เบตเบ”เบ•เบปเบง mountsnoop เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ container เปเบกเปˆเบ™ "booting" เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒ runtime เบ‚เบญเบ‡ container เปเบกเปˆเบ™เบชเบนเบ‡เบ‚เบทเป‰เบ™เบเบฑเบš mount เบ—เบตเปˆเบ–เบทเบเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ (เบžเบฝเบ‡เปเบ•เปˆเบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบเบฒเบงเปเบกเปˆเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™).

เบกเบฑเบ™เป€เบ›เบฑเบ™ systemd-nspawn เปƒเบซเป‰เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบฅเบทเบญเบเปƒเบ™ procfs ะธ sysfs host to container เป€เบ›เบฑเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเบกเบฑเบ™ rootfs... เบ™เบญเบเบˆเบฒเบ MS_BIND เบ—เบธเบ‡เบ—เบตเปˆเบ•เบฑเป‰เบ‡ mount binding, เบšเบฒเบ‡เบ—เบธเบ‡เบญเบทเปˆเบ™เป†เบเปˆเบฝเบงเบเบฑเบš mount เป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เบ„เบงเบฒเบกเบชเปเบฒเบžเบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฑเบš host เปเบฅเบฐ container namespaces. เบ•เบปเบงเบขเปˆเบฒเบ‡, mount เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเบฒเบกเบฒเบ”เบ‚เป‰เบฒเบกเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ› /proc ะธ /sys เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ–เบฑเบ‡, เบซเบผเบทเป€เบŠเบทเปˆเบญเบ‡เบžเบงเบเบกเบฑเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เป‚เบ—.

เบชเบฐเบซเบฅเบธเบš

เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบžเบฒเบเปƒเบ™เบ‚เบญเบ‡ Linux เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบงเบฝเบเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ kernel เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบกเบตเบฅเบฐเบซเบฑเบ”เบˆเปเบฒเบ™เบงเบ™เบซเบผเบงเบ‡เบซเบผเบฒเบ, เบ›เปˆเบญเบเปƒเบซเป‰เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบžเบทเป‰เบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰ Linux เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบšเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” C เป€เบŠเบฑเปˆเบ™: glibc. เบงเบดเบ—เบตเบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบ„เบทเบšเบซเบ™เป‰เบฒเปเบกเปˆเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบเปˆเบญเบ kernel, เป‚เบ”เบเป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบšเปเบฅเบฐเบชเปˆเบงเบ™เบซเบปเบงเบ‚เบญเบ‡เบžเบทเป‰เบ™เบ—เบตเปˆเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš kernel เบžเบฒเบเปƒเบ™เบ•เบปเป‰เบ™เบ•เป, เป€เบŠเบฑเปˆเบ™: เบ•เบฒเบ•เบฐเบฅเบฒเบ‡. file_operations. เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบชเบฐเบซเบ™เบญเบ‡เบซเบผเบฑเบเบเบฒเบ™ "เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เป„เบŸเบฅเปŒ", เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบกเบตเบ„เบงเบฒเบกเบชเบธเบเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปƒเบ™เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡. เป„เบŸเบฅเปŒเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš C kernel เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ” fs/ เบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ virtual, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบŠเบฑเป‰เบ™ wrapper เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡เปเบฅเบฐเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเบฅเบฐเบซเบงเปˆเบฒเบ‡เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบ™เบดเบเบปเบกเปเบฅเบฐเบญเบธเบ›เบฐเบเบญเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ. เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เปเบฅเบฐเบเบฒเบ™เบงเบฒเบ‡เบŠเป‰เบญเบ™เบเบฑเบ™เบœเปˆเบฒเบ™ namespaces Linux เปเบกเปˆเบ™ magic เบ‚เบญเบ‡ VFS เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบชเป‰เบฒเบ‡ containers เปเบšเบšเบญเปˆเบฒเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เปเบฅเบฐเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบฎเบฒเบ. เบชเบปเบกเบ—เบปเบšเบเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡, เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบซเบผเบฑเบ eBPF เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡เบกเบฑเบ™ bcc
เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบเบฒเบ™โ€‹เบชเปเบฒโ€‹เบซเบผเบงเบ”โ€‹เบซเบผเบฑเบโ€‹เบ‡เปˆเบฒเบโ€‹เบ‚เบถเป‰เบ™โ€‹เบโ€‹เปˆโ€‹เบงเบฒโ€‹เบ—เบตเปˆโ€‹เป€เบ„เบตเบโ€‹.

เป€เบžเบทเปˆเบญเบ™เป†, เบ‚เบฝเบ™, เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบเบฑเบšเบ—เปˆเบฒเบ™เบšเป? เบšเบฒเบ‡เบ—เบตเป€เบˆเบปเป‰เบฒเบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบซเบผเบทเบ‚เปเป‰เบชเบฑเบ‡เป€เบเบ”? เปเบฅเบฐเบœเบนเป‰เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบซเบผเบฑเบเบชเบนเบ” Linux Administrator เปเบกเปˆเบ™เป€เบŠเบตเบ™เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบก เบกเบทเป‰เป€เบ›เบตเบ”โ€‹เป€เบŠเบดเปˆเบ‡เบˆเบฐโ€‹เป„เบ‚โ€‹เบ‚เบถเป‰เบ™โ€‹เปƒเบ™โ€‹เบงเบฑเบ™โ€‹เบ—เบต 18 โ€‹เป€เบกเบชเบฒโ€‹เบ™เบตเป‰.

เบชเปˆเบงเบ™ เบ—เบณ เบญเบดเบ”.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™