访问安装点的原始内容


32

在无头NAS上,我安装了sdf1(闪存卡),/同时/home安装了lv00(闪存卡)(由软件RAID支持的LVM卷)。为了能够在RAID发生故障时访问计算机,我/home/foo/.ssh在的文件系统中有ssh公钥等的副本sdf1
要更新隐藏在安装文件/home我通常再登lv00/mnt/home,做我必须做的,然后将lv00放回原处。
有没有一种方法可以实现而无需卸载/home

Answers:


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

只要您使用--bind(而不是--rbind),就可以获得该安装的克隆,而没有在其顶部安装任何东西。


完善!我在玩弄的想法mount --bind,但是只有一些复杂的想法在我需要时一定会打破。这恰好满足了我的需要,甚至可以作为永久安装架使用。谢谢
Janus


是否值得编辑此答案以包含以下事实:您必须像其他答案中所涵盖的那样,将级别绑定安装到已包含挂载的目录之上?否则,此答案更好,因为它更短,因此更容易快速阅读!
Michael Firth

5

我已经尝试实现类似的方法,但是ephemient的回答并未解释该方法的语义。它对我来说失败了,因此我在此之前在unix.SE上提出了几乎相同的问题。发表评论后,我自己弄清了答案。这是我的答案的编辑版本,以适合此处的情况。我删除了我的另一个问题(和答案)以支持这个问题。

这是我正在尝试做的事情:

案例案例

坐骑

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

安装后,/我有一个/home/joe供用户使用的文件夹joe。挂载其他位置(/data)后,我便拥有了一整套可用的主文件夹,因此我将它们绑定安装到位(/data/home on /home)。有一个文件夹/data/home/joe,只要/dev/sdb1成功安装成功,他就将获取的内容/data/home/joe,否则将退回到/home/joe(on /dev/sda1!)。

如果成功了,我怎么可以访问原来的内容 /home/joe(上/dev/sda1!),而不是那些绑定安装到位的/data/home/joe

根据帕特里克(Patrick)对我的问题的评论和依法(emceptemient)的解决方案(此处为已接受的答案),我提出了以下建议。

显然是可能的mount --bind(或mount -o bind)的父文件夹这是关键的部分)的一个别处结合贴装并由此访问原始内容。因此,对于我的示例案例,不要尝试:

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

(即,将已经绑定安装的位置安装到其他位置),我必须:

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

这就是帕特里克在评论中的意思

除非您要重新安装/(root),否则该答案应该可以正常工作。

只要您有一个指向绑定安装位置的父文件夹,它就可以工作,尽管上面显示的是一种间接方式。如果您将某些东西绑定安装在上面,/那么您会很不幸,因为没有父文件夹/


挂载父文件夹是我缺少的关键部分。谢谢。
艾丹,

1

您可以使用以下方法将挂载移动到新位置而无需卸载mount --move

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

1
谢谢迈克尔。这具有使/ home对其他用户不可访问的相同缺点。
Janus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.