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.
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.
Dosya sistemi nedir? Linux'a ilk katkıda bulunanlardan ve yazarlardan birinin sözlerine dayanmaktadır
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
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:
ext4, NFS ve /proc gibi tanıdık sistemlerin C veri yapısında üç önemli işlevi vardır. 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/
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 clocks
yapıyı da uygulayan file_operations
, VFS katmanı aracılığıyla erişilir.
VFS, sistem çağrıları ile belirli uygulamaların uygulamaları arasında bir "sarmalayıcı katman"dır. file_operations
Gibi 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:
/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 /tmp
Sağ?
Herkes bilir ki depolama / tmp
fiziksel bir ortamda - delilik!
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. 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/
.
ö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. /proc
, ve aslında dosyalarda /proc
kimse bakmadığında hiçbir şey yoktur. Söylendiği gibi
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
.
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
Ç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.
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.
Kaynak: habr.com