it-swarm-es.tech

Acceso a los contenidos originales del punto de montaje.

En mi cabeza sin cabeza NAS tengo sdf1 (una tarjeta flash) montada como / mientras /home está 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/.ssh en el sistema de archivos de sdf1.
Para actualizar los archivos que están ocultos por el /home montado, normalmente vuelvo a montar lv00 en /mnt/home, haga lo que tengo que hacer, y luego mover lv00 de nuevo en su lugar.
¿Hay alguna manera de lograr esto sin desmontar /home?

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

Mientras uses --bind (Opuesto a --rbind), obtienes un clon de la montura sin las cosas montadas encima de ella.

49
ephemient

Intenté lograr algo similar, pero la respuesta de ephemient no explicó la semántica del método. Me falló y, por lo tanto, hice prácticamente 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/joe para el usuario joe. Una vez que se monta la otra ubicación (/data) Tengo el conjunto completo de carpetas de inicio disponibles, así que las estoy montando en su lugar (/data/home on /home). Hay una carpeta /data/home/joe, siempre y cuando el montaje de /dev/sdb1 tiene éxito, obtendrá el contenido de /data/home/joe, de lo contrario volverá a /home/joe (en /dev/sda1!).

Cuando tiene éxito, ¿cómo puedo acceder al contenido original de /home/joe (en /dev/sda1!) en lugar de aquellos montados en su lugar desde /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.

Es es aparentemente posible mount --bind (o mount -o bind) la carpeta principal ( esta es la parte crucial) de un montaje de enlace en otro lugar y, por lo tanto, acceder a 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és montando sobre / (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 sobre / no tienes suerte, ya que no hay una carpeta principal para /.

5
0xC0000022L

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

$ mount --move /home /mnt/home
do stuff with the local /home
$ mount --move /mnt/home /home
1
Michael Mrozek