Saya mencoba memahami perbedaan antara menggunakan ln -s
dan mount --bind
. Dalam skenario dasar saya dapat menggunakan keduanya untuk mengakses satu direktori dari tempat lain. Dalam skenario apa keduanya akan berperilaku berbeda?
command-line
mount
symbolic-link
Łukasz
sumber
sumber
rm -r
amount --bind
. Dengan aln
, ia menghapus tautan, sedangkan untuk a--bind
, ia memiliki efek yang sama dengan menjalankanrm -r
target. Tidak bagus, seperti yang saya temukan sesaat sebelum membangun kembali salah satu server saya ...Jawaban:
Mereka akan berperilaku berbeda dalam setidaknya dua kasus:
A
) yang memiliki sesuatu yang lain (B
) dipasang pada mereka. Tautan akan menampilkan konten target pemasangan (B
) alih-alih yang asli (A
).Selain itu, Anda dapat mengikat mount direktori atau file pada direktori atau file yang ada, menutupi konten asli (membuat konten asli tidak dapat diakses kecuali yang asli diikat dipasang di tempat lain). Tautan simbolik mensyaratkan bahwa dokumen asli dipindahkan atau dihapus.
sumber
Nah,
ln -s
buat tautan simbolik, sedangkanmount --bind
buat gunung.Tautan simbolik adalah jenis file khusus. Jika Anda melakukannya
ln -s /var/target /var/link
, maka/var/link
akan ada file yang berisi path "/var/target
" di dalamnya. Satu-satunya perbedaan antara tautan simbolik dan file biasa adalah ketika sebuah program mencoba melakukan operasi pada tautan simbolik, operasi biasanya dilakukan pada target alih-alih file. Jadi sekarang jika Anda melakukannyals /var/link
,ls
program akan mencoba untuk mendapatkan daftar direktori untuk/var/link
, tetapi sebenarnya akan mendapatkan daftar direktori sebagai/var/target
gantinya.Tautan simbolik masih berupa file. Mereka dapat diubah namanya dan dihapus dan semua jazz itu. Perhatikan bahwa Anda tidak dapat membuat tautan simbolik (atau file biasa, dalam hal ini) yang disebut
/var/link
jika sudah ada file yang dipanggil/var/link
; Anda harus menyingkirkannya terlebih dahulu.Mount bukanlah file; itu adalah catatan yang disimpan dalam memori kernel. Jika Anda melakukannya
mount --bind /var/target /var/mount
, kernel akan mencatat fakta yang/var/mount
sekarang menjadi nama baru untuk/var/target
. (Saya tidak tahu detailnya; khususnya, saya tidak tahu apakah memasang sesuatu di subdirektori/var/target
akan membuatnya muncul/var/mount
juga, atau mengapa atau mengapa tidak. Pengeditan untuk jawaban ini akan dihargai.) Jadi sekarang jika Anda melakukannyals /var/mount
, hal yang sama akan terjadi seolah-olah Anda melakukannyals /var/target
, karena/var/mount
dan/var/target
merupakan direktori yang sama.Mount bukan file. Saya tidak tahu apa yang akan terjadi jika Anda mencoba mengubah nama atau menghapus
/var/mount
. Perhatikan bahwa Anda tidak dapat memasang apa pun/var/mount
kecuali jika sudah ada direktori di/var/mount
.sumber
ln -s ../../myfile .
. Jika Anda memindahkannya ke direktori lain, itu akan menunjuk ke tempat lain karena itu adalah tautan relatif. Ini bisa berguna jika Anda perlu membuat cadangan sub-pohon dan masih memiliki tautan yang berfungsi di cadangan.Selain itu, ln -s akan selamat dari reboot; sedangkan mount --bind tidak akan, kecuali jika Anda mengedit / etc / fstab untuk membuatnya persisten.
sumber
Selain jawaban lainnya. Sistem tidak mengizinkan tautan keras ke direktori:
Mount memungkinkan Anda membuat tautan seperti dua atau lebih nama untuk satu inode yang sama :
(Satu dapat menemukannya membantu untuk snapshot-backup dengan rsync versi lama.)
Perhatikan juga bahwa pemasangan ini tidak lengkap:
Jadi, mount masih membaca dan menulis walaupun saya meminta opsi ro (read only).
sumber