ln -s vs mount --bind


19

Apakah ada perbedaan praktis antara menggunakan ln -satau mount --bind?

Saya ingin memindahkan beberapa folder ke partisi lain, tanpa mengubah pengaturan daemon mereka, dan bertanya-tanya pendekatan apa yang harus saya ambil.

Saya lebih suka ln -skarena memerlukan pengaturan minimum (tidak ada /etc/fstabmodifikasi), tetapi mungkin ada alasan mengapa itu tidak umum?

Jawaban:


25

Yeah. Jika Anda menjalankan ln -sAnda membuat tautan simbolik, yang merupakan inode yang menunjuk ke objek sistem file tertentu, itulah sebabnya symlink dapat melintasi sistem file dan tautan keras tidak dapat: tautan keras tidak memiliki inode sendiri.

Jika Anda memasang sistem file dengan --bind, Anda membuat titik mount kedua untuk perangkat atau sistem file.

Jika Anda membayangkan symlink sebagai pengalihan, maka bayangkan --bindsistem file yang terpasang sebagai membuat gateway lain ke data.

Symlinks dan bind mounts adalah ballgame yang sangat berbeda.

The --bindgunung tampaknya sedikit lebih kuat untuk saya dan mungkin sedikit lebih cepat daripada bekerja dengan symlink. Di sisi lain, tidak ada kelemahan serius untuk menggunakan symlink, karena hit kinerja akan kecil (jika memang ada).

Sunting : Saya telah memikirkan hal ini, dan kinerja yang dicapai mungkin sedikit lebih besar dari yang saya kira sebelumnya. Jika Anda memiliki aplikasi yang membaca banyak file berbeda, maka setiap file baru yang dibuka akan membutuhkan tambahan membaca. Beberapa penelitian di sini menunjukkan bahwa asumsi saya benar, jadi jika Anda memiliki aplikasi berat IO yang berjalan di sana, pertimbangkan --bindopsi untuk memasang di atas solusi symlink.

Alasannya tidak umum, mungkin fakta bahwa symlink terlihat dalam ls, sedangkan bind mount hanya terlihat ketika melihat / proc / mounts atau / etc / mtab (yang dilakukan oleh perintah mount, jika itu adalah dieksekusi tanpa parameter). Selain itu, saya tidak berpikir ada masalah. Saya akan tertarik jika ada.

Penambahan : masalah lain ln -sadalah bahwa untuk beberapa aplikasi, ketika jalur mendapat dereferensi, itu dapat menyebabkan aplikasi untuk menolak jika "mengharapkan" item tertentu berada di tempat tertentu.


Terima kasih atas penjelasannya! Sebuah pertanyaan tindak lanjut kecil - parameter apa --rbind sebenarnya dan bagaimana cara menggunakannya? Dari manual sepertinya parameter yang mendukung pemasangan sub-mount di pohon yang dipasang apakah ini benar? Juga, apakah --rbind cukup, atau saya perlu melakukan --bind lalu --rebind? Terima kasih lagi.
SyRenity

2
mount, ketika dipanggil tanpa argumen, mencetak konten /etc/mtab, yang memiliki informasi sedikit berbeda dari /proc/mounts. (Secara khusus, /proc/mounts(symlink ke /proc/self/mounts) selalu menunjukkan titik mount yang terlihat oleh proses membacanya.)
grawity

1
@wzzrd - dari FAQ "Yang terbaik - edit dan perbaiki pertanyaan dan jawaban yang ada!" :) .. ini tidak berarti apa-apa untuk jawaban Anda - ini adalah peningkatan kecil dengan informasi tambahan, di mana Anda akan menerima perwakilan tambahan jika / ketika dipilih :)
warren

1
@warren, sudahlah, aku tidak marah :) itu hanya Anda menambahkan sesuatu yang saya tidak tahu, sehingga terasa agak aneh;)
wzzrd

2
@wzzrd - tidak bermaksud menginjak kaki apa pun :) .. masalah khusus aplikasi adalah sesuatu yang saya alami dengan produk utama yang saya gunakan
warren

6

Salah satu perbedaan besar antara ln -sdan bind mount adalah bahwa Anda dapat menggunakan bind mount untuk "memodifikasi" sistem file read-only. Misalnya, jika ada CD yang dipasang /mnt/application, dan Anda ingin mengganti /mnt/application/badconfigfile.confdengan versi yang benar, Anda bisa melakukan ini:

mount -o bind /path/to/correct/file.conf /mnt/application/badconfigfile.conf

Tidak mungkin untuk mempengaruhi perubahan yang sama menggunakan symlink karena Anda tidak dapat memodifikasi sistem file target.

Ini juga dapat digunakan untuk pengaruh yang baik jika Anda mendistribusikan rangkaian perangkat lunak yang sama melalui NFS (atau semacam filesystem cluster), dan Anda ingin membuat perubahan khusus host pada satu sistem. Anda cukup menggunakan bind mount pada sistem target untuk mengganti file atau direktori yang diperlukan.


Penghemat sakit kepala! (kasus yang jarang terjadi, tetapi perlu diingat untuk momen khusus itu)
Jonathan Komar

2

Perbedaan praktis # 1 untuk saya antara ln -s dan mount --bind:

vsftpd tidak memungkinkan untuk menelusuri direktori melalui tautan simbolik, tetapi memungkinkan ketika dipasang.

Saya tidak tahu apa daemon yang Anda gunakan, tetapi mungkin berperilaku sama.


1

Orang mungkin mencatat bahwa sebagai konsekuensi dari pengikatan ke mount, yang merupakan pengikatan itu sendiri, yang kemudian rebound, pengikatan asli tetap utuh, dengan asumsi segala sesuatu secara fisik tetap terhubung.

Artinya, jika mengikat A ke B dan mengikat B ke C, dan kemudian mengikat D ke B, C masih akan terikat ke A. Itu mungkin yang Anda inginkan, atau tidak. Jika seseorang menginginkan C untuk mengikuti B maka remount menggunakan target yang sama, yaitu mount -o remount B C, atau gunakan --rbindsebagai gantinya. Tidak ada --rebindpilihan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.