Linux-da virtual fayl sistemləri: nə üçün lazımdır və necə işləyirlər? 2-ci hissə

Hər kəsə salam, biz sizinlə “Linux-da virtual fayl sistemləri: onlar nə üçün lazımdır və necə işləyirlər?” nəşrinin ikinci hissəsini sizinlə paylaşırıq. 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 "Linux Administrator", ç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.

Linux-da virtual fayl sistemləri: nə üçün lazımdır və necə işləyirlər? 2-ci hissə

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.

Linux-da virtual fayl sistemləri: nə üçün lazımdır və necə işləyirlər? 2-ci hissə

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.

Linux-da virtual fayl sistemləri: nə üçün lazımdır və necə işləyirlər? 2-ci hissə

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ı, o cümlədən marşrutlaşdırıcılar, termostatlar və avtomobillər indi Linux ilə işləyir. Bu cihazların bir çoxunun istifadəçi interfeysi azdır və ya heç yoxdur və onları "təmiz" şəkildə söndürmək mümkün deyil. Təsəvvür edin ki, idarəetmə blokuna enerji verildikdə, batareyası bitmiş 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, heç bir Linux prosesi ora yaza bilmirsə. Başqa bir cəhət ondan ibarətdir ki, böyük ölçüdə dəyişməz fayl sistemi uzaq cihazların sahə dəstəyi üçün vacibdir, çünki dəstək işçiləri sahə sistemləri ilə nominal olaraq eyni olan yerli sistemlərə etibar edirlər. Bəlkə də ən vacib (lakin həm də ən məkrli) fayda ondan ibarətdir ki, ro-rootfs tərtibatçıları sistemin dizayn mərhələsində hansı sistem obyektlərinin dəyişməz olacağına qərar verməyə məcbur edir. Ro-rootflarla işləmək yöndəmsiz və ağrılı ola bilər, çünki const dəyişənləri çox vaxt proqramlaşdırma dillərində olur, lakin onların faydaları əlavə yükü asanlıqla əsaslandırır.

yaradıcılıq rootfs Yalnız oxumaq üçün daxili tərtibatçılar üçün bəzi əlavə səylər tələb olunur və VFS mənzərəyə məhz burada daxil olur. 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əri 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ə

Linux-un daxili işini başa düşmək qeyri-mümkün bir iş kimi görünə bilər, çünki nüvənin özündə Linux istifadəçi sahəsi proqramlarını və C kitabxanalarında sistem çağırış interfeyslərini bir kənara qoyan çoxlu kod var. 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ə saxlama cihazları arasında geniş və nisbətən sadə uyğunluğu təmin edən sarğı təbəqəsi olan virtual fayl sistemlərinin tətbiqini təqdim edir. Linux ad məkanları vasitəsilə əlaqələndirmə və üst-üstə düşmə VFS-in sehridir ki, bu da yalnız oxumaq üçün konteynerlər və kök fayl sistemlərinin yaradılmasını mümkün edir. Mənbə kodunun, eBPF əsas alətinin və onun interfeysinin araşdırılması ilə birlikdə bcc
nüvə kəşfiyyatını həmişəkindən daha asan edir.

Dostlar, yazın, bu məqalə sizə faydalı oldu? Bəlkə hər hansı bir şərhiniz və ya qeydiniz var? Linux Administrator kursu ilə maraqlananlar dəvətlidir açıq gün18 apreldə baş tutacaq.

Birinci hissə.

Mənbə: www.habr.com

Добавить комментарий