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?
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?
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.
Nah, ln -s
buat tautan simbolik, sedangkan mount --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 melakukannya ls /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 melakukannya ls /var/mount
, hal yang sama akan terjadi seolah-olah Anda melakukannya ls /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
.
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.
Selain jawaban lainnya. Sistem tidak mengizinkan tautan keras ke direktori:
# ln mydir mpoint
ln: `mydir': hard link not allowed for directory
Mount memungkinkan Anda membuat tautan seperti dua atau lebih nama untuk satu inode yang sama :
# mount -B mydir/ mpoint/
# ls -d -i *
807175 mpoint/ 807175 mydir/
(Satu dapat menemukannya membantu untuk snapshot-backup dengan rsync versi lama.)
Perhatikan juga bahwa pemasangan ini tidak lengkap:
# 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)
Jadi, mount masih membaca dan menulis walaupun saya meminta opsi ro (read only).
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 ...