Linuxda virtual fayl tizimlari: ular nima uchun kerak va ular qanday ishlaydi? 1-qism

Hammaga salom! Siz allaqachon sevib qolgan kurslar uchun yangi oqimlarni boshlashda davom etamiz va endi biz yangi kurslar toʻplamini boshlayotganimizni eʼlon qilishga shoshilmoqdamiz. "Linux administratori"aprel oyi oxirida ishga tushadi. Ushbu tadbir uchun yangi nashr e'lon qilinadi. Asl material bilan siz mumkin bu erda o'qing.

Virtual fayl tizimlari Linux falsafasiga "hamma narsa fayl" deb aytishga imkon beruvchi sehrli abstraksiya bo'lib xizmat qiladi.

Linuxda virtual fayl tizimlari: ular nima uchun kerak va ular qanday ishlaydi? 1-qism

Fayl tizimi nima? Linuxning birinchi hissa qo'shuvchilari va mualliflaridan birining so'zlari asosida Roberta lava, "Fayl tizimi - bu ma'lum bir tuzilishga muvofiq yig'ilgan ma'lumotlarning ierarxik saqlanishi." Qanday bo'lmasin, bu ta'rif VFAT (Virtual fayllarni taqsimlash jadvali), Git va boshqalar uchun bir xil darajada mos keladi. Kassandra (NoSQL ma'lumotlar bazasi). Xo'sh, "fayl tizimi" kabi narsani aniq nima belgilaydi?

Fayl tizimi asoslari

Linux yadrosi fayl tizimi deb hisoblanishi mumkin bo'lgan ob'ekt uchun ma'lum talablarga ega. U usullarni amalga oshirishi kerak open(), read() и write() nomlari bo'lgan doimiy ob'ektlar uchun. Ob'ektga yo'naltirilgan nuqtai nazardan dasturlash, yadro umumiy fayl tizimini mavhum interfeys sifatida belgilaydi va bu uchta katta funksiya "virtual" hisoblanadi va aniq ta'rifga ega emas. Shunga ko'ra, standart fayl tizimini amalga oshirish virtual fayl tizimi (VFS) deb ataladi.

Linuxda virtual fayl tizimlari: ular nima uchun kerak va ular qanday ishlaydi? 1-qism

Agar biz ob'ektni ochishimiz, o'qishimiz va yozishimiz mumkin bo'lsa, u holda yuqoridagi konsoldagi misoldan ko'rib turganimizdek, bu ob'ekt fayl hisoblanadi.
VFS fenomeni faqat Unix-ga o'xshash "hamma narsa fayl" degan kuzatuvni ta'kidlaydi. Yuqoridagi kichik /dev/console misoli konsolning qanday ishlashini ko'rsatishi qanchalik g'alati ekanligini o'ylab ko'ring. Rasmda interaktiv Bash sessiyasi ko'rsatilgan. Konsolga satr yuborish (virtual konsol qurilmasi) uni virtual ekranda ko'rsatadi. VFS boshqa, hatto g'alati xususiyatlarga ega. Misol uchun, bu sizga qidirish imkonini beradi uni.

Ext4, NFS va /proc kabi tanish tizimlar C ma'lumotlar strukturasida uchta muhim funktsiyaga ega. file_operations. Bundan tashqari, ba'zi fayl tizimlari VFS funksiyalarini tanish ob'ektga yo'naltirilgan tarzda kengaytiradi va qayta belgilaydi. Robert Love ta'kidlaganidek, VFS abstraksiyasi Linux foydalanuvchilariga fayllarni ichki ma'lumotlar formati haqida qayg'urmasdan, uchinchi tomon operatsion tizimlariga yoki quvurlar kabi mavhum ob'ektlarga beparvolik bilan nusxalash imkonini beradi. Foydalanuvchi tomonida (foydalanuvchi maydoni), tizim chaqiruvidan foydalanib, jarayon fayldan yadro ma'lumotlar tuzilmalariga usul yordamida nusxa ko'chirishi mumkin. read() bitta fayl tizimi va keyin usuldan foydalaning write () ma'lumotlarni chiqarish uchun boshqa fayl tizimi.

Asosiy VFS turlariga tegishli funksiya ta'riflari fayllarda mavjud fs/*.c yadro manba kodi, pastki kataloglar esa fs/ ma'lum fayl tizimlarini o'z ichiga oladi. Yadro shuningdek, kabi ob'ektlarni o'z ichiga oladi cgroups, /dev и tmpfs, ular yuklash jarayonida talab qilinadi va shuning uchun yadro pastki katalogida aniqlanadi init/. E'tibor bering cgroups, /dev и tmpfs "katta uchta" funktsiyalarni chaqirmang file_operations, lekin to'g'ridan-to'g'ri o'qish va xotiraga yozish.
Quyidagi diagrammada foydalanuvchilar maydoni odatda Linux tizimlarida o'rnatilgan turli xil fayl tizimlariga qanday kirishi ko'rsatilgan. Tuzilmalar ko'rsatilmagan pipes, dmesg и POSIX clocks, bu ham tuzilmani amalga oshiradi file_operations, VFS qatlami orqali kirish mumkin.

Linuxda virtual fayl tizimlari: ular nima uchun kerak va ular qanday ishlaydi? 1-qism

VFS - bu tizim qo'ng'iroqlari va ma'lum dasturlarni amalga oshirish o'rtasidagi "o'rash qatlami" file_operations, kabi ext4 и procfs. Funksiyalar file_operations qurilma drayverlari yoki xotiraga kirish qurilmalari bilan ishlashi mumkin. tmpfs, devtmpfs и cgroups foydalanmang file_operations, lekin to'g'ridan-to'g'ri xotiraga kirish.
VFS ning mavjudligi kodni qayta ishlatish imkoniyatini beradi, chunki fayl tizimlari bilan bog'liq bo'lgan asosiy usullar har bir fayl tizimi tomonidan qayta qo'llanilishi shart emas. Kodni qayta ishlatish dastur muhandislari orasida keng tarqalgan amaliyotdir! Biroq, agar qayta foydalanish mumkin bo'lgan kod mavjud bo'lsa jiddiy xatolar, umumiy usullarni meros qilib olgan barcha ilovalar ulardan aziyat chekadi.

/tmp: oddiy maslahat

Tizimda VFS mavjudligini aniqlashning oson yo'li terishdir mount | grep -v sd | grep -v :/, bu barcha o'rnatilganlarni ko'rsatadi (mounted) diskda rezident bo'lmagan va NFS bo'lmagan fayl tizimlari, bu ko'pchilik kompyuterlarda to'g'ri. Ro'yxatdagi o'rnatishlardan biri (mounts) VFS shubhasiz /tmp, to'g'rimi?

Linuxda virtual fayl tizimlari: ular nima uchun kerak va ular qanday ishlaydi? 1-qism

Bu saqlash joyini hamma biladi / tmp jismoniy vositada - jinnilik! manba.

Nima uchun uni saqlash kerak emas /tmp jismoniy ommaviy axborot vositalarida? Chunki fayllar ichida /tmp vaqtinchalik va saqlash qurilmalari tmpfs yaratilgan xotiradan sekinroq. Bundan tashqari, fizik media xotiradan ko'ra qayta yozilganda kiyinishga ko'proq moyil bo'ladi. Va nihoyat, /tmp-dagi fayllar maxfiy ma'lumotlarni o'z ichiga olishi mumkin, shuning uchun ularni har bir qayta ishga tushirishda yo'q qilish muhim xususiyatdir.

Afsuski, ba'zi Linux tarqatish o'rnatish skriptlari sukut bo'yicha saqlash qurilmasida /tmp ni yaratadi. Agar bu sizning tizimingizda ham sodir bo'lgan bo'lsa, umidsizlikka tushmang. Bir nechta oddiy ko'rsatmalarga amal qiling Vik Wikibuni tuzatish uchun va xotira ajratilganligini yodda tuting tmpfs boshqa maqsadlar uchun mavjud bo'lmaydi. Boshqacha qilib aytganda, gigant tmpfs va undagi katta fayllarga ega tizimning xotirasi tugashi va ishdan chiqishi mumkin. Yana bir maslahat: faylni tahrirlashda /etc/fstab, esda tutingki, u yangi qator bilan tugashi kerak, aks holda tizimingiz yuklanmaydi.

/proc va /sys

Bundan tashqari /tmp, Linux foydalanuvchilariga eng tanish bo'lgan VFS (virtual fayl tizimlari). /proc и /sys. (/dev umumiy xotirada joylashgan va ega emas file_operations). Nima uchun bu ikki komponent? Keling, bu masalani ko'rib chiqaylik.

procfs yadro va u kuzatadigan jarayonlarning suratini yaratadi userspace. The /proc yadro uzilishlar, virtual xotira va rejalashtiruvchi kabi mavjud narsalar haqidagi ma'lumotlarni chop etadi. Bundan tashqari, /proc/sys buyruq bilan sozlangan parametrlar joy sysctl, uchun mavjud userspace. Alohida jarayonlarning holati va statistikasi kataloglarda ko'rsatiladi /proc/.

Linuxda virtual fayl tizimlari: ular nima uchun kerak va ular qanday ishlaydi? 1-qism

u /proc/meminfo bo'sh fayl bo'lib, unda qimmatli ma'lumotlar mavjud.

Xatti-harakatlar /proc fayllar turli VFS disk fayl tizimlari bo'lishi mumkinligini ko'rsatadi. Bir tomondan, /proc/meminfo buyrug'i bilan ko'rish mumkin bo'lgan ma'lumotlarni o'z ichiga oladi free. Boshqa tomondan, u bo'sh! Bu qanday ishlaydi? Vaziyat sarlavhali mashhur maqolani eslatadi Oyga hech kim qaramasa ham bormi? Haqiqat va kvant nazariyasi"Kornel universiteti fizika professori Devid Mermin tomonidan 1985 yilda yozilgan. Gap shundaki, yadro so'rov yuborilganda xotira statistikasini to'playdi /proc, va aslida fayllarda /proc hech kim qaramasa, hech narsa yo'q. Aytgandek Mermin, "Asosiy kvant doktrinasi, o'lchov odatda o'lchanadigan mulkning oldindan mavjud qiymatini oshkor etmasligini aytadi." (Va oy haqidagi savolni uy vazifasi deb hisoblang!)
Ko'rinadigan bo'shliq procfs mantiqiy, chunki u yerdagi axborot dinamik. Biroz boshqacha vaziyat sysfs. Keling, kamida bir bayt o'lchamdagi nechta fayl mavjudligini taqqoslaylik /proc va /sys.

Linuxda virtual fayl tizimlari: ular nima uchun kerak va ular qanday ishlaydi? 1-qism

Procfs bitta faylga, ya'ni eksport qilingan yadro konfiguratsiyasiga ega, bu istisno, chunki u yuklashda faqat bir marta yaratilishi kerak. Boshqa tomondan, ichida /sys ko'p kattaroq fayllar mavjud bo'lib, ularning aksariyati xotiraning butun sahifasini egallaydi. Odatda fayllar sysfs kabi fayllarni o'qish natijasida olingan ma'lumotlar jadvallaridan farqli o'laroq, aynan bitta raqam yoki qatorni o'z ichiga oladi /proc/meminfo.

Maqsad sysfs - yadro chaqiradigan narsalarni o'qish/yozish xususiyatlarini ta'minlash «kobjects» foydalanuvchilar maydonida. Yagona maqsad kobjects havolani hisoblash: ob'ektga oxirgi havola o'chirilganda, tizim u bilan bog'liq resurslarni tiklaydi. Shunga qaramasdan, /sys mashhurlarining ko'p qismini tashkil qiladi "foydalanuvchilar maydoni uchun barqaror ABI" hech kim hech qachon, hech qanday sharoitda qila olmaydigan yadro "tanaffus". Bu sysfs-dagi fayllar statik ekanligini anglatmaydi, bu beqaror ob'ektlarning havolalarini hisoblash bilan mos kelmaydi.
Yadroning barqaror ABI ko'rinishi mumkin bo'lgan narsalarni cheklaydi /sys, o'sha paytda mavjud bo'lgan narsa emas. Sysfs-da fayllarga ruxsatnomalar ro'yxati qurilmalar, modullar, fayl tizimlari va boshqalar uchun qanday sozlanishi mumkinligi haqida tushuncha beradi. sozlanishi yoki o‘qilishi mumkin. Mantiqiy xulosa shuki, procfs ham yadroning barqaror ABI qismidir, garchi bu hujjatda aniq ko'rsatilmagan bo'lsa-da. hujjatlar.

Linuxda virtual fayl tizimlari: ular nima uchun kerak va ular qanday ishlaydi? 1-qism

Fayllar sysfs har bir ob'ekt uchun alohida xususiyatni tavsiflang va o'qilishi, yozilishi yoki ikkalasi bo'lishi mumkin. Fayldagi "0" SSD-ni olib tashlab bo'lmasligini anglatadi.

Tarjimaning ikkinchi qismini eBPF va bcc vositalaridan foydalangan holda VFS ni qanday kuzatish haqida boshlaylik, endi biz sizning sharhlaringizni kutamiz va an'anaviy ravishda sizni taklif qilamiz. ochiq vebinar, 9 aprel kuni o'qituvchimiz tomonidan o'tkaziladi - Vladimir Drozdetskiy.

Manba: www.habr.com

a Izoh qo'shish