Akses ke konten asli titik pemasangan

32

Pada NAS tanpa kepala saya, saya memiliki sdf1(kartu flash) terpasang /sementara /homesedang dipasang dari lv00(volume LVM yang didukung oleh perangkat lunak RAID). Untuk dapat mengakses mesin ketika RAID gagal, saya memiliki salinan kunci publik ssh saya, dll. /home/foo/.sshPada sistem file dari sdf1.
Untuk memperbarui file yang disembunyikan oleh dipasang /homesaya biasanya remount lv00di /mnt/home, melakukan apa yang harus saya lakukan, dan kemudian bergerak lv00kembali di tempat.
Apakah ada cara untuk mencapai hal ini tanpa melepasnya /home?

Janus
sumber

Jawaban:

44
mkdir /mnt/root
mount --bind / /mnt/root
ls /mnt/root/home/foo/.ssh

Selama Anda menggunakan --bind(tidak seperti --rbind), Anda mendapatkan klon mount tanpa hal-hal yang terpasang di atasnya.

singkat
sumber
Sempurna! Saya bermain-main dengan ide mount --bind, tetapi hanya mendapat beberapa ide berbelit-belit yang pasti akan hancur ketika saya membutuhkannya. Ini melakukan persis apa yang saya butuhkan dan bahkan bisa masuk sebagai mount permanen. Terima kasih
Janus
itu adalah dup dari unix.stackexchange.com/questions/49345/…
poige
Apakah perlu mengedit jawaban ini untuk memasukkan fakta bahwa Anda harus mengikat-mount tingkat di atas direktori yang telah Anda liput dengan mount, seperti yang tercakup dalam jawaban lain? Jawaban ini sebaliknya lebih baik, karena lebih pendek dan karenanya lebih mudah dibaca dengan cepat!
Michael Firth
5

Saya sudah mencoba untuk mencapai sesuatu yang mirip, tapi ephemient jawaban 's tidak menjelaskan semantik metode ini. Itu gagal untuk saya dan saya mengajukan pertanyaan yang hampir sama sebelumnya di unix.SE. Setelah komentar saya menemukan jawabannya sendiri dan menjawabnya. Ini adalah versi edit dari jawaban saya yang cocok dengan konteks ini di sini. Saya menghapus pertanyaan saya yang lain (dan jawaban) untuk yang ini.

Inilah yang saya coba lakukan:

Contoh kasus

Gunung:

/dev/sda1  on /     type ext4 (rw)
/dev/sdb1  on /data type ext4 (rw)
/data/home on /home type none (rw,bind)

Setelah pemasangan /saya punya folder /home/joeuntuk pengguna joe. Setelah lokasi lain dipasang ( /data) saya memiliki set lengkap folder rumah yang tersedia, jadi saya mengikat-mount ke tempatnya ( /data/home on /home). Ada folder /data/home/joe, jadi selama pemasangan /dev/sdb1berhasil, dia akan mendapatkan konten /data/home/joe, jika tidak dia akan kembali ke /home/joe(aktif /dev/sda1!).

Ketika berhasil, bagaimana saya bisa mengakses konten asli /home/joe(on /dev/sda1!) Alih-alih dari bind-mount ke tempatnya /data/home/joe?

Larutan

Berdasarkan komentar dari komentar Patrick pada pertanyaan saya dan solusinya dengan singkat (jawaban diterima di sini), saya datang dengan yang berikut ini.

Hal ini rupanya mungkin untuk mount --bind(atau mount -o bind) yang folder induk ( ini adalah bagian penting ) dari mengikat-gunung di tempat lain dan dengan demikian mengakses isi asli. Jadi untuk contoh kasus saya, alih-alih mencoba:

mount --bind /home/joe /home/joe/underneath
# or ...
mount --bind /home /home/joe/underneath

(yaitu me-mount lokasi yang sudah diikat-mount di tempat lain) saya harus:

test -d /.ROOT || mkdir /.ROOT
mount --bind / /.ROOT
mount --bind /.ROOT/home/joe /home/joe/underneath

Jadi inilah yang dimaksud Patrick dalam komentarnya

Kecuali jika Anda melakukan remounting /(root), jawaban itu akan berfungsi dengan baik.

Selama Anda memiliki folder induk ke lokasi bind-mount yang tersedia, itu akan berfungsi, meskipun dengan satu tipuan seperti yang ditunjukkan di atas. Jika Anda mengikat-mount sesuatu di atas /Anda kurang beruntung, karena tidak ada folder induk untuk /.

0xC0000022L
sumber
Memasang folder induk adalah bagian kunci yang saya lewatkan. Terima kasih.
Aidan
1

Anda dapat memindahkan mount ke lokasi baru tanpa melepasnya, menggunakan mount --move:

$ mount --move /home /mnt/home
do stuff with the local /home
$ mount --move /mnt/home /home
Michael Mrozek
sumber
1
Terima kasih Michael. Ini memiliki kelemahan yang sama dengan membuat / rumah tidak dapat diakses oleh pengguna lain.
Janus