Superblock, Inode, Dentry ve Dosya Nedir?


125

Linux dosya sisteminin anatomisi M. Tim Jones tarafından yayınlanan makalede , Linux'un tüm dosya sistemlerini ortak bir nesne kümesi perspektifinden gördüğünü ve bu nesnelerin süper blok , inode , dentry ve file olduğunu düşündüm . Paragrafın geri kalanı yukarıdakileri açıklasa da, bu açıklamada o kadar da rahat değildim.

Biri bana bu şartları açıklayabilir mi?

Yanıtlar:


136

Öncelikle ve en önemlisi, bunun sorunuzun şartlarından biri olmadığını anladım, meta verileri anlamalısınız . Kısaca ve Wikipedia'dan çalınan meta veriler verilerle ilgili verilerdir. Bu, meta verilerin bir veri parçası hakkında bilgi içerdiğini söyler. Örneğin, eğer bir arabaya sahipsem, o zaman araba hakkında bir takım bilgilerim var ama arabanın kendisinin bir parçası değil. Kayıt numarası, marka, model, üretim yılı, sigorta bilgileri vb. Gibi bilgiler. Bu bilgilerin tümü topluca meta veri olarak adlandırılır. Linux ve UNIX dosya sistemlerinde meta veriler, göreceğiniz gibi birden fazla organizasyon düzeyinde bulunur.

Süper blok esas olarak dosya sistemi meta verisidir ve dosya sistemi türünü, boyutunu, durumunu ve diğer meta veri yapıları hakkındaki bilgileri (meta verilerin meta verileri) tanımlar. Süper blok, dosya sistemi için çok önemlidir ve bu nedenle her dosya sistemi için birden fazla yedek kopyada saklanır. Süper blok, dosya sistemi için çok "yüksek düzeyde" bir meta veri yapısıdır. Örneğin, / var, bir bölümün süper bloğu bozulursa, söz konusu dosya sistemi (/ var) işletim sistemi tarafından monte edilemez. Genellikle bu etkinlikte, koşmanız gerekirfscksuperblock'un alternatif, yedek bir kopyasını otomatik olarak seçecek ve dosya sistemini kurtarmaya çalışacaktır. Yedek kopyaların kendileri, dosya sistemi aracılığıyla yayılmış blok gruplarında, ilk bölümün başlangıcından itibaren 1 blok ötelemeli olarak saklanır. Manuel kurtarma gerekli olduğunda bu önemlidir. dumpe2fs /dev/foo | grep -i superblockManuel kurtarma denemesi durumunda faydalı olan komutla, süper yedeklemeler hakkındaki bilgileri görüntüleyebilirsiniz . Dumpe2fs komutunun satırı gönderdiğini varsayalım Backup superblock at 163840, Group descriptors at 163841-163841. Bu süper blok yedeği kullanmaya teşebbüs, dosya sistemi yapısı hakkında bu bilgileri ve ek bilgiyi kullanabilirsiniz: /sbin/fsck.ext3 -b 163840 -B 1024 /dev/foo. Lütfen bu örnekte 1024 bayt boyutunda bir blok aldığımı unutmayın.

Bir inode , bir dosya sisteminde veya içinde bulunur ve bir dosya hakkındaki meta verileri temsil eder. Netlik açısından, bir Linux veya UNIX sistemindeki tüm nesneler dosyalardır; gerçek dosyalar, dizinler, cihazlar vb. Lütfen bir inode içindeki meta veriler arasında, insanların düşündüğü gibi bir dosya adı bulunmadığını, bunun daha sonra önemli olacağını unutmayın. Bir inode, esas olarak mülkiyet (kullanıcı, grup), erişim modu (okuma, yazma, izinleri yürütme) ve dosya türü hakkında bilgiler içerir.

Bir dentry dosya adlarına inode'a ilişkilendirilerek birlikte Inode'u ve dosyaları tutan şey. Diş Hekimleri aynı zamanda, daha hızlı erişim için en sık kullanılan dosyaları el altında tutan dizin önbelleklemede de rol oynamaktadır. Dosya sistemi geçişi, dizinler ve dosyaları arasındaki ilişkiyi sürdürdüğü için dişçiliğin başka bir yönüdür.

İnsanların kelimesiyle sunulduğunda tipik olarak ne düşündüklerinin yanı sıra bir dosya da gerçekten mantıksal olarak ilişkili keyfi bir veri bloğudur. Bunları takip etmek için (yukarıda) yapılan tüm çalışmaları göz önüne alarak nispeten sıkıcı.

Birkaç cümlenin bu kavramların hiçbirinin tam bir açıklamasını sağlamadığını tamamen anlıyorum, bu yüzden lütfen ne zaman ve nerede gerekliyse daha fazla ayrıntı sormaktan çekinmeyin.


@Tok: Bu şekilde mi dökülecek (cevabında gösterildiği gibi): 163840'da yedek süper blok, 163841-163841'de Grup tanımlayıcıları mı yoksa bu şekilde mi: 163840'da Grup süper tanımlayıcı, 163841-163842'de Grup tanımlayıcıları yedek mi? Bu bir yazım hatası mıydı? :-)
Sen 30:10

@TOK: 163840'da superblock yedekleme, 163841-163842'de Grup tanımlayıcıları, Grup Tanımlayıcıları hangi bilgileri aktarıyor?
Sen 30:10

@Sen - teorik olarak grup tanımlayıcıları birden fazla bloğa yayılabilir, ancak çoğu masaüstü sistemi için yalnızca tek bir blok aldıklarını ve $ ((BackupBlock + 1)) - $ ((BackupBlock + 1)) olarak adlandırıldığını görürsünüz
Tok

@TOK: sistemimde tamam $ ((BackupBlock + 1)) - $ ((BackupBlock + 2))
Sen

@Sen - Grup tanımlayıcısı bir blok grubunu tanımlar. Bu ne anlama geliyor? Daha fazla meta veri. Temel olarak bir grup tanımlayıcısı bir blok bitmap (blok ayırma bitmap bloğu numarası), bir inode bitmap (inode için aynıdır), bir inode tablosu (inode tablo için başlangıç ​​bloğunun blok numarası), serbest blok ve inode sayımlarını içerir. ve kullanılmış bir dizin sayısı. Bu, bir ext2 dosya sistemine dayanmaktadır. Grup tanımlayıcıları uygun dosya sistemi çalışması için çok önemlidir ve süper bloğun yanında kopyalanır.
Tok

49

Dosya

Bir dosya sadece belirli bir düzende düzenlenmiş bir bayt demeti anlamına gelir. Normal insanların bir dosyanın içeriğini dedikleri şey bu. Linux bir dosyayı açtığında, dosyanın nerede depolandığı ve hangi işlemleri kullandığı hakkında veri tutan bir dosya nesnesi de yaratır. Dosya kapatıldığında dosya nesnesi (ancak dosya verilerinin kendisi değil) atılır.

düğüm

Bir inode ("index node" için kısa), Linux'un sakladığı bir dosya hakkında bir takım niteliklerdir. Her dosya için bir inode vardır (bazı dosya sistemlerinde Linux, bilgilerin dosya sistemi etrafına yayılmasından dolayı kendi düğümlerini oluşturmak zorundadır). İnode, dosyanın sahibi, dosyanın büyüklüğü ve dosyayı açmasına izin verilenler gibi bilgileri depolar. Her inode ayrıca dosya sistemi bölümüne özgü bir sayı içerir; Bu inode tarafından açıklanan dosya için seri numarası gibidir.

Dentry

Bir dişçilik ("dizin girişi" için kısa), Linux çekirdeğinin dizinlerdeki dosya sıradüzenini takip etmek için kullandığı şeydir. Her dentry bir inode numarasını bir dosya adına ve bir ana dizine eşler.

zaman süper

Süper blok, bir dosya sistemindeki benzersiz bir veri yapısıdır (yolsuzluğa karşı korunmak için birden fazla kopya bulunmaktadır). Süper blok, hangi inode'un üst düzey dizin olduğu ve kullanılan dosya sisteminin türü olduğu dosya sistemi hakkında meta veriler tutar.


11

süper blok , dizin düğümü (veya inode ), dizin girişi (veya dişçilik ) ve son olarak, dosya nesnesi sanal dosya sisteminin (VFS) veya sanal dosya sistemi anahtarının bir parçasıdır . Bir VFS'nin amacı, istemci uygulamalarının farklı tipte beton dosya sistemlerine tek tip bir şekilde erişmelerini sağlamaktır.

VFS'deki belli başlı nesnelerin ilişkileri

görüntü tanımını buraya girin


Bir Inode , Unix / Linux dosya sistemindeki bir veri yapısıdır. Bir inode, normal bir dosya, dizin veya başka bir dosya sistemi nesnesi hakkındaki meta verileri depolar. Inode, dosyalar ve veriler arasında bir arayüz görevi görür. Bir inode, bir dosyaya, bir dizine veya başka bir nesneye sembolik bir bağlantıya başvurabilir. Benzersiz bir numara (i-numarası), ad, tarih, boyut ve okuma / yazma izinleri dahil olmak üzere dosyanın öznitelikleri ve dosyanın konumuna ilişkin bir işaretçi içerir. DOS / Windows dünyasındaki FAT tablosunun karşılığıdır.

Programlar, hizmetler, metinler, resimler vb . Hepsi dosyalardır . Giriş ve çıkış cihazları ve genellikle tüm cihazlar sisteme göre dosya olarak kabul edilir .

Süper blok , bir dosya sistemi hakkındaki üst düzey meta veriler için kullanılan bir kaptır. Süper blok, diskte (aslında, artıklık için diskte birden çok yer var) ve ayrıca bellekte bulunan bir yapıdır. Dosya sisteminin yönetim parametrelerini tanımladığı için (örneğin, toplam blok sayısı, boş bloklar, kök dizin düğümü), diskteki dosya sistemi ile başa çıkmanın temelini oluşturur.

Dentry, dosyalar ve İnodes arasındaki arayüzdür. Diş Hekimleri aynı zamanda daha hızlı erişim için en sık kullanılan dosyaları el altında tutan dizin önbelleklemede de rol oynamaktadır.

Kaynak


5

Basitlikte, dentry ve inode aynı şeydir, dosya ya da dizinin bir soyutlamasıdır. Dentry ve inode arasındaki farklar, dentry'nin dizine özgü işlemleri kolaylaştırmak için kullanılmasıdır, inode sadece dosya veya dizin hakkındaki bir meta veri topluluğudur. Superblock, dosya sisteminin soyutlanmasıdır.

struct file, linux çekirdeğinde, diğerleri (örneğin struct address_space) gibi yanlış adlandırılmıştır ve gerçek bir "dosya" nın (soyut / etc / passwd) bir soyutlaması değildir. Açık bir "dosya" ya da dizin anlamına gelir. Çekirdek struct filetarafından oluşturulur sys_open, bu nedenle bir işlem struct fileaynı dosya için çok fazla s olabilir .

Neden dişçiye ihtiyacımız var? Yol isminden (örn. / Etc / passwd) çeviriyi inode'a çevirmek için kullanılır. Linux çekirdeği, isimlerini değil, "dosya" ya da dizini değiştirmek için inode kullanır.


4

Bu terimlerin Linux'a özgü olmadığını, dosya sistemine özgü olduğunu unutmayın. Mevcut Unix ve Unix benzeri sistemler tarafından kullanılan çoğu dosya sistemi, süper blok ve inode deyimlerini tanımlayan orijinal Unix dosya sisteminden türetilir veya ilham alır. Linux ayrıca, en yaygın olan FAT olan süper blok ve / veya inode nosyonunun olmadığı birçok dosya sistemini de bağlayabilir. Bir diğeri, ZFS, süper blokları değil, überblockları kullanır.


Umarım bu yorumu çok uzun zaman sonra okursunuz. VFS'nin EXT2'nin inode'ları ve süper blokları ile ilgisi olmayan inode ve süper blokları olduğunu okudum. Yani, söylediklerini yanlış anlamamak, her Linux'un VFS'si sayesinde, hepsinin inode ve süper blok kullanması gerekiyor, değil mi?
CuriousKimchi,

1
@CuriousKimchi Burada aynı ada sahip olmalarına rağmen, diskte depolanan bilgilerin (superblock / inodes) ve çekirdek tarafından bir dosya sistemine ve dosyalarına erişmek için kullanılan yapıların birbirine karıştırılmaması gerekir. Her dosya sisteminde, diskte dosya sistemi özelliklerini tanımlayan bazı meta veriler vardır, bu meta veriler Linux VFS süper blok yapısını doldurmak için kullanılır. Benzer şekilde, dosyalar VFS altında bir çekirdek inode yapısına sahiptir. Temel dosya sistemleri inode nosyonundan yoksun olduğunda, bu yapı işletim sistemi tarafından anında oluşturulan sahte bir inode numarası içerir.
jlliagre
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.