Ln -s ve mount --bind arasındaki fark nedir?


36

Ben kullanarak arasındaki farkı anlamaya çalışıyorum ln -sve mount --bind. Temel senaryoda, ikisini de bir dizine başka bir yerden erişmek için kullanabilirim. Hangi senaryolarda bu ikisi farklı davranacak?


7
Ben karşı uyarmalıdır rm -rbir üstünde mount --bind. A ile lnbağlantıyı kaldırır, a için ise hedef üzerinde --bindçalışanla aynı etkiye sahiptir rm -r. Sunuculardan birini yeniden kurmadan kısa süre önce bulduğum kadar iyi değil ...
Mark K Cowan


@JohnnyQ Dizinler arasında bağlantı kurulamadı
Mark K Cowan

Yanıtlar:


33

En az iki durumda farklı davranacaklar:

  • Bir chroot'ta , link hedefi chroot'un dışındaysa link ölmüş olur. Bir bağlama montajı hala erişilebilir olacak.
  • Bazı programlar sembolik linkler ile gerçek dizinler veya dosyalar arasında ayrım yapabilir. Çok az (varsa) bir dizin veya dosya ile üzerine monte edilmiş olanı ayırt edebilir. Bu, ayrıca üzerine monte edilmiş Abaşka bir şeyin ( B) bulunduğu bir şeyin ( ) sembolik bağlarına uzanır . Bağlantı B, orijinal ( A) yerine mount target ( ) içeriğini gösterir .

Ayrıca, bir dizini veya dosyayı mevcut bir dizine veya dosyaya bağlayarak orijinal içeriği maskeleyebilirsiniz (orijinal başka bir yere monte edilmediği sürece orijinal içerikleri erişilemez duruma getirir). Sembolik bir bağlantı, orijinalin taşınmasını veya silinmesini gerektirir.


16

Eh, ln -ssembolik bir bağlantı mount --bindoluştururken oysa bir bağ oluşturur.

Sembolik bir bağlantı özel bir dosya türüdür. Bunu yaparsanız ln -s /var/target /var/link, içinde /var/link" /var/target" yolunu içeren bir dosya olacaktır . Sembolik bir link ile normal bir dosya arasındaki tek fark, bir program sembolik bir link üzerinde bir işlem yapmaya çalıştığında, işlemin genellikle dosya yerine hedef üzerinde gerçekleştirilmesidir. Yani şimdi yaparsanız ls /var/link, lsprogram için bir dizin listesi almaya çalışacak /var/link, ancak aslında bunun için bir dizin listesini alacak /var/target.

Sembolik bağlantılar yine de sadece dosyalardır. Yeniden adlandırılabilir ve silinebilir ve tüm bu caz. Aradığınız (ya da bu konuda sıradan bir dosya,) sembolik bir bağlantı oluşturmak olamayacağını Not /var/linkzaten adlı bir dosya varsa /var/link; Önce ondan kurtulman gerekir.

Bağlama bir dosya değil; Çekirdeğin hafızada tuttuğu bir sicil. Bunu yaparsanız mount --bind /var/target /var/mount, çekirdek /var/mountşimdi yeni bir isim olduğu gerçeğini kaydeder /var/target. (Ayrıntıları bilmiyorum; özellikle, bir alt dizine bir şey yerleştirmenin /var/targetde gösterilmesini sağlayacağını mı /var/mountyoksa neden veya neden olmadığını mı bilmiyorum. Bu cevaba yapılan düzenlemeler takdir edilecektir.) bunu yaparsanız ls /var/mount, aynı şey yaptığın gibi olur ls /var/target, çünkü /var/mountve /var/targetaynı dizin vardır.

Bağlar dosya değil. Yeniden adlandırmaya veya silmeye çalışırsanız ne olacağını bilmiyorum /var/mount. Eğer bir şey monte edemez Not /var/mount sürece zaten bir dizin var /var/mount.


1
Mount --bind öğesini kullanmadım, ancak bunun gibi bir sembolik bağlantının davranışını kopyalayabileceğinden şüpheliyim ln -s ../../myfile .. Bunu başka bir dizine taşırsanız, göreceli bir bağlantı olduğundan başka bir yere işaret eder. Bir alt ağacı yedeklemeniz gerekiyorsa ve yine de bağlantıların yedeklemede çalışmasını istiyorsanız, bu yararlı olabilir.
Joe,

10

Ek olarak, ln -s yeniden başlatmaya devam eder; mount --bind bunu kalıcı kılmak için / etc / fstab dosyasını düzenlemediğiniz sürece yapmaz.


2

Diğer cevaplara ek olarak. Sistem, dizine sabit bağlantı izin vermiyor:

# ln mydir mpoint
ln: `mydir': hard link not allowed for directory

Bağlama, aynı bağlantı düğümü için iki ya da daha fazla isim gibi sert bağlantılar oluşturmanıza izin verir :

# mount -B mydir/ mpoint/
# ls -d -i *
807175  mpoint/  807175  mydir/

(Eski rsync sürümü ile anlık görüntü yedeklemesi için yardımcı olabilir.)

Ayrıca, bu bağlantının tamamlanmadığını unutmayın:

# mount -B -oro mydir/ mpoint/
mount: warning: mpoint/ seems to be mounted read-write.
# mount | grep mpoint
/root/learn/mydir on /root/learn/mpoint type none (rw,bind)

Bu nedenle, ro seçeneği sorduğum halde, hala okuma ve yazma işlemi yapılıyor (salt okunur).

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.