Linux์˜ ๊ฐ€์ƒ ํŒŒ์ผ ์‹œ์Šคํ…œ: ์™œ ํ•„์š”ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? 2 ๋ถ€

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, "Linux์˜ ๊ฐ€์ƒ ํŒŒ์ผ ์‹œ์Šคํ…œ: ์™œ ํ•„์š”ํ•˜๋ฉฐ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?" ์ถœํŒ๋ฌผ์˜ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์—ฌ๊ธฐ์—. ์ด ์ผ๋ จ์˜ ๊ฐ„ํ–‰๋ฌผ์€ ํ•ด๋‹น ๊ณผ์ •์˜ ์ƒˆ๋กœ์šด ์ŠคํŠธ๋ฆผ ์ถœ์‹œ์™€ ์ผ์น˜ํ•˜๋„๋ก ๋งž์ถฐ์ ธ ์žˆ์Œ์„ ์ƒ๊ธฐ์‹œ์ผœ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. "๋ฆฌ๋ˆ…์Šค ๊ด€๋ฆฌ์ž", ๊ณง ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

eBPF ๋ฐ bcc ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ VFS๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•

์ปค๋„์ด ํŒŒ์ผ์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ• sysfs ์‹ค์ œ๋กœ ๋ณด๋Š” ๊ฒƒ์ธ๋ฐ, ARM64๋ฅผ ์‹œ์ฒญํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ eBPF๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. eBPF(Berkeley Packet Filter์˜ ์•ฝ์–ด)๋Š” ๋‹ค์Œ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ, ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ(query) ๋ช…๋ น์ค„์—์„œ. ์ปค๋„ ์†Œ์Šค๋Š” ๋…์ž์—๊ฒŒ ์ปค๋„์ด ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ๋กœ๋“œ๋œ ์‹œ์Šคํ…œ์—์„œ eBPF ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ปค๋„์ด ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Linux์˜ ๊ฐ€์ƒ ํŒŒ์ผ ์‹œ์Šคํ…œ: ์™œ ํ•„์š”ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? 2 ๋ถ€

๋‹คํ–‰ํžˆ eBPF ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ๋„๊ตฌ์˜ ๋„์›€์œผ๋กœ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ˆจ์€ ์ฐธ์กฐ, ์ผ๋ฐ˜ ๋ฐฐํฌํŒ์—์„œ ํŒจํ‚ค์ง€๋กœ ์ œ๊ณต๋จ Linux ๊ทธ๋ฆฌ๊ณ  ์ž์„ธํ•˜๊ฒŒ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์–ด์š” ๋ฒ„๋‚˜๋“œ ๊ทธ๋ ˆ๊ทธ. ๋„๊ตฌ bcc C ์ฝ”๋“œ๊ฐ€ ์•ฝ๊ฐ„ ์‚ฝ์ž…๋œ Python ์Šคํฌ๋ฆฝํŠธ์ด๋ฏ€๋กœ ๋‘ ์–ธ์–ด์— ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ˆ์— bcc/tools 80๊ฐœ์˜ Python ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๋Š” ๊ฐœ๋ฐœ์ž๋‚˜ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๊ฐ€ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ์ ํ•ฉํ•œ ๊ฒƒ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
์‹คํ–‰ ์ค‘์ธ ์‹œ์Šคํ…œ์—์„œ VFS๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ์ตœ์†Œํ•œ์˜ ํ”ผ์ƒ์ ์ธ ์•„์ด๋””์–ด๋ฅผ ์–ป์œผ๋ ค๋ฉด ๋‹ค์Œ์„ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค. vfscount ๋˜๋Š” vfsstat. ์˜ˆ๋ฅผ ๋“ค์–ด ์ˆ˜์‹ญ ๊ฑด์˜ ํ˜ธ์ถœ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. vfs_open() ๊ทธ๋ฆฌ๊ณ  "๊ทธ์˜ ์นœ๊ตฌ๋“ค"์€ ๋ง ๊ทธ๋Œ€๋กœ ๋งค์ดˆ๋งˆ๋‹ค ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

Linux์˜ ๊ฐ€์ƒ ํŒŒ์ผ ์‹œ์Šคํ…œ: ์™œ ํ•„์š”ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? 2 ๋ถ€

vfsstat.py ๋‹จ์ˆœํžˆ VFS ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๊ณ„์‚ฐํ•˜๋Š” C ์ฝ”๋“œ ์‚ฝ์ž…์ด ํฌํ•จ๋œ Python ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.

์ข€ ๋” ๊ฐ„๋‹จํ•œ ์˜ˆ๋ฅผ ๋“ค์–ด USB ํ”Œ๋ž˜์‹œ ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์ปดํ“จํ„ฐ์— ์‚ฝ์ž…ํ•˜๊ณ  ์‹œ์Šคํ…œ์ด ์ด๋ฅผ ๊ฐ์ง€ํ•˜๋ฉด ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Linux์˜ ๊ฐ€์ƒ ํŒŒ์ผ ์‹œ์Šคํ…œ: ์™œ ํ•„์š”ํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? 2 ๋ถ€

eBPF๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. /sysUSB ํ”Œ๋ž˜์‹œ ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์‚ฝ์ž…ํ•œ ๊ฒฝ์šฐ. ์—ฌ๊ธฐ์—๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ๋ณต์žกํ•œ ์˜ˆ๊ฐ€ ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์— ํ‘œ์‹œ๋œ ์˜ˆ์—์„œ, bcc ะธะฝัั‚ั€ัƒะผะตะฝั‚ ์ถ”์ .py ๋ช…๋ น์ด ์‹คํ–‰๋  ๋•Œ ๋ฉ”์‹œ์ง€๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. sysfs_create_files(). ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๋ณธ๋‹ค sysfs_create_files() ์‚ฌ์šฉํ•˜์—ฌ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. kworker ํ”Œ๋ž˜์‹œ ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์‚ฝ์ž…ํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ–ˆ๋Š”๋ฐ ์–ด๋–ค ํŒŒ์ผ์ด ์ƒ์„ฑ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ๋‘ ๋ฒˆ์งธ ์˜ˆ๋Š” eBPF์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์—ฌ๊ธฐ trace.py ์ปค๋„ ์—ญ์ถ”์ (-K ์˜ต์…˜)๊ณผ ์ƒ์„ฑ๋œ ํŒŒ์ผ ์ด๋ฆ„์„ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. sysfs_create_files(). ๋‹จ์ผ ๋ช…๋ น๋ฌธ ์‚ฝ์ž…์€ LLVM์„ ์‹คํ–‰ํ•˜๋Š” Python ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ์‰ฝ๊ฒŒ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•์‹ ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๋Š” C ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ ์‹œ ์ปดํŒŒ์ผ๋Ÿฌ. ์ด ์ค„์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์ปค๋„ ๋‚ด๋ถ€์˜ ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๊ธฐ๋Šฅ ์„œ๋ช… sysfs_create_files () ํ˜•์‹ ๋ฌธ์ž์—ด์ด ๋งค๊ฐœ๋ณ€์ˆ˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‘ ๋ฒˆ์งธ ๋ช…๋ น์—์„œ ์žฌํ˜„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด C ์ฝ”๋“œ ์กฐ๊ฐ์˜ ์˜ค๋ฅ˜๋กœ ์ธํ•ด C ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ธ์‹ ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด -l ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ƒ๋žตํ•˜๋ฉด "BPF ํ…์ŠคํŠธ ์ปดํŒŒ์ผ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. C ๋ฐ Python์— ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž๋Š” ๋„๊ตฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. bcc ํ™•์žฅ ๋ฐ ๋ณ€๊ฒฝ์ด ์‰ฝ์Šต๋‹ˆ๋‹ค.

USB ๋“œ๋ผ์ด๋ธŒ๊ฐ€ ์‚ฝ์ž…๋˜๋ฉด ์ปค๋„ ์—ญ์ถ”์ ์— PID 7711์ด ์Šค๋ ˆ๋“œ์ธ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. kworkerํŒŒ์ผ์„ ๋งŒ๋“  ์‚ฌ๋žŒ ยซeventsยป ะฒ sysfs. ์ด์— ๋”ฐ๋ผ, sysfs_remove_files() ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ํŒŒ์ผ์ด ์‚ญ์ œ๋œ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. events, ์ด๋Š” ์ฐธ์กฐ ์นด์šดํŒ…์˜ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์— ์‹œ์ฒญ ์ค‘ sysfs_create_link () USB ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๋™์•ˆ eBPF๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์†Œ 48๊ฐœ์˜ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฒคํŠธ ํŒŒ์ผ์˜ ์š”์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์šฉ๋ฒ• ์Šค์ฝ”ํ”„ ๊ฒ€์ƒ‰์šฉ __device_add_disk(), ์›์ธ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. disk_add_events (), ๊ทธ๋ฆฌ๊ณ  "media_change"๋˜๋Š” "eject_request" ์ด๋ฒคํŠธ ํŒŒ์ผ์— ๊ธฐ๋ก๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ปค๋„ ๋ธ”๋ก ๊ณ„์ธต์€ "๋””์Šคํฌ"๊ฐ€ ๋‚˜ํƒ€๋‚ฌ๋‹ค๊ฐ€ ๊บผ์กŒ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์— ์•Œ๋ฆฝ๋‹ˆ๋‹ค. USB ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ์ด ์—ฐ๊ตฌ ๋ฐฉ๋ฒ•์ด ์†Œ์Šค์—์„œ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์•Œ์•„๋‚ด๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ ์–ผ๋งˆ๋‚˜ ์œ ์ตํ•œ์ง€ ํ™•์ธํ•˜์„ธ์š”.

์ฝ๊ธฐ ์ „์šฉ ๋ฃจํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜ ํ™œ์„ฑํ™”

๋ฌผ๋ก  ์†Œ์ผ“์—์„œ ํ”Œ๋Ÿฌ๊ทธ๋ฅผ ๋ฝ‘์•„ ์„œ๋ฒ„๋‚˜ ์ปดํ“จํ„ฐ๋ฅผ ๋„๋Š” ์‚ฌ๋žŒ์€ ์•„๋ฌด๋„ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์™œ? ์ด๋Š” ๋ฌผ๋ฆฌ์  ์ €์žฅ ์žฅ์น˜์— ๋งˆ์šดํŠธ๋œ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์“ฐ๊ธฐ ์ง€์—ฐ์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ณ  ํ•ด๋‹น ์ƒํƒœ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ์™€ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด ์‹œ์Šคํ…œ ์†Œ์œ ์ž๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๋ถ€ํŒ…๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. fsck filesystem-recovery ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๋ผ์šฐํ„ฐ, ์˜จ๋„ ์กฐ์ ˆ๊ธฐ, ์ž๋™์ฐจ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋งŽ์€ IoT ์žฅ์น˜๊ฐ€ ์ด์ œ Linux๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์žฅ์น˜ ์ค‘ ๋‹ค์ˆ˜์—๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ฑฐ์˜ ๋˜๋Š” ์ „ํ˜€ ์—†์œผ๋ฉฐ "์™„์ „ํžˆ" ๋Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ์ œ์–ด ์žฅ์น˜์˜ ์ „์›์ด ๊บผ์กŒ์„ ๋•Œ ๋ฐฐํ„ฐ๋ฆฌ๊ฐ€ ๋ฐฉ์ „๋œ ์ž๋™์ฐจ์˜ ์‹œ๋™์„ ๊ฑธ์—ˆ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. Linux ๋Š์ž„์—†์ด ์œ„์•„๋ž˜๋กœ ์ ํ”„ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€ ์•Š๊ณ  ๋ถ€ํŒ…๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? fsck๋งˆ์นจ๋‚ด ์—”์ง„์€ ์–ธ์ œ ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๊นŒ? ๋Œ€๋‹ต์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜๋Š” ๋ฃจํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ ์ „์šฉ (์•ฝ์–ด ro-rootfs (์ฝ๊ธฐ ์ „์šฉ ๋ฃจํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ)).

ro-rootfs ์ง„์ •์„ฑ๋ณด๋‹ค ๋œ ๋ถ„๋ช…ํ•œ ๋งŽ์€ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ์žฅ์ ์€ ์•…์„ฑ์ฝ”๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ์— ์“ธ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. /usr ๋˜๋Š” /lib, Linux ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฑฐ๊ธฐ์— ์“ธ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ. ๋˜ ๋‹ค๋ฅธ ์ ์€ ์ง€์› ์ธ๋ ฅ์ด ๋ช…๋ชฉ์ƒ ํ˜„์žฅ ์‹œ์Šคํ…œ๊ณผ ๋™์ผํ•œ ๋กœ์ปฌ ์‹œ์Šคํ…œ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›๊ฒฉ ์žฅ์น˜์˜ ํ˜„์žฅ ์ง€์›์—๋Š” ๋Œ€์ฒด๋กœ ๋ถˆ๋ณ€์ ์ธ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ฐ€์žฅ ์ค‘์š”ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ๊ตํ™œํ•œ ์ด์ ์€ ro-rootfs๊ฐ€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ์–ด๋–ค ์‹œ์Šคํ…œ ๊ฐœ์ฒด๊ฐ€ ๋ถˆ๋ณ€์ธ์ง€ ๊ฒฐ์ •ํ•˜๋„๋ก ๊ฐ•์š”ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. const ๋ณ€์ˆ˜๋Š” ์ข…์ข… ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ro-rootfs๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์€ ์–ด์ƒ‰ํ•˜๊ณ  ๊ณ ํ†ต์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ ์ด์ ์€ ์ถ”๊ฐ€ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ •๋‹นํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ฐฝ์กฐ rootfs ์ฝ๊ธฐ ์ „์šฉ์€ ์ž„๋ฒ ๋””๋“œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ถ”๊ฐ€์ ์ธ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๋ฉฐ, ์—ฌ๊ธฐ์„œ VFS๊ฐ€ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. Linux์—์„œ๋Š” ํŒŒ์ผ์ด ๋‹ค์Œ ์œ„์น˜์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. /var ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ–ˆ์œผ๋ฉฐ ๋˜ํ•œ ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ์„ ์‹คํ–‰ํ•˜๋Š” ๋งŽ์€ ์ธ๊ธฐ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ตฌ์„ฑ์„ ์ƒ์„ฑํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. dot-files ะฒ $HOME. ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋Œ€ํ•œ ํ•œ ๊ฐ€์ง€ ์†”๋ฃจ์…˜์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜์—ฌ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. rootfs. ์— /var ํ•œ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋ณ„๋„์˜ ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ํŒŒํ‹ฐ์…˜์— ๋งˆ์šดํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. / ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งˆ์šดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์ธ๊ธฐ ์žˆ๋Š” ๋Œ€์•ˆ์€ ๋ฐ”์ธ๋“œ ๋˜๋Š” ์˜ค๋ฒ„๋ ˆ์ด ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•˜๊ณ  ์Œ“์„ ์ˆ˜ ์žˆ๋Š” ๋งˆ์šดํŠธ, ์ปจํ…Œ์ด๋„ˆ์—์„œ์˜ ์‚ฌ์šฉ

๋ช…๋ น ์‹คํ–‰ man mount ๊ฐœ๋ฐœ์ž์™€ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๊ฐ€ ํ•œ ๊ฒฝ๋กœ์—์„œ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์ƒ์„ฑํ•œ ๋‹ค์Œ ์ด๋ฅผ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐ”์ธ๋”ฉ ๋ฐ ์˜ค๋ฒ„๋ ˆ์ด ๊ฐ€๋Šฅํ•œ ๋งˆ์šดํŠธ์— ๋Œ€ํ•ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ์ด๋Š” ํŒŒ์ผ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. /var ์ฝ๊ธฐ ์ „์šฉ ํ”Œ๋ž˜์‹œ ๋“œ๋ผ์ด๋ธŒ์— ์žˆ์ง€๋งŒ ์˜ค๋ฒ„๋ ˆ์ด ๋˜๋Š” ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ๋งˆ์šดํŠธ ๊ฒฝ๋กœ๋Š” tmpfs ะฒ /var ๋กœ๋“œํ•  ๋•Œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฑฐ๊ธฐ์— ๋ฉ”๋ชจ๋ฅผ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์Šคํฌ๋กค). ๋‹ค์Œ์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์‚ฌ์šฉ ์„ค์ •ํ•  ๋•Œ /var ์žƒ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ์˜ค๋ฒ„๋ ˆ์ด ๋งˆ์šดํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐํ•ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. tmpfs ๋ฐ ๊ธฐ๋ณธ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ํŒŒ์ผ์„ ํ‘œ๋ฉด์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ro-tootf ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅํ•œ ๋งˆ์šดํŠธ๋Š” ์ƒˆ ๋งˆ์šดํŠธ๋ฅผ ๋น„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. tmpfs ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ํด๋” ํ‘œ์‹œ ro-rootfs ๋ฐฉ๋ฒ•. ํ•˜๋Š” ๋™์•ˆ overlayfs ์ด๊ฒŒ ๋งž๋‹ค(proper) ํŒŒ์ผ ์‹œ์Šคํ…œ ์œ ํ˜•, ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅํ•œ ๋งˆ์šดํŠธ๊ฐ€ ๊ตฌํ˜„๋จ VFS ๋„ค์ž„์ŠคํŽ˜์ด์Šค.

์˜ค๋ฒ„๋ ˆ์ด์™€ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ๋งˆ์šดํŠธ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋ณด๋ฉด ๋ˆ„๊ตฌ๋„ ๋†€๋ผ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Linux ์ปจํ…Œ์ด๋„ˆ ๊ทธ๋“ค์€ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๋ด…์‹œ๋‹ค ์‹œ์Šคํ…œ nspawn ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด 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 ๊ด€๋ฆฌ์ž ๊ณผ์ •์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋ถ„๋“ค์„ ์ดˆ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ์˜คํ”ˆ ๋ฐ์ด, 18์›” XNUMX์ผ์— ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€