په لینوکس کې د مجازی فایل سیسټمونه: دوی ولې اړتیا لري او دوی څنګه کار کوي؟ برخه 2

ټولو ته سلام، موږ تاسو سره د خپرونې دویمه برخه شریکوو "په لینوکس کې د مجازی فایل سیسټمونه: دوی ولې اړتیا لري او دوی څنګه کار کوي؟" تاسو کولی شئ لومړی برخه ولولئ دلته. راځئ چې تاسو ته یادونه وکړو چې د خپرونو دا لړۍ په کورس کې د نوي جریان له پیل سره همغږي ده "د لینکس مدیر"، کوم چې ډیر ژر پیل کیږي.

د eBPF او bcc وسیلو په کارولو سره د VFS څارلو څرنګوالی

د پوهیدو لپاره ترټولو اسانه لار چې کرنل څنګه په فایلونو کې کار کوي sysfs دا په عمل کې لیدل دي، او د ARM64 لیدلو لپاره ترټولو اسانه لار د eBPF کارول دي. eBPF (د برکلي پاکټ فلټر لپاره لنډ) د یو مجازی ماشین څخه جوړ دی اصلي، کوم امتیاز لرونکي کاروونکي کولی شي غوښتنه وکړي (query) د کمانډ لاین څخه. د کرنل سرچینې لوستونکي ته وایي چې کرنل څه کولی شي؛ په بار شوي سیسټم کې د eBPF وسیلو چلول ښیې چې کرنل واقعیا څه کوي.

په لینوکس کې د مجازی فایل سیسټمونه: دوی ولې اړتیا لري او دوی څنګه کار کوي؟ برخه 2

خوشبختانه ، د eBPF کارولو پیل کول د وسیلو په مرسته خورا اسانه دي bcc، کوم چې د عمومي توزیع څخه د کڅوړو په توګه شتون لري لینوکس او په تفصیل سره مستند شوی برنارډ ګریګ. وسیلې bcc د Python سکریپټونه د C کوډ کوچني داخلولو سره دي، پدې معنی چې هرڅوک چې د دواړو ژبو سره بلد وي کولی شي په اسانۍ سره ترمیم کړي. IN bcc/tools د Python 80 سکریپټونه شتون لري، پدې معنی چې ډیری احتمال د پراختیا کونکي یا سیسټم مدیر به وکوالی شي د ستونزې حل کولو لپاره مناسب یو څه غوره کړي.
لږترلږه یو سطحي نظر ترلاسه کولو لپاره چې 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 متن تالیف کولو کې پاتې راغلی." هغه پراختیا کونکي چې د C او Python سره اشنا دي به وسیلې ومومي bcc د پراخولو او بدلولو لپاره اسانه.

کله چې USB ډرایو داخل شي، د کرنل بیکټریس به وښيي چې PID 7711 یو تار دی kworkerکوم چې فایل جوړ کړ «events» в sysfs. له همدې امله، د زنګ sysfs_remove_files() دا به وښيي چې د ډرایو لرې کول د فایل د حذف کیدو لامل شوي events، کوم چې د حوالې شمیرنې عمومي مفهوم سره مطابقت لري. په ورته وخت کې، لیدل sysfs_create_link () د eBPF سره د USB ډرایو داخلولو پرمهال به وښیې چې لږترلږه 48 سمبولیک لینکونه رامینځته شوي.

نو د پیښو فایل څه شی دی؟ کارول cscope د لټون لپاره __وسیلې_اضافه_ډیسک()، ښیي چې دا څه لامل کیږي 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 د تړلو وړ او د پورته کولو وړ ماونټونو په اړه د زده کړې غوره لاره ده، کوم چې پراختیا کونکو او د سیسټم مدیرانو ته دا وړتیا ورکوي چې په یوه لاره کې د فایل سیسټم رامینځته کړي او بیا یې په بل کې غوښتنلیکونو ته افشا کړي. د ایمبیډ شوي سیسټمونو لپاره ، دا پدې معنی ده چې د فایلونو ذخیره کولو وړتیا /var یوازې د لوستلو فلش ډرایو کې، مګر د پوښښ یا د نښلولو وړ ماونټ لاره له دې څخه tmpfs в /var کله چې بار کول، دا به غوښتنلیکونو ته اجازه ورکړي چې هلته نوټونه ولیکي (سکرول). بل ځل چې تاسو په کې بدلونونه فعال کړئ /var ورک به شي یو پوښښ ماونټ تر مینځ یو اتحاد رامینځته کوي tmpfs او د لاندې فایل سیسټم او تاسو ته اجازه درکوي په موجوده فایلونو کې د پام وړ بدلونونه رامینځته کړئ ro-tootf پداسې حال کې چې د تړلو وړ ماونټ کولی شي نوي خالي کړي tmpfs فولډرونه د لیکلو وړ په توګه لیدل کیږي ro-rootfs لارې په داسې حال کې overlayfs دا سمه ده (proper) د فایل سیسټم ډول، د پابند وړ ماونټ په کې پلي کیږي د VFS نوم ځای.

د پوښښ او لینک وړ ماونټ توضیحاتو پراساس ، هیڅ څوک حیران نه دی د لینکس کانتینرونه دوی په فعاله توګه کارول کیږي. راځئ وګورو چې څه پیښیږي کله چې موږ کاروو systemd-nspawn د وسیلې په کارولو سره کانټینر چلولو لپاره mountsnoop от bcc.

ننګونې system-nspawn کانټینر د چلولو پرمهال پیل کوي mountsnoop.py.

راځئ وګورو چې څه پیښ شوي:

په لاره اچول mountsnoop پداسې حال کې چې کانټینر "بوټینګ" ښیي چې د کانټینر چلولو وخت خورا د ماونټ سره تړلی پورې اړه لري (یوازې د اوږد محصول پیل ښودل شوی).

دا systemd-nspawn غوره شوي فایلونه وړاندې کوي procfs и sysfs کانټینر ته د لارې په توګه کوربه کړئ rootfs. پرته MS_BIND بیرغ چې د پابندۍ ماونټ تنظیموي، په ماونټ کې ځینې نور بیرغونه د کوربه او کانټینر نوم ځایونو کې د بدلونونو ترمینځ اړیکه ټاکي. د مثال په توګه، یو تړلی ماونټ کولی شي بدلونونه پریږدي /proc и /sys په کانټینر کې، یا یې د زنګ پر بنسټ پټ کړئ.

پایلې

د لینکس د داخلي کارونو پوهیدل ممکن د یو ناممکن کار په څیر بریښي ، ځکه چې کرنل پخپله د کوډ لوی مقدار لري ، د لینکس کارونکي ځای غوښتنلیکونه او په C کتابتونونو کې د سیسټم کال انٹرفیسونه پریږدي لکه glibc. د پرمختګ لپاره یوه لاره دا ده چې د یو کرنل سب سیسټم د سرچینې کوډ ولولئ، د سیسټم کالونو او د کارونکي ځای سرلیکونو په پوهیدو ټینګار سره، او همدارنګه د اصلي داخلي کرنل انٹرفیس، لکه میز file_operations. د فایل عملیات د "هر څه فایل دی" اصول وړاندې کوي، چې دوی په ځانګړې توګه اداره کولو کې خوندور کوي. د C کرنل سرچینې فایلونه د لوړې کچې لارښود کې fs/ د مجازی فایل سیسټمونو پلي کول وړاندې کوي، کوم چې د ریپر پرت دی چې د مشهور فایل سیسټمونو او ذخیره کولو وسیلو ترمنځ پراخه او نسبتا ساده مطابقت چمتو کوي. د لینکس نوم ځایونو له لارې لینک کول او پوښل کول د VFS جادو دی چې یوازې د لوستلو کانټینرونو او روټ فایل سیسټمونو رامینځته کول ممکن کوي. د سرچینې کوډ ازموینې سره یوځای، د eBPF اصلي وسیله او د هغې انٹرفیس bcc
اصلي سپړنه د هرکله څخه اسانه کول.

ملګرو، ولیکئ، آیا دا لیکنه ستاسو لپاره ګټوره وه؟ شاید تاسو کوم نظر یا تبصره لرئ؟ او هغه څوک چې د لینکس مدیر کورس سره علاقه لري بلنه ورکول کیږي د خلاصون ورځ، کوم چې به د اپریل په 18 ترسره شي.

لومړۍ برخه.

سرچینه: www.habr.com

Add a comment