Virtual fayl sistemləri LinuxNiyə onlar lazımdır və necə işləyirlər? Hissə 2

Hamıya salam, “Virtual fayl sistemləri” nəşrinin ikinci hissəsini sizinlə bölüşürük. LinuxNiyə onlar lazımdır və necə işləyirlər? Birinci hissəni oxuya bilərsiniz burada. Nəzərinizə çatdıraq ki, bu nəşrlər silsiləsi kursda yeni axının başlanması ilə eyni vaxta təsadüf edir "İdarəçi Linux», çox tezliklə başlayır.

eBPF və bcc alətlərindən istifadə edərək VFS-yə necə nəzarət etmək olar

Kernelin fayllar üzərində necə işlədiyini başa düşməyin ən asan yolu sysfs bunu praktikada görməkdir və ARM64-ə baxmaq üçün ən asan yol eBPF-dən istifadə etməkdir. eBPF (Berkeley Paket Filtrinin qısaltması) virtual maşından ibarətdir əsas, hansı imtiyazlı istifadəçilər tələb edə bilər (query) komanda xəttindən. Kernel mənbələri oxucuya nüvənin nə edə biləcəyini söyləyir; eBPF alətlərinin yüklənmiş sistemdə işlədilməsi nüvənin əslində nə etdiyini göstərir.

Virtual fayl sistemləri LinuxNiyə onlar lazımdır və necə işləyirlər? Hissə 2

Xoşbəxtlikdən, eBPF-dən istifadə etməyə başlamaq alətlərin köməyi ilə olduqca asandır Bcc, ümumi paylamadan paketlər şəklində mövcuddur Linux və ətraflı sənədləşdirilir Bernard Gregg. Alətlər bcc C kodunun kiçik əlavələri olan Python skriptləridir, yəni hər iki dillə tanış olan hər kəs onları asanlıqla dəyişdirə bilər. IN bcc/tools 80 Python skripti var, bu o deməkdir ki, çox güman ki, bir tərtibatçı və ya sistem administratoru problemin həlli üçün uyğun olanı seçə biləcək.
VFS-lərin işləyən sistemdə hansı işi gördüyü barədə ən azı səthi fikir əldə etmək üçün cəhd edin vfscount və ya vfsstat. Bu, tutaq ki, onlarla çağırış göstərəcək vfs_open() və "onun dostları" hər saniyə baş verir.

Virtual fayl sistemləri LinuxNiyə onlar lazımdır və necə işləyirlər? Hissə 2

vfsstat.py sadəcə VFS funksiya zənglərini sayan C kodu əlavələri olan Python skriptidir.

Gəlin daha mənasız bir misal verək və görək USB flash sürücüsünü kompüterə daxil etdikdə və sistem onu ​​aşkar etdikdə nə baş verir.

Virtual fayl sistemləri LinuxNiyə onlar lazımdır və necə işləyirlər? Hissə 2

eBPF-dən istifadə edərək nə baş verdiyini görə bilərsiniz /sysUSB flash sürücü daxil edildikdə. Burada sadə və mürəkkəb bir nümunə göstərilir.

Yuxarıda göstərilən nümunədə, bcc alət trace.py əmr icra edildikdə mesaj çap edir sysfs_create_files(). Biz bunu görürük sysfs_create_files() istifadə edərək istifadəyə verilmişdir kworker flash sürücünün daxil olmasına cavab olaraq axın, lakin hansı fayl yaradıldı? İkinci nümunə eBPF gücünü göstərir. Burada trace.py Kernel backtrace (-K seçimi) və yaradılmış faylın adını çap edir sysfs_create_files(). Tək bəyanatın daxil edilməsi LLVM ilə işləyən Python skripti tərəfindən təmin edilən asanlıqla tanınan format sətrini ehtiva edən C kodudur. tam vaxtında tərtibçi. Bu xətti tərtib edir və nüvənin içərisindəki virtual maşında icra edir. Tam funksiya imzası sysfs_create_files () ikinci komandada təkrarlanmalıdır ki, format sətri parametrlərdən birinə istinad edə bilsin. Bu C kodundakı səhvlər C tərtibçisindən tanınan səhvlərlə nəticələnir. Məsələn, -l parametri buraxılıbsa, siz "BPF mətnini tərtib etmək uğursuz oldu"nu görəcəksiniz. C və Python ilə tanış olan tərtibatçılar alətləri tapacaqlar bcc genişləndirmək və dəyişmək asandır.

USB sürücüsü daxil edildikdə, nüvənin geri izi PID 7711-in bir ip olduğunu göstərəcək. kworkerfaylı yaradan «events» в sysfs. Buna uyğun olaraq, zəng sysfs_remove_files() sürücünün çıxarılmasının faylın silinməsi ilə nəticələndiyini göstərəcək events, istinadların sayılmasının ümumi konsepsiyasına uyğundur. Eyni zamanda baxış sysfs_create_link () eBPF ilə USB sürücüsünü daxil edərkən ən azı 48 simvolik əlaqə yaradıldığını göstərəcək.

Beləliklə, hadisələr faylının mənası nədir? İstifadəsi cscope Axtarış üçün __device_add_disk(), nəyə səbəb olduğunu göstərir disk_add_events (), və ya "media_change"Və ya "eject_request" hadisə faylına yazıla bilər. Burada kernel blok təbəqəsi istifadəçi sahəsinə "disk"in göründüyü və çıxarıldığı barədə məlumat verir. İşlərin sırf mənbədən necə işlədiyini anlamaqla müqayisədə bu tədqiqat metodunun USB sürücüsünü daxil etməklə nə qədər informativ olduğuna diqqət yetirin.

Yalnız oxunan kök fayl sistemləri quraşdırılmış cihazları işə salır

Təbii ki, heç kim rozetkadan fişini çəkərək serveri və ya kompüterini söndürmür. Bəs niyə? Bunun səbəbi, fiziki saxlama cihazlarında quraşdırılmış fayl sistemlərində gecikmiş yazmalar ola bilər və onların vəziyyətini qeyd edən məlumat strukturları yaddaşa yazma ilə sinxronlaşdırılmaya bilər. Bu baş verdikdə, sistem sahibləri yardım proqramını işə salmaq üçün növbəti yükləməyə qədər gözləməli olurlar. fsck filesystem-recovery və ən pis halda məlumatların itirilməsi.

Bununla belə, hamımız bilirik ki, bir çox IoT cihazları, eləcə də marşrutlaşdırıcılar, termostatlar və avtomobillər artıq işləyir LinuxBu cihazların çoxunun demək olar ki, istifadəçi interfeysi yoxdur və onları təmiz şəkildə söndürməyin heç bir yolu yoxdur. Təsəvvür edin ki, idarəetmə cihazına enerji verilmədikdə, batareyası boş olan bir avtomobili işə salırsınız. Linux daim yuxarı və aşağı tullanmaq. Necə olur ki, sistem çox vaxt olmadan yüklənir fsckmühərrik nəhayət nə vaxt işə başlayır? Və cavab sadədir. Quraşdırılmış qurğular kök fayl sisteminə əsaslanır yalnız oxumaq üçün (qısaldılmış ro-rootfs (yalnız oxumaq üçün kök fayl sistemi)).

ro-rootfs orijinallıqdan daha az aşkar olan bir çox üstünlüklər təklif edir. Üstünlüklərdən biri zərərli proqramın yaza bilməməsidir /usr və ya /lib, əgər proses yoxdursa Linux ona yaza bilmirəm. Digəri isə, dəstək heyətinin yerindəki sistemlərlə nominal olaraq eyni olan lokal sistemlərdən istifadə etdiyi üçün, əsasən dəyişməz fayl sisteminin uzaq cihazların sahə dəstəyi üçün çox vacib olmasıdır. Bəlkə də ən vacib (lakin eyni zamanda ən məkrli) üstünlük, ro-rootfs-in tərtibatçıları sistem dizaynının erkən mərhələsində hansı sistem obyektlərinin dəyişməz olacağına qərar verməyə məcbur etməsidir. Proqramlaşdırma dillərindəki const dəyişənlərində tez-tez olduğu kimi, ro-rootfs ilə işləmək çətin və ağrılı ola bilər, lakin onun faydaları əlavə xərclərdən asanlıqla üstündür.

yaradıcılıq rootfs Yalnız oxumaq funksiyası inteqrasiya olunmuş tərtibatçılar üçün əlavə səy tələb edir və VFS məhz burada rol oynayır. Linux faylların daxil olmasını tələb edir /var yazıla bilən idi və əlavə olaraq, quraşdırılmış sistemləri işlədən bir çox məşhur proqramlar konfiqurasiya yaratmağa çalışacaq dot-files в $HOME. Ev kataloqunda konfiqurasiya faylları üçün bir həll adətən onları əvvəlcədən yaratmaq və qurmaqdır rootfs. Qədər /var Mümkün bir yanaşma onu ayrıca yazıla bilən bölməyə quraşdırmaqdır / quraşdırılmış yalnız oxumaq üçün. Başqa bir məşhur alternativ bağlama və ya üst-üstə düşmə montajlarından istifadə etməkdir.

Bağlana bilən və yığıla bilən qurğular, onların konteynerlərdə istifadəsi

Bir əmrin icrası man mount tərtibatçılara və sistem administratorlarına bir yolda fayl sistemi yaratmaq və sonra onu başqa bir yolda tətbiqlərə təqdim etmək imkanı verən bağlana bilən və üst-üstə düşə bilən qurğular haqqında məlumat əldə etməyin ən yaxşı yoludur. Daxili sistemlər üçün bu, faylları saxlamaq imkanı deməkdir /var yalnız oxunan bir flash sürücüdə, lakin üst-üstə düşmə və ya birləşdirilə bilən montaj yolu tmpfs в /var yükləyərkən, proqramlara orada qeydlər yazmağa imkan verəcəkdir (scrawl). Dəyişiklikləri növbəti dəfə yandırdığınız zaman /var itiriləcək. Bindirmə montajı arasında birlik yaradır tmpfs və əsas fayl sistemi və mövcud fayllarda görünən dəyişikliklər etməyə imkan verir ro-tootf halbuki bağlana bilən montaj yenilərini boş edə bilər tmpfs qovluqlar yazıla bilən kimi görünür ro-rootfs yollar. ikən overlayfs bu doğrudur (proper) fayl sistemi növü, bağlana bilən montaj həyata keçirilir VFS ad sahəsi.

Bindirmə və bağlana bilən montajın təsvirinə əsasən, heç kim buna təəccüblənmir Linux konteynerlər fəal şəkildə istifadə edirlər. İstifadə etdikdə nə baş verdiyini görək systemd-yaratma alətdən istifadə edərək konteyneri işə salmaq üçün mountsnoop etibarən bcc.

Çağırış system-nspawn işləyərkən konteyneri işə salır mountsnoop.py.

Nə baş verdiyinə baxaq:

Başlanğıc mountsnoop konteyner "yüklənərkən" konteynerin işləmə müddətinin bağlanan montajdan çox asılı olduğunu göstərir (Yalnız uzun çıxışın başlanğıcı göstərilir).

Burada systemd-nspawn seçilmiş faylları təqdim edir procfs и sysfs konteynerə aparan yollar kimi rootfs. İstisna olmaqla MS_BIND bağlayıcı montajı təyin edən bayraq, montajdakı bəzi digər bayraqlar host və konteyner ad boşluqlarına edilən dəyişikliklər arasında əlaqəni müəyyənləşdirir. Məsələn, əlaqəli montaj ya dəyişiklikləri atlaya bilər /proc и /sys konteynerə daxil edin və ya zəngdən asılı olaraq onları gizləyin.

Nəticə

Daxili quruluşu anlamaq Linux istifadəçi məkanı tətbiqlərini kənara qoyub, nüvənin özündə çoxlu sayda kod olduğundan, qeyri-mümkün bir iş kimi görünə bilər. Linux və C kitabxanalarında sistem çağırış interfeysləri, məsələn glibc. Tərəqqiyə nail olmağın yollarından biri sistem zəngləri və istifadəçi sahəsi başlıqlarını, həmçinin cədvəl kimi əsas daxili nüvə interfeyslərini başa düşmək üçün bir nüvə alt sisteminin mənbə kodunu oxumaqdır. file_operations. Fayl əməliyyatları "hər şey bir fayldır" prinsipini təmin edərək onları idarə etməyi xüsusilə xoş edir. Üst səviyyəli qovluqdakı C nüvəsi mənbə faylları fs/ məşhur fayl sistemləri və yaddaş cihazları arasında geniş və nisbətən sadə uyğunluq təmin edən bir örtük təbəqəsi olan virtual fayl sistemlərinin tətbiqini təmsil edir. Ad boşluqları vasitəsilə əlaqələndirmə və üst-üstə düşmə ilə montaj Linux — konteynerlər və yalnız oxunan kök fayl sistemləri yaratmağı mümkün edən VFS-in sehridir. Mənbə kodunun, eBPF nüvə alətinin və onun interfeysinin öyrənilməsi ilə birlikdə bcc
nüvə kəşfiyyatını həmişəkindən daha asan edir.

Dostlar, bu məqalənin sizin üçün faydalı olub-olmadığını mənə bildirin. Bəlkə hər hansı bir şərhiniz və ya təklifiniz var? "Administrator" kursu ilə maraqlananlar üçün isə... Linux", sizi dəvət edirik açıq gün18 apreldə baş tutacaq.

Birinci hissə.

Mənbə: www.habr.com

DDoS mühafizəsi, VPS VDS serverləri olan saytlar üçün etibarlı hostinq alın 🔥 DDoS qorunması, VPS VDS serverləri ilə etibarlı veb sayt hostinqi alın | ProHoster