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

Hamıya salam! Artıq aşiq olduğunuz kurslar üçün yeni axınlar açmağa davam edirik və indi yeni kurslar dəstinə başladığımızı elan etməyə tələsirik. "Linux Administrator"aprelin sonunda başlayacaq. Bu tədbir üçün yeni nəşrin tarixi veriləcək. Orijinal materialla, edə bilərsiniz burada oxuyun.

Virtual fayl sistemləri Linux fəlsəfəsinə “hər şeyin fayldır” deməsinə imkan verən bir növ sehrli abstraksiya rolunu oynayır.

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

Fayl sistemi nədir? Linux-un ilk töhfəçilərindən və müəlliflərindən birinin sözlərinə əsaslanır Roberta Lava, "Fayl sistemi müəyyən bir struktura uyğun olaraq yığılmış məlumatların iyerarxik saxlanmasıdır." Nə olursa olsun, bu tərif eyni dərəcədə VFAT (Virtual Fayl Ayırma Cədvəli), Git və Cassandra (NoSQL verilənlər bazası). Beləliklə, "fayl sistemi" kimi bir şeyi dəqiq nə müəyyənləşdirir?

Fayl Sisteminin Əsasları

Linux nüvəsinin fayl sistemi sayıla bilən bir obyekt üçün müəyyən tələbləri var. Metodları həyata keçirməlidir open(), read() и write() adları olan davamlı obyektlər üçün. Obyekt yönümlü nöqteyi-nəzərdən proqramlaşdırma, nüvə ümumi fayl sistemini mücərrəd interfeys kimi müəyyən edir və bu üç böyük funksiya “virtual” hesab olunur və konkret tərifi yoxdur. Müvafiq olaraq, standart fayl sisteminin tətbiqi virtual fayl sistemi (VFS) adlanır.

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

Əgər biz obyekti aça, oxuya və yaza biliriksə, yuxarıdakı konsoldakı nümunədən də göründüyü kimi həmin obyekt fayl sayılır.
VFS fenomeni yalnız Unix-ə bənzər müşahidəni vurğulayır ki, "hər şey bir fayldır". Yuxarıdakı kiçik /dev/console nümunəsinin konsolun əslində necə işlədiyini göstərməsi nə qədər qəribədir. Şəkildə interaktiv Bash sessiyası göstərilir. Sətirin konsola göndərilməsi (virtual konsol cihazı) onu virtual ekranda göstərir. VFS başqa, hətta qəribə xüsusiyyətlərə malikdir. Məsələn, bu, sizə axtarış etməyə imkan verir onunla.

Ext4, NFS və /proc kimi tanış sistemlər C məlumat strukturunda üç mühüm funksiyaya malikdir. fayl_əməliyyatları. Bundan əlavə, müəyyən fayl sistemləri VFS funksionallığını tanış obyekt yönümlü şəkildə genişləndirir və yenidən müəyyənləşdirir. Robert Love qeyd etdiyi kimi, VFS abstraksiya Linux istifadəçilərinə faylları öz daxili məlumat formatından narahat olmadan üçüncü tərəf əməliyyat sistemlərinə və ya borular kimi mücərrəd obyektlərə ehtiyatsız surətdə köçürməyə imkan verir. İstifadəçi tərəfində (istifadəçi məkanı), sistem çağırışından istifadə edərək, proses metoddan istifadə edərək fayldan nüvə məlumat strukturlarına köçürə bilər. read() bir fayl sistemi və sonra metoddan istifadə edin write () məlumat çıxışı üçün başqa bir fayl sistemi.

Əsas VFS növlərinə aid olan funksiya tərifləri fayllardadır fs/*.c kernel mənbə kodu, alt kataloqlar isə fs/ müəyyən fayl sistemlərini ehtiva edir. Nüvə həmçinin kimi varlıqları ehtiva edir cgroups, /dev и tmpfs, yükləmə prosesi zamanı tələb olunur və buna görə də nüvə alt kataloqunda müəyyən edilir init/. Diqqət edin cgroups, /dev и tmpfs "böyük üç" funksiyanı çağırmayın file_operations, lakin birbaşa oxuyun və yaddaşa yazın.
Aşağıdakı diaqram istifadəçilər sahəsinin Linux sistemlərində ümumi olaraq quraşdırılmış müxtəlif fayl sistemlərinə necə daxil olduğunu göstərir. Strukturlar göstərilmir pipes, dmesg и POSIX clocksstrukturunu da həyata keçirən file_operations, VFS təbəqəsi vasitəsilə əldə edilir.

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

VFS sistem çağırışları və müəyyən əməliyyatların həyata keçirilməsi arasında "bağlı qat"dır file_operationsKimi ext4 и procfs. Funksiyalar file_operations ya cihaz drayverləri, ya da yaddaşa giriş cihazları ilə əlaqə saxlaya bilər. tmpfs, devtmpfs и cgroups istifadə etməyin file_operations, lakin birbaşa yaddaşa daxil olur.
VFS-in mövcudluğu kodu təkrar istifadə etmək imkanı verir, çünki fayl sistemləri ilə əlaqəli əsas metodların hər bir fayl sistemi növü tərəfindən yenidən həyata keçirilməsinə ehtiyac yoxdur. Kodun təkrar istifadəsi proqram mühəndisləri arasında adi bir təcrübədir! Ancaq təkrar istifadə edilə bilən kodu ehtiva edərsə ciddi səhvlər, ümumi metodları miras alan bütün tətbiqlər onlardan əziyyət çəkir.

/tmp: Sadə göstəriş

Sistemdə VFS-nin mövcud olduğunu aşkar etməyin asan yolu yazmaqdır mount | grep -v sd | grep -v :/, bütün quraşdırılmışları göstərəcək (mounted) disk rezidenti olmayan və NFS olmayan fayl sistemləri, əksər kompüterlərdə belədir. Sadalanan montajlardan biri (mounts) VFS, şübhəsiz ki, olacaq /tmp, hə?

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

Bu anbarı hamı bilir / tmp fiziki mühitdə - dəlilik! Mənbə.

Niyə saxlanması arzuolunmazdır /tmp fiziki mediada? Çünki içindəki fayllar /tmp müvəqqətidir və saxlama cihazları tmpf-lərin yaradıldığı yaddaşdan daha yavaşdır. Üstəlik, fiziki media yaddaşdan daha çox yazıldıqda köhnəlməyə daha həssasdır. Nəhayət, /tmp-dəki fayllar həssas məlumatları ehtiva edə bilər, buna görə də hər yenidən başlatma zamanı onların yoxa çıxması vacib xüsusiyyətdir.

Təəssüf ki, bəzi Linux paylama quraşdırma skriptləri standart olaraq saxlama cihazında /tmp yaradır. Bu sizin sisteminizdə də baş veribsə, ümidsiz olmayın. Bir neçə sadə təlimatı izləyin Arch WikiBunu düzəltmək üçün yaddaşın ayrıldığını unutmayın tmpfs digər məqsədlər üçün əlçatmaz olur. Başqa sözlə desək, nəhəng tmpf-ləri və böyük faylları olan sistemin yaddaşı bitib, çökə bilər. Başqa bir ipucu: faylı redaktə edərkən /etc/fstab, unutmayın ki, o, yeni sətirlə bitməlidir, əks halda sisteminiz yüklənməyəcək.

/proc və /sys

Əlavə /tmp, Linux istifadəçilərinə ən çox tanış olan VFS (virtual fayl sistemləri). /proc и /sys. (/dev ortaq yaddaşda yerləşir və yoxdur file_operations). Niyə bu iki komponent? Gəlin bu məsələyə baxaq.

procfs nüvənin və onun nəzarət etdiyi proseslərin snapshotunu yaradır userspace. Ilə /proc nüvə kəsilmələr, virtual yaddaş və planlaşdırıcı kimi mövcud olanlar haqqında məlumatları çap edir. Bundan başqa, /proc/sys komanda ilə konfiqurasiya edilən parametrlərin olduğu yerdir sysctl, üçün mövcuddur userspace. Ayrı-ayrı proseslərin vəziyyəti və statistikası kataloqlarda göstərilir /proc/.

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

Burada /proc/meminfo dəyərli məlumatları ehtiva edən boş bir fayldır.

Davranış /proc fayllar VFS disk fayl sistemlərinin necə fərqli ola biləcəyini göstərir. Bir tərəfdən, /proc/meminfo əmri ilə baxıla bilən məlumatları ehtiva edir free. Digər tərəfdən, boşdur! Bu necə işləyir? adlı məşhur məqaləni xatırladır vəziyyət Heç kim ona baxmayanda ay varmı? Reallıq və Kvant Nəzəriyyəsi”1985-ci ildə Cornell Universitetinin fizika professoru David Mermin tərəfindən yazılmışdır. Məsələ burasındadır ki, sorğu göndərildikdə nüvə yaddaş statistikasını toplayır /proc, və əslində fayllarda /proc heç kim baxmayanda heç nə yoxdur. Dediyi kimi Mermin, "Fundamental kvant doktrinası deyir ki, ölçmə ümumiyyətlə ölçülən əmlakın əvvəlcədən mövcud dəyərini ortaya qoymur." (Və ayla bağlı sualı ev tapşırığı hesab edin!)
Görünən boşluq procfs məntiqlidir, çünki oradakı məlumat dinamikdir. Bir az fərqli vəziyyət sysfs. Ən azı bir bayt ölçüsündə neçə faylın olduğunu müqayisə edək /proc/sys.

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

Procfs bir fayla, yəni ixrac edilmiş ləpə konfiqurasiyasına malikdir, bu istisnadır, çünki hər açılışda yalnız bir dəfə yaradılmalıdır. Digər tərəfdən, in /sys bir çox daha böyük fayllar var, onların çoxu yaddaşın bütün səhifəsini tutur. Adətən fayllar sysfs kimi faylların oxunmasından əldə edilən məlumat cədvəllərindən fərqli olaraq tam olaraq bir ədəd və ya sətir ehtiva edir /proc/meminfo.

Məqsəd sysfs - nüvənin çağırdığı şeyin oxu/yazma xüsusiyyətlərini təmin edin «kobjects» istifadəçi məkanında. Yeganə məqsəd kobjects keçid hesablanır: bir kobjectə son keçid silindikdə, sistem onunla əlaqəli resursları bərpa edəcəkdir. Buna baxmayaraq, /sys məşhurların çoxunu təşkil edir "istifadəçi sahəsi üçün sabit ABI" heç kimin heç vaxt, heç bir şəraitdə edə bilməyəcəyi əsas "fasilə". Bu o demək deyil ki, sysfs-dəki fayllar statikdir və bu, qeyri-sabit obyektlərin istinad hesablanması ilə uyğun gəlmir.
Nüvənin sabit ABI, görünə biləcəkləri məhdudlaşdırır /sys, həmin anda əslində mövcud olan şey deyil. Sysfs-də fayl icazələrinin siyahısı cihazlar, modullar, fayl sistemləri və s. üçün necə konfiqurasiya edilə bilən parametrlər haqqında məlumat verir. konfiqurasiya edilə və ya oxuna bilər. Məntiqi nəticə ondan ibarətdir ki, procfs həm də nüvənin sabit ABI-nin bir hissəsidir, baxmayaraq ki, bu, açıq şəkildə göstərilməyib. sənədləşdirmə.

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

Fayllar sysfs hər bir obyekt üçün xüsusi bir xüsusiyyəti təsvir edin və oxuna bilən, yazıla bilən və ya hər ikisi ola bilər. Fayldakı "0" SSD-nin çıxarıla bilməyəcəyini bildirir.

Tərcümənin ikinci hissəsinə eBPF və bcc alətlərindən istifadə edərək VFS-yə necə nəzarət etməkdən başlayaq və indi şərhlərinizi gözləyirik və ənənəvi olaraq sizi dəvət edirik. açıq vebinar9 apreldə müəllimimiz tərəfindən keçiriləcək - Vladimir Drozdetski.

Mənbə: www.habr.com

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