Apa perbedaan antara ln -s dan mount --rbind?

8

Apa perbedaan antara:

ln -s /mnt/extra/home /

dan

mkdir /home
mount --rbind /mnt/extra/home /home
NerdOfLinux
sumber
1
lnmembuat tautan; khususnya, ln -smembuat tautan simbolik. mountme-mount sistem file ke direktori. Mereka tidak memiliki kesamaan.
AlexP
Tetapi mount --rbind /mnt/extra/homesudah menjadi direktori yang dipasang
NerdOfLinux
Masukkan itu sebagai jawaban dan saya akan menandai pertanyaan ini sebagai dipecahkan :)
NerdOfLinux

Jawaban:

13

mount --rbindmembuat bind-mount rekursif; artinya, hierarki sistem file yang dipasang /mnt/extra/homejuga akan dapat diakses /home.

Dalam praktiknya perbedaan utama antara ln -ssolusi dan mount --rbindsolusinya adalah bahwa with ln -s /homeadalah symlink sedangkan dengan mount --rbinditu adalah direktori; ini mempengaruhi alat-alat seperti find, df, test/ [dll

Juga, ln -sakan gagal jika /homeada, sementara mount --rbindakan gagal jika tidak ada, atau itu bukan direktori kosong.

Komentar Mark di bawah ini juga penting: ln -smemerlukan sistem file yang dapat ditulis untuk membuat symlink.

AlexP
sumber
7
Perbedaan besar adalah bahwa ln -smemodifikasi sistem file, sementara mount --rbindtidak. Ini berarti Anda dapat memasang direktori home pada root read-only (mis. CD boot), tetapi Anda tidak dapat membuat tautan simbolis di dalamnya.
Mark
3
--binddan --rbindtidak peduli jika direktori target saya kosong, mereka hanya memasang "di atas" file apa pun yang ada, membuat mereka tidak dapat diakses
Xen2050
7

Dalam hal ini baik bind mount dan link simbolik akan bekerja sama untuk sebagian besar tujuan, tetapi mereka memiliki perbedaan penting.

Tautan simbolik sedikit lebih ringan. Anda dapat memiliki ratusan atau ribuan tautan simbolik tanpa menjadi masalah manajemen. Mereka duduk di sistem file daripada membutuhkan pengaturan tingkat sistem khusus.

Tautan simbolik dapat dicadangkan dan disalin dengan benar oleh alat-alat seperti cp dan rsync. Artinya, alat dapat mengenali dan menyalin tautan simbolik, memastikan bahwa pada restorasi di tempat lain tautan dikembalikan dan menunjuk ke tujuan yang benar. Semuanya akan berfungsi "dengan benar" secara default. Sebaliknya, ketika mencadangkan atau menyalin bind mount mount akan diperlakukan secara transparan, menyebabkan file itu sendiri akan disalin, yang dapat menyebabkan duplikasi jika Anda juga mendapatkan file yang sama di lokasi lain, dan memerlukan kerja ekstra jika Anda ingin untuk mereplikasi bind mount di tujuan.

Tautan simbolis dapat dimodifikasi atau dihapus oleh pengguna mana pun yang memiliki akses ke tautan, sehingga mudah membuatnya hanya pengguna super, atau membukanya untuk pengguna tertentu. Bind mounts hanya dapat diatur atau dimodifikasi oleh superuser.

Jika ini terdengar seperti dukungan tautan simbolik yang bersinar, itu benar. Mereka adalah cara yang lebih mudah menghubungkan antara file dan direktori. Anda akan menggunakan bind mounts hanya untuk situasi di mana tautan simbolis tidak berfungsi, yang mungkin lebih sedikit situasi daripada yang Anda pikirkan. Sebagian besar alat, termasuk cadangan dan alat sinkronisasi, memiliki perilaku default yang masuk akal untuk tautan simbolik dan penanganannya terhadap tautan simbolik dapat dikonfigurasi. Bind mounts transparan untuk alat-alat tersebut sehingga Anda kehilangan fleksibilitas itu dan mungkin kehilangan perilaku yang masuk akal (misalnya seperti yang disebutkan di atas, duplikasi direktori dalam cadangan Anda).

thomasrutter
sumber
0

Satu lagi perbedaan adalah bahwa tautan simbolik adalah simbolis , yaitu hanya mereferensikan path - string karakter, dan itu ditereferensi setiap kali Anda membuka subdirektori / file di path target. Sebaliknya, mount --rbindberperilaku lebih seperti tautan keras, yang jalurnya tidak dievaluasi ulang pada setiap dereferensi.

Ini membuat perbedaan dalam beberapa skenario seperti chroot. Misalnya vsftpd chroot ke direktori home dari akun pengguna FTP yang Anda masuki. Dengan demikian, jika Anda memasukkan symlink ke direktori itu, vsftpdtidak akan dapat melakukan dereferensi, dan dengan demikian target tidak akan dapat diakses melalui FTP. Jika Anda melakukannya mount --rbind, maka vsftpdhanya akan mengakses subtree itu seolah-olah benar-benar ada di sana, sama seperti ketika Anda menghubungkan file di sana.

Ruslan
sumber