Sabit bağlantılar neden yalnızca aynı dosya sistemi içinde geçerli?


22

Bu tanıtımı Mark Bates'un komut satırına okuyorum .

İlk bölümde, hard linklerin dosya sistemlerini kapsayamayacağını belirtiyor.

Sabit bağlantılar hakkında dikkat edilmesi gereken önemli bir nokta, yalnızca geçerli dosya sisteminde çalıştıklarıdır. Farklı bir dosya sistemindeki bir dosyaya sabit bağlantı oluşturamazsınız. Bunu yapmak için sembolik bağlar kullanmanız gerekir, Bölüm 1.4.3.

Sadece bir dosya sistemini biliyorum. Kökten ( /) başlayan . Sabit bağlantıların dosya sistemlerini kapsayamayacağı bu ifade bana bir anlam ifade etmiyor.

Unix dosya sistemlerindeki Wikipedia makalesi de yardımcı değildir.

Yanıtlar:


29

Umarım bunu sizin için anlamlı bir şekilde cevaplayabilirim. Linux'ta bir dosya sistemi, genellikle dosyalarınızı depoladığınız çeşitli yöntemlerden (aşk tercihi!) Biçimlendirilmiş bir bölümden oluşur. Sistem dosyalarınız veya kişisel dosyalarınız ... hepsi bir dosya sisteminde saklanır. Bu kısmı anlıyor görünüyorsun.

Ancak, sabit sürücünüzü birden fazla bölüme ayırmak için bölümlere ayırırsanız (Apple Pie'nin parçalara bölündüğünü düşünüyorsanız) veya ek bir sabit sürücü (belki de bir USB bellek çubuğu) ekleyin. Argüman uğruna, hepsinin üzerinde dosya sistemleri de var.

Bilgisayarınızdaki dosyalara baktığınızda, bölümünüzün dosya sistemindeki verilerin görsel bir sunumunu görürsünüz. Her dosya adı, inode adı verilene karşılık gelir; bu, verilerinizin sahnelerin ardında gerçekte yaşadığı yerdir. Sabit bağlantı, aynı inode'a işaret eden birden fazla "dosya adına" sahip olmanıza (daha iyi bir tanım eksikliği için) izin verir. Bu yalnızca, bu sabit bağlantılar aynı dosya sisteminde olduğunda çalışır. Bunun yerine sembolik bir bağlantı "dosya adını" gösterir; bu daha sonra verilerinizi tutan inode'a bağlanır. Ham yapıtımı bağışlayın ama umarım bu daha iyi açıklar.

image.jpg             image2.jpg
          \           /
           [your data]

burada, image.jpg ve image2.jpg her ikisi de doğrudan verilerinize işaret eder. İkisi de sert bağlantı. Ancak...

image.jpg    <-----------  image2.jpg
           \ 
             [your data]

Bu (kaba) örnekte, image2.jpg verilerinize işaret etmiyor, verilerinize link veren image.jpg ... 'ya işaret ediyor.

Sembolik bağlantılar, dosya sistemi sınırları boyunca çalışabilir (dosya çubuğunun usb çubuğunuz gibi takılı ve monte edilmiş olduğu varsayılarak). Ancak sert bir bağlantı olamaz. Diğer dosya sisteminizde ne olduğu veya verilerinizin nerede depolandığı hakkında hiçbir şey bilmiyor.

Umarım bu daha iyi anlaşmanıza yardımcı olur.


Teşekkürler. Farklı dosya bölümlerine "dosya sistemleri" dendiğini anlamadım.
Anton Paras

1
Bir bölümle yapabileceğiniz şeylerden biri üzerine bir dosya sistemi koymak, dosya sistemlerini ve bölümler ile yapabileceğiniz diğer şeyleri koyabileceğiniz başka yerler de vardır, ancak en yaygın seçenek budur.
Jasen

10
"/" İle başlayan bir dosya hiyerarşisi var. Monte edilmiş bir veya daha fazla dosya sistemine sahip olacak
mpez0

@ mpez0: Mesela, örneğin, chroot(2)veya gerçek konteynerle, birbiriyle ne yapacak bir şeyleri olmayan birden fazla hiyerarşiye sahip olabilirsiniz.
Kevin

@Kevin, chrootbir işlem ve onun soyundan gelenler için hiyerarşinin bir kısmını izole eder, ancak ebeveyn hala bir tam hiyerarşiye sahiptir. Konteynırlaştırma, bir VM'ye ne kadar yakın olduğuna bağlı olarak yapabilir. Fakat bir yorum ne kadar ayrıntıya yol açabilir? Teşekkürler,
mpez0 haz

23

Dosya sistemi dizin girişleri dosyalarını düzenlemek için oluşan bir dizin yapısı ile oluşur. Her bir dizin girişi bir dosya ismini bir inode ile ilişkilendirir .

Yumuşak bağlantılar ( sembolik ) veri içermeyen dizin girişleridir, başka bir girişi gösterir (aynı dosya sistemindeki veya bir dosya sistemindeki bir dosya veya dizin). Ve sivri uçlu dosyayı sildiğinizde sembolik bağlantı kullanılamaz hale gelir.

Sabit bağlantılar , dosya adını ve inode numarasını içeren dizin girişidir . Son sabit bağlantıyı kaldırdığınızda, dosyaya artık erişemezsiniz.

Yumuşak link ve hard link arasındaki fark

Sonuç:

As inode bir dosya sistemi nesneyi temsil etmek için kullanılan bir veri yapısıdır, bu dosya sistemine iç ve sen bir işaret edemez inode'un başka dosya sisteminin.

Bu yüzden, hard-linkler sadece aynı Dosya sistemi içinde geçerlidir, fakat soft-linkler (Sembolik link) sadece başka bir dizin girişine işaret ettiği için dosya sistemlerini kapsayabilir (dosya sisteminin arayüzü, dahili bir nesne değil).


1
Güzel özlü cevap.
dubkat

Başka bir dosya sistemi (diyelim USB), sembolik bağlantımızın dosya sistemimize bağlı olduğu aynı NAME adlı dosyaya sahipse ne olacak?
Josef Klimuk

@JosefKlimuk, yumuşak bir bağlantı bir yola işaret eder, diyelim /mnt/myfile. Eğer başka bir dosya sistemine bağlarsanız /mnt/. Yumuşak bağlantı, altındaki dosya sisteminin bir girişine çözümlenir /mnt/. Bu nedenle, dosya sistemini USB cihazınızdan taktıysanız /mnt, yumuşak bağlantı bu dosya sistemindeki bir girişi çözecektir.
Facundo Victor,

2

Kök dosya sistemi birkaç dosya sisteminden oluşabilir; /usr/localayrı bir bölüme monte edilebilir ve /homeağ bağlantılı bir diskte başka bir yerde bulunabilir. Bu durumda /usr/local/bin/git(örneğin) için sabit bir bağlantı dışında oluşturulamayabilir /usr/local, çünkü dosya sistemlerini kapsayacaktır .

Bunun nedeni düğüm ayrı ayrı tahsis olmasıdır /, /usr/localve /home(bu örnekte, tekrar) ve bir sabit bağlantıyı oluştururken gerçekten sadece bir inode için ek bir isim yapmak.


2

Sabit bağlantılar, hedeflerini canlı tutma etkisine sahiptir. Herhangi bir hard link erişilebilir olduğu sürece, sistem hedefinin serbest bırakılmamasını sağlayacaktır. Bu nedenle, belirli bir inode için sert bağlantılar içerebilecek tüm ortamların, sistemin kendisine herhangi bir referans olup olmadığını belirlemeye çalıştığı her zaman monte edilmesi gerekir.

İnode ömrünün genellikle referansları taramak yerine referans sayıları koruyarak belirlendiği göz önüne alındığında, birbirleri için bağlantıları bulunan iki veya daha fazla dosya sisteminin bağımsız olarak kullanılabileceği, ancak bu bağlantıların kullanılmasına gerek olmadığı sürece bazı şeyleri düzenlemek mümkün olabilir. sistemler arasında köprülü ve her ikisinde de fsck kullanmaya gerek olmadığı sürece. Bununla birlikte, inode sistemlerden birine zarar verirse, bu sistemi tekrar kullanışlı kılmanın tek yolu, her iki dosya sistemini referanslar için tarayabilecek bir fsck işlemi kullanmaktır. Bu kısıtlama nedeniyle, birbirine bağlı iki dosya sisteminin bağımsız olarak kullanılabilmesine izin vermek mümkün olsa da, bunu yapmanın faydaları büyük olasılıkla değerli hale getirmek için çok sınırlı olacaktır.


İyi nokta, ama iyi cevap veremeyecek kadar teğet.
Joe

@Joe: teknik zorluklar bir dizi empoze edecek çapraz dosya sistemlerine sabit bağlantıları izin, ancak bunların çoğu böylece neden herhangi zorlayıcı sebep var sorusunu gündeme, aşılabileceğine olmamalıdır olun. Hayatta kalma sorunu belirsiz görünebilir, ancak diğer sorunlardan farklı olarak, yalnızca bu tür bağlantıların kullanımına ciddi anlamsal kısıtlamalar getirerek çözülebilir, bu da onların değerini ciddi şekilde sınırlar.
supercat

İyi bir nokta. Bir dosya sistemi başka bir cihaza monte edilebilir ve değiştirilebilir, böylece inode ve linkler "senkronizasyondan" çıkabilir. Her dosya sistemi bir GUID'ye sahip olabilir ve bağlantı, inode'u dosya sistemleri arasında izlemek için bu GUID'i içerebilir. Ayrıca FS'de bir tür günlük kaydı olabilir ve ardından monte edildiğinde, ana bilgisayar sisteminin taraması gerekmeyecek, yalnızca günlüğü okuyabilir ve inode bağlantısı değişikliklerini "yakalayabilir" (Ne zaman temizleriz, gerçi?). Alt satırda, temel FS'nin önemsiz olmayan şekillerde değiştirilmesi gerekir ve yalnızca uyumlu dosya sistemlerinde çalışır.
Rolf

1

Her dosya sistemindeki dosyayı temsil etmek için tek bir inode numarası kullanılır. Tüm hard linkler inode numarasına göredir. Dosya sistemi referans bağlantısını buraya yazın .

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.