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.
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.
Fayl sistemi nədir? Linux-un ilk töhfəçilərindən və müəlliflərindən birinin sözlərinə əsaslanır
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
Ə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
Ext4, NFS və /proc kimi tanış sistemlər C məlumat strukturunda üç mühüm funksiyaya malikdir. 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/
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 clocks
strukturunu da həyata keçirən file_operations
, VFS təbəqəsi vasitəsilə əldə edilir.
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_operations
Kimi 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ə
/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ə?
Bu anbarı hamı bilir / tmp
fiziki mühitdə - dəlilik!
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 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/
.
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 /proc
, və əslində fayllarda /proc
heç kim baxmayanda heç nə yoxdur. Dediyi kimi
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
və /sys
.
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
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.
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.
Mənbə: www.habr.com