Neden inode tablosu genellikle yeniden boyutlandırılamıyor?


19

Unix dosya sistemlerinde genellikle bir inode tablosu bulunur ve bu tablodaki giriş sayısı genellikle dosya sistemi oluşturulduğu sırada sabitlenir. Bu bazen bol disk alanı olan kişilerin boş alan olmadığı konusunda kafa karıştırıcı hata mesajları almasına yol açar ve sorunun ne olduğunu anladıktan sonra bile, bu konuda ne yapmak için kolay bir çözüm yoktur.

Ancak bana göre sistemdeki tüm kullanıcılara ve sistem yöneticilerine tamamen şeffaf bir şekilde talep üzerine inot tahsis ederek bu karmaşadan kaçınmanın çok cazip olacağı anlaşılıyor. Şirin saldırılara giriyorsanız, inode tablosunun kendisini bir dosya haline getirebilir ve böylece diskte boş alan bulan zaten sahip olduğunuz kodu yeniden kullanabilirsiniz. Şanslıysanız, açıkça bu sonuca ulaşmaya çalışmadan, dosyaların yakınındaki düğümlerle bile karşılaşabilirsiniz.

Ama kimse (bildiğim) aslında bunu yapmaz, bu yüzden muhtemelen kaçırdığım bir yakalama vardır. Ne olabileceği hakkında bir fikrin var mı?


4
NTFS'deki Ana Dosya Tablosunun öncüsü olan VMS'de Ana Dosya Dizini ve Dosya Dizini-11'i yeniden keşfettiniz.
JdeBP

MFT'nin öncüsünü yeniden icat ettim? Güzel!
Mark VY

Yanıtlar:


26

Diyelim ki inode tablosunu bir dosya haline getirdiniz; o zaman bir sonraki soru ... bu dosya hakkındaki bilgileri nerede saklıyorsunuz? Bu nedenle, bir MS-DOS bölüm tablosu gibi "gerçek" inodes ve "genişletilmiş" inodes gerekir. Verilen, sadece bir taneye ihtiyacınız olacak (veya belki birkaçına - örneğin, günlüğünüzün bir dosya olması için). Ama aslında özel durumlar, farklı kodlar olurdu. Bu dosyadaki herhangi bir bozulma da felaket olur. Günlüklemeden önce, örneğin gücün aşırı derecede hasar gördüğünde yazılan dosyalar için yaygın olduğunu düşünün. Elektrik kesintisi / çökme / vs'ye karşı dosya işlemlerinizin çok daha sağlam olması gerekir . olduğundan daha fazla, örneğin ext2.

Geleneksel Unix dosya sistemleri daha basit (ve daha sağlam) bir çözüm buldu: her X bloğuna bir inode bloğu (veya bir grup blok) koyun. Sonra onları basit aritmetik olarak bulursunuz. Tabii ki, daha fazla eklemek mümkün değildir (tüm dosya sistemini yeniden yapılandırmadan). Güç kesildiğinde yazdığınız inode bloğunu kaybetseniz / bozsanız bile, bu sadece birkaç inode kaybeder - dosya sisteminin önemli bir kısmından çok daha iyi.

Daha modern tasarımlar B-ağacı varyantları gibi şeyleri kullanır . Btrfs, XFS ve ZFS gibi modern dosya sistemlerinde inode sınırları yoktur.


2
"İnode sınırlarından muzdarip olma" demek, yeni inode'ların tamamen perde arkasında tahsis edildiği anlamına mı geliyor, yoksa birinin "şimdi-lütfen-lütfen-genişlet" gibi bir komut çalıştırması mı gerekiyor?
Mark VY

3
@MarkVY tamamen perde arkasında (eğer inodes gerçekten kullanılıyorsa).
derobert

Tamam, bu yüzden bilgim zamanın çok gerisinde. Ayrıntılı cevap için teşekkür ederim. Güç kaybı veya benzeri durumlarda ne olacağını hiç düşünmemiştim. "Dosyaya ekle" dosya sisteminde zaten atomik bir işlem olmadığı sürece benim sevimli kesmek oldukça tehlikelidir. Eski günlerde oldukça nadir olduğunu iddia edersiniz.
Mark VY

Ben XFS'in ve btrfs hatırlamak çok ZFS'yi çok - bazen hafif dosya sistemi yolsuzluk muzdarip? Bazıları için bir risk değildir, ancak önemli veriler ve dinamik ayırmanın maliyeti için bir risk olabilir. Bu mağazadaki XFS için, anlaşma sorunu, bir dosya sistemini herhangi bir yolla küçültmenin tam bir yetersizliğiydi.
user2066657

Btrfs inode sınırlarından muzdarip olmayabilir, ancak benzer şekilde kafa karıştırıcı semptomlara neden olan tamamen farklı bir hatadan muzdariptir (temel olarak, blok gruplarının verimsiz kullanımı nedeniyle hala bol miktarda veri alanına sahipken meta veri alanı tükenir). Bu, yalnızca dfkullanılabilir alanın çok fazla olduğunu bildirdiğinde disk dolu hatalarını bildirmesine neden olmakla kalmaz , aynı zamanda bir dosyayı silmek meta veri alanı ayırmayı gerektirdiğinden dosyaları silerek düzeltilemez.
Mark

17

Birçok dosya sisteminde dinamik olarak ayrılabilir bir inode tablosu (veya onun ahlaki eşdeğeri) vardır (XFS, BTRFS, ZFS, VxFS ...)

Orijinal Unix UFS'de dosya sistemi oluşturma zamanında sabitlenmiş inode'lar vardı ve ondan türetilen dosya sistemleri (Linux EXT, Solaris UFS) genellikle şemaya devam etti. Sağlam ve uygulanması daha kolaydır. Bu kadar çok kullanım örneği iyi bir seçimdir, sadece bir sorunun önlenmesi için yeni bir dosya sistemi tasarlamak kolay değildir.


Bununla birlikte, bilgi işlemde, haklı çıkması kolay olmayan problemleri çözen insanlar tarafından çok fazla ilerleme kaydedilmiştir.
user253751

2
Ama aynı zamanda, çözülmesi kolay olmayan çözümlerde çok ilerleme kaydedildi :) Erken "karmaşık" dosya sistemleri - NT dönemi NTFS, reiserfs - başarısız olduklarında felaketle başarısız
olma yoluna sahiplerdi

6

Düğümleri dinamik olarak ayıran dosya sistemleri vardır: başımın üstünden, en azından Veritas VxFS (= HP-UX'in varsayılan dosya sistemi ve Solaris'te bulunan seçeneklerden biri) ve XFS (RHEL 7'deki standart dosya sistemi türü) çalışıyor bu şekilde. Btrfs ve IBM'in JFS'si de.

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.