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?
3 Answers
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.
- 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. ThanksJanus– Janus2010-11-30 05:23:27 +00:00Commented Nov 30, 2010 at 5:23 - 2it's a dup of unix.stackexchange.com/questions/49345/…poige– poige2013-04-05 18:42:35 +00:00Commented Apr 5, 2013 at 18:42
- 3Is it worth editing this answer to include the fact that you have to bind-mount a level above the directory you have covered with a mount, as is covered in the other answer? This answer is otherwise better, because it is shorter and hence easier to read quickly!Michael Firth– Michael Firth2019-03-05 16:03:17 +00:00Commented Mar 5, 2019 at 16:03
- I finally found what is eating up my disk space. What a life saver.Dyin– Dyin2022-01-08 05:46:18 +00:00Commented Jan 8, 2022 at 5:46
- For a little more clarity, you can't mount the target directly, but you can mount its parent, e.g.
mkdir /home/home; mount --bind /home /home/home, then if you're user "foo" you can runls /home/home/foo/.sshAdam Katz– Adam Katz2023-01-24 03:56:26 +00:00Commented Jan 24, 2023 at 3:56
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 /.
- Mounting the parent folder was the key part that I was missing. Thanks.aidan– aidan2018-03-06 01:11:04 +00:00Commented Mar 6, 2018 at 1:11
- Ditto with the parent folder. Intuitively, I thought you should bind mount the original mount point, but instead you mount the bind mounted directory.Manngo– Manngo2020-05-29 08:47:17 +00:00Commented May 29, 2020 at 8:47
- You can just mount the device that originally was mounted as
/if you have a later bind-mount on/. It's safe: unix.stackexchange.com/a/276399/5589pepoluan– pepoluan2022-03-25 02:09:11 +00:00Commented Mar 25, 2022 at 2:09 - 1This answer works great, if your hidden location is already mounted. I had a similar problem with overlayfs where a bind mount to the lower dir was established before the overlayfs to access the original files. This post on SU helped and its solution might be helpful in some scenarios: superuser.com/a/1314013/155796Holger Böhnke– Holger Böhnke2025-01-13 23:16:50 +00:00Commented Jan 13 at 23:16
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