Linux'ta sanal dosya sistemleri: neden gereklidirler ve nasıl çalışırlar? Bölüm 1

Herkese selam! Zaten aşık olduğunuz kurslar için yeni akışlar başlatmaya devam ediyoruz ve şimdi yeni bir dizi kursa başladığımızı duyurmak için acele ediyoruz. "Linux Yöneticisi"Nisan ayı sonunda başlayacak olan. Bu etkinlik için yeni bir yayın tarihlenecektir. Orijinal malzeme ile yapabilirsiniz burayı oku.

Sanal dosya sistemleri, Linux felsefesinin "her şey bir dosyadır" demesine izin veren bir tür büyülü soyutlama işlevi görür.

Linux'ta sanal dosya sistemleri: neden gereklidirler ve nasıl çalışırlar? Bölüm 1

Dosya sistemi nedir? Linux'a ilk katkıda bulunanlardan ve yazarlardan birinin sözlerine dayanmaktadır Roberta Lava, "Bir dosya sistemi, belirli bir yapıya göre bir araya getirilmiş verilerin hiyerarşik bir şekilde depolanmasıdır." Ne olursa olsun, bu tanım VFAT (Sanal Dosya Ayırma Tablosu), Git ve Kötü olayları önceden haber veren kimse (NoSQL veritabanı). Peki "dosya sistemi" gibi bir şeyi tam olarak ne tanımlar?

Dosya Sistemi Temelleri

Linux çekirdeği, bir dosya sistemi olarak kabul edilebilecek bir varlık için belirli gereksinimlere sahiptir. Yöntemleri uygulamalıdır. open(), read() и write() adları olan kalıcı nesneler için. Nesne yönelimli bir bakış açısından programlama, çekirdek, genel bir dosya sistemini soyut bir arabirim olarak tanımlar ve bu üç büyük işlev "sanal" olarak kabul edilir ve somut bir tanımı yoktur. Buna göre, varsayılan dosya sistemi uygulamasına sanal dosya sistemi (VFS) adı verilir.

Linux'ta sanal dosya sistemleri: neden gereklidirler ve nasıl çalışırlar? Bölüm 1

Bir varlığı açabilir, okuyabilir ve ona yazabilirsek, yukarıdaki konsoldaki örnekte de görebileceğimiz gibi, o varlık bir dosya olarak kabul edilir.
VFS fenomeni, yalnızca "her şey bir dosyadır" şeklindeki Unix benzeri gözlemin altını çizer. Yukarıdaki küçük /dev/console örneğinin konsolun gerçekte nasıl çalıştığını göstermesinin ne kadar tuhaf olduğunu bir düşünün. Resim etkileşimli bir Bash oturumunu göstermektedir. Konsola (sanal konsol aygıtı) bir dize göndermek, onu sanal bir ekranda görüntüler. VFS'nin başka, hatta daha garip özellikleri vardır. Örneğin, şuna göre arama yapmanızı sağlar: Bunlar.

ext4, NFS ve /proc gibi tanıdık sistemlerin C veri yapısında üç önemli işlevi vardır. dosya_operasyonları. Ek olarak, belirli dosya sistemleri, VFS işlevselliğini tanıdık bir nesne yönelimli şekilde genişletir ve yeniden tanımlar. Robert Love'ın işaret ettiği gibi, VFS soyutlaması, Linux kullanıcılarının üçüncü taraf işletim sistemlerine veya borular gibi soyut varlıklara dahili veri biçimleri hakkında endişelenmeden kayıtsızca dosya kopyalamalarına olanak tanır. Kullanıcı tarafında (kullanıcı alanı), bir sistem çağrısı kullanarak, bir işlem, yöntemi kullanarak bir dosyadan çekirdek veri yapılarına kopyalayabilir. read() bir dosya sistemi ve ardından yöntemi kullanın write () veri çıkışı için başka bir dosya sistemi.

Temel VFS türlerine ait işlev tanımları dosyalardadır. fs/*.c çekirdek kaynak kodu, alt dizinler ise fs/ belirli dosya sistemlerini içerir. Çekirdek ayrıca aşağıdaki gibi varlıkları da içerir: cgroups, /dev и tmpfsönyükleme işlemi sırasında gerekli olan ve bu nedenle çekirdek alt dizininde tanımlanan init/. Dikkat edin cgroups, /dev и tmpfs "üç büyük" işlevi çağırma file_operations, ancak doğrudan oku ve belleğe yaz.
Aşağıdaki şema, kullanıcı alanının genellikle Linux sistemlerine monte edilen farklı dosya sistemlerine nasıl eriştiğini gösterir. Yapılar gösterilmemiştir pipes, dmesg и POSIX clocksyapıyı da uygulayan file_operations, VFS katmanı aracılığıyla erişilir.

Linux'ta sanal dosya sistemleri: neden gereklidirler ve nasıl çalışırlar? Bölüm 1

VFS, sistem çağrıları ile belirli uygulamaların uygulamaları arasında bir "sarmalayıcı katman"dır. file_operationsGibi ext4 и procfs. Fonksiyonlar file_operations aygıt sürücüleriyle veya bellek erişim aygıtlarıyla etkileşime girebilir. tmpfs, devtmpfs и cgroups kullanmayın file_operations, ancak doğrudan belleğe erişin.
Dosya sistemleriyle ilişkili temel yöntemlerin her dosya sistemi türü tarafından yeniden uygulanması gerekmediğinden, VFS'nin varlığı, kodun yeniden kullanılması için bir fırsat sağlar. Kod yeniden kullanımı, yazılım mühendisleri arasında yaygın bir uygulamadır! Ancak, yeniden kullanılabilir kod şunları içeriyorsa: ciddi hatalar, ortak yöntemleri miras alan tüm uygulamalar bunlardan muzdariptir.

/tmp: Basit ipucu

Bir sistemde VFS'nin bulunduğunu tespit etmenin kolay bir yolu yazmaktır. mount | grep -v sd | grep -v :/, tüm monte edilmişleri gösterecek (mounted) diskte yerleşik olmayan ve çoğu bilgisayarda geçerli olan NFS olmayan dosya sistemleri. Listelenen bineklerden biri (mounts) VFS şüphesiz /tmpSağ?

Linux'ta sanal dosya sistemleri: neden gereklidirler ve nasıl çalışırlar? Bölüm 1

Herkes bilir ki depolama / tmp fiziksel bir ortamda - delilik! Kaynak.

Saklamak neden istenmeyen bir durumdur? /tmp fiziksel ortamda? Çünkü içindeki dosyalar /tmp geçicidir ve depolama aygıtları, tmpfs'nin oluşturulduğu bellekten daha yavaştır. Ayrıca, fiziksel ortam, üzerine yazıldığında aşınmaya bellekten daha duyarlıdır. Son olarak, /tmp içindeki dosyalar hassas bilgiler içerebilir, bu nedenle her yeniden başlatmada bunların kaybolması önemli bir özelliktir.

Ne yazık ki, bazı Linux dağıtım kurulum betikleri, depolama aygıtında varsayılan olarak /tmp oluşturur. Bu sizin sisteminize de olduysa umutsuzluğa kapılmayın. ile birkaç basit talimatı izleyin. Arch WikiBunu düzeltmek için ve bunun için ayrılan belleğin farkında olun. tmpfs diğer amaçlar için kullanılamaz hale gelir. Başka bir deyişle, üzerinde dev bir tmpfs ve büyük dosyalar bulunan bir sistemin belleği tükenebilir ve çökebilir. Başka bir ipucu: bir dosyayı düzenlerken /etc/fstab, yeni bir satırla bitmesi gerektiğini unutmayın, aksi takdirde sisteminiz önyükleme yapmaz.

/proc ve /sys

Dışında /tmp, Linux kullanıcılarının en aşina olduğu VFS (sanal dosya sistemleri) /proc и /sys. (/dev paylaşılan bellekte bulunur ve sahip değildir file_operations). Neden bu iki bileşen? Bu konuyu inceleyelim.

procfs çekirdeğin ve izlediği işlemlerin anlık görüntüsünü oluşturur userspace. /proc çekirdek, kesintiler, sanal bellek ve zamanlayıcı gibi mevcut olanlarla ilgili bilgileri yazdırır. Ayrıca, /proc/sys komutuyla yapılandırılan parametrelerin bulunduğu yerdir. sysctl, için uygun userspace. Her bir işlemin durumu ve istatistikleri kataloglarda görüntülenir. /proc/.

Linux'ta sanal dosya sistemleri: neden gereklidirler ve nasıl çalışırlar? Bölüm 1

öyle /proc/meminfo yine de değerli bilgiler içeren boş bir dosyadır.

davranış /proc dosyaları, VFS disk dosya sistemlerinin ne kadar farklı olabileceğini gösterir. Bir tarafta, /proc/meminfo komutuyla görüntülenebilen bilgileri içerir free. Öte yandan, boş! O nasıl çalışır? Durum, başlıklı ünlü makaleyi anımsatıyor. Ay kimse bakmadığında var olur mu? Gerçeklik ve Kuantum Teorisi"Cornell Üniversitesi fizik profesörü David Mermin tarafından 1985 yılında yazılmıştır. Gerçek şu ki, bir istek yapıldığında çekirdek bellek istatistiklerini toplar. /proc, ve aslında dosyalarda /proc kimse bakmadığında hiçbir şey yoktur. Söylendiği gibi Mermin, "Temel kuantum doktrini, ölçümün genellikle ölçülen özelliğin önceden var olan bir değerini ortaya çıkarmadığını söylüyor." (Ay ile ilgili soruyu da ev ödevi olarak kabul edin!)
Görünen boşluk procfs mantıklı çünkü oradaki bilgiler dinamik. ile biraz farklı bir durum sysfs. En az bir bayt boyutunda kaç tane dosya olduğunu karşılaştıralım. /proc ve /sys.

Linux'ta sanal dosya sistemleri: neden gereklidirler ve nasıl çalışırlar? Bölüm 1

Procfs tek bir dosyaya, yani dışa aktarılan çekirdek yapılandırmasına sahiptir; bu, önyükleme başına yalnızca bir kez oluşturulması gerektiği için bir istisnadır. Öte yandan, içinde /sys çoğu tüm bir bellek sayfasını kaplayan birçok daha büyük dosya vardır. Genellikle dosyalar sysfs gibi dosyalardan elde edilen bilgi tablolarının aksine tam olarak bir sayı veya satır içerir. /proc/meminfo.

Gol sysfs - çekirdeğin çağırdığı şeylerin okuma/yazma özelliklerini sağlar «kobjects» kullanıcı alanında. tek hedef kobjects bağlantı sayımıdır: bir kobjeye giden son bağlantı kaldırıldığında, sistem onunla ilişkili kaynakları geri yükleyecektir. Yine de, /sys ünlülerin çoğunu oluşturur "kullanıcı alanı için kararlı ABI" hiç kimsenin hiçbir koşulda yapamayacağı çekirdek "kırmak". Bu, sysfs'deki dosyaların statik olduğu anlamına gelmez; bu, kararsız nesnelerin referans sayımıyla tutarsız olacaktır.
Çekirdeğin kararlı ABI'sı, içinde görünebilecekleri sınırlar. /sys, o anda gerçekte mevcut olan şey değil. Sysfs'de dosya izinlerinin listelenmesi, aygıtlar, modüller, dosya sistemleri vb. yapılandırılabilir veya okunabilir. Mantıksal sonuç, procfs'nin ayrıca çekirdeğin kararlı ABI'sinin bir parçası olduğudur, ancak bu açıkça belirtilmemiştir. belgeleme.

Linux'ta sanal dosya sistemleri: neden gereklidirler ve nasıl çalışırlar? Bölüm 1

içindeki dosyalar sysfs her varlık için belirli bir özelliği tanımlar ve okunabilir, yazılabilir veya her ikisi birden olabilir. Dosyadaki "0", SSD'nin kaldırılamayacağı anlamına gelir.

Çevirinin ikinci bölümüne eBPF ve bcc araçlarını kullanarak VFS'nin nasıl izleneceği ile başlayalım ve şimdi yorumlarınızı bekliyoruz ve geleneksel olarak sizi davet ediyoruz. web seminerini aç9 Nisan'da hocamız tarafından gerçekleştirilecek olan - Vladimir Drozdetski.

Kaynak: habr.com

Yorum ekle