Jadi saya mencoba memahami bagaimana cara kerja mount namespace Linux. Jadi, saya melakukan sedikit percobaan dan membuka dua terminal dan menjalankan yang berikut:
Terminal 1
root@goliath:~# mkdir a b
root@goliath:~# touch a/foo.txt
root@goliath:~# unshare --mount -- /bin/bash
root@goliath:~# mount --bind a b
root@goliath:~# ls b
foo.txt
Terminal 2
root@goliath:~# ls b
foo.txt
Kenapa mount terlihat di Terminal 2? Karena ini bukan bagian dari mount namespace, saya berharap direktori tersebut tampak kosong di sini. Saya juga mencoba melewati -o shared=no
dan menggunakan --make-private
opsi dengan mount
, tetapi saya mendapat hasil yang sama.
Apa yang saya lewatkan dan bagaimana cara menjadikannya benar-benar pribadi?
linux
namespace
bind-mount
Kesalahan fatal
sumber
sumber
man mount
.--make-private
bukan itu yang saya inginkan. Tapi, bukankah itu titik mount namespaces (bahwa mereka tidak lebar sistem)?Jawaban:
Jika Anda menggunakan distribusi berbasis sistemd dengan
util-linux
versi kurang dari 2.27, Anda akan melihat perilaku tidak intuitif ini. Ini karenaCLONE_NEWNS
flag-flag pendukung sepertishared
tergantung pada pengaturan di kernel. Pengaturan ini normalprivate
, tetapi systemd mengubahnya keshared
. Padautil-linux
2.27, sebuah tambalan dibuat yang mengubah perilaku default dariunshare
perintah untuk digunakanprivate
sebagai perilaku propagasi default menjadi lebih intuitif.Larutan
Jika Anda menggunakan sistem systemd dengan <2.27
util-linux
, Anda harus mengount ulang sistem file root setelah menjalankanunshare
perintah:Jika Anda menggunakan sistem systemd dengan> = 2.27
util-linux
, itu harus berfungsi seperti yang diharapkan dalam contoh yang Anda berikan dalam pertanyaan Anda, kata demi kata, tanpa perlu untuk mengount ulang. Jika tidak: lulus--propagation private
denganunshare
perintah untuk memaksa penyebaran mount namespace untuk menjadi pribadi.sumber
ini tidak berfungsi di ubuntu, (15.04 dan 14.04). itu bekerja pada fedora. dan untuk fedora. apakah Anda perlu --membuat pribadi atau tidak, Anda juga dapat memeriksa
jika dibagikan, itu berarti beberapa namespace lain masih bisa melihat tunggangan itu. Maka itu adalah masalah terkait systemd. Anda dapat menggunakan --make-private untuk membuatnya bekerja
sumber