Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

On my headless NAS I have sdf1 (a flash-card) mounted as / while /home is mounted from lv00 (an LVM volume backed by a software RAID). To be able to access the machine when the RAID fails, I have a copy of my ssh public key, etc. in /home/foo/.ssh on the file-system from sdf1.
To update the files that are hidden by the mounted /home I normally remount lv00 in /mnt/home, do what I have to do, and then move lv00 back in place.
Is there a way to achieve this without unmounting /home?

share|improve this question
add comment

3 Answers 3

up vote 13 down vote accepted
mkdir /mnt/root
mount --bind / /mnt/root
ls /mnt/root/home/foo/.ssh

As long as you use --bind (as opposed to --rbind), you get a clone of the mount without the stuff mounted on top of it.

share|improve this answer
    
Perfect! I was toying with the idea of mount --bind, but only got some convoluted ideas that were sure to break when I needed it. This does exactly what I need and can even go in as a permanent mount. Thanks –  Janus Nov 30 '10 at 5:23
    
it's a dup of unix.stackexchange.com/questions/49345/… –  poige Apr 5 '13 at 18:42
add comment

You can move the mount to a new location without unmounting it, using mount --move:

$ mount --move /home /mnt/home
do stuff with the local /home
$ mount --move /mnt/home /home
share|improve this answer
    
Thanks Michael. This has the same disadvantage of making /home inaccessible to other users. –  Janus Nov 30 '10 at 5:18
add comment

I've tried to achieve something similar, but ephemient's answer didn't explain the semantics of the method. It failed for me and so I asked virtually the same question earlier here on unix.SE. After a comment I figured it out on my own and answered it. This is an edited version of my answer to fit into this context here. I removed my other question (and answer) in favor of this one.

Here's what I was trying to do:

Example case

Mounts:

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

After mounting / I have a folder /home/joe for user joe. Once the other location gets mounted (/data) I have the full set of home folders available, so I am bind-mounting them into place (/data/home on /home). There is a folder /data/home/joe, so as long as the mounting of /dev/sdb1 succeeds, he'll get the contents of /data/home/joe, otherwise he'll fall back to /home/joe (on /dev/sda1!).

When it succeeds, how can I access the original contents of /home/joe (on /dev/sda1!) instead of those bind-mounted into place from /data/home/joe?

Solution

Based on a comment by Patrick's comment on my question and the solution by ephemient (accepted answer here), I came up with the following.

It is apparently possible to mount --bind (or mount -o bind) the parent folder (this is the crucial part) of a bind-mount elsewhere and thereby access the original contents. So for my example case, instead of trying to:

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

(i.e. mount the already bind-mounted locations elsewhere) I had to:

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

So this is what Patrick meant in his comment

Unless you're remounting over / (root), that answer should work just fine.

As long as you have a parent folder to the bind-mounted location available, it'll work, albeit with one indirection as shown above. If you bind-mounted something over / you're out of luck, as there is no parent folder for /.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.