Acceso a los contenidos originales del punto de montaje.

32

En mi NAS sin cabeza tengo sdf1(una tarjeta flash) montada como /mientras /homeestá montada desde lv00(un volumen LVM respaldado por un RAID de software). Para poder acceder a la máquina cuando falla el RAID, tengo una copia de mi clave pública ssh, etc. en /home/foo/.sshel sistema de archivos de sdf1.
Para actualizar los archivos que están ocultos por el montado /homenormalmente volver a montar lv00en /mnt/home, hacer lo que tengo que hacer, y luego pasar lv00en su lugar.
¿Hay alguna manera de lograr esto sin desmontar /home?

Janus
fuente

Respuestas:

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

Mientras lo use --bind(en lugar de --rbind), obtendrá un clon de la montura sin las cosas montadas encima.

efímero
fuente
¡Perfecto! Estaba jugando con la idea de mount --bind, pero solo obtuve algunas ideas intrincadas que seguramente se romperían cuando lo necesitara. Esto hace exactamente lo que necesito e incluso puede entrar como una montura permanente. Gracias
Janus
¿Vale la pena editar esta respuesta para incluir el hecho de que tiene que enlazar-montar un nivel por encima del directorio que ha cubierto con una montura, como se explica en la otra respuesta? Por lo demás, esta respuesta es mejor, porque es más corta y, por lo tanto, más fácil de leer rápidamente.
Michael Firth
5

Intenté lograr algo similar, pero la respuesta de Ephemient no explicó la semántica del método. Falló para mí y, por lo tanto, hice la misma pregunta anteriormente aquí en Unix. Después de un comentario, lo descubrí por mi cuenta y lo respondí. Esta es una versión editada de mi respuesta para encajar en este contexto aquí. Eliminé mi otra pregunta (y respuesta) a favor de esta.

Esto es lo que estaba tratando de hacer:

Caso de ejemplo

Monturas:

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

Después de montar /tengo una carpeta /home/joepara el usuario joe. Una vez que se monta la otra ubicación ( /data), tengo el conjunto completo de carpetas de inicio disponibles, por lo que estoy enganchándolas en su lugar ( /data/home on /home). Hay una carpeta /data/home/joe, por lo que siempre que el montaje sea /dev/sdb1exitoso, obtendrá el contenido /data/home/joe, de lo contrario, volverá a /home/joe( /dev/sda1¡ encendido !).

Cuando tiene éxito, ¿cómo puedo acceder a los contenidos originales de /home/joe(on /dev/sda1!) En lugar de los montados en su lugar /data/home/joe?

Solución

Basado en un comentario del comentario de Patrick sobre mi pregunta y la solución por ephemient (respuesta aceptada aquí), se me ocurrió lo siguiente.

Que es aparentemente posible mount --bind(o mount -o bindla) carpeta principal ( esta es la parte crucial ) de un aprieto a montar en otro lugar y con ello acceder a los contenidos originales. Entonces, para mi caso de ejemplo, en lugar de intentar:

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

(es decir, montar las ubicaciones ya montadas en otro lugar) Tuve que:

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

Entonces esto es lo que Patrick quiso decir en su comentario

A menos que esté volviendo a montar /(root), esa respuesta debería funcionar bien.

Siempre que tenga una carpeta principal para la ubicación montada en enlace disponible, funcionará, aunque con una indirección como se muestra arriba. Si montaste algo por encima, /no tienes suerte, ya que no hay una carpeta principal para /.

0xC0000022L
fuente
Montar la carpeta principal fue la parte clave que me faltaba. Gracias.
aidan
1

Puede mover el soporte a una nueva ubicación sin desmontarlo, utilizando mount --move:

$ mount --move /home /mnt/home
do stuff with the local /home
$ mount --move /mnt/home /home
Michael Mrozek
fuente
1
Gracias michael Esto tiene la misma desventaja de hacer que / home sea inaccesible para otros usuarios.
Janus