访问挂载点的原始内容

Jan*_*nus 48 linux debian mount

在我的无头 NAS 上,我安装了sdf1(闪存卡),/同时/home安装了lv00(由软件 RAID 支持的 LVM 卷)。为了能够当RAID无法访问本机,我有我的SSH公共密钥等的副本/home/foo/.ssh从文件系统上sdf1
要更新隐藏在安装文件/home我通常再登lv00/mnt/home,做我必须做的,然后将lv00放回原处。
有没有办法在不卸载的情况下实现这一目标/home

eph*_*ent 64

mkdir /mnt/root
mount --bind / /mnt/root
ls /mnt/root/home/foo/.ssh
Run Code Online (Sandbox Code Playgroud)

只要你使用--bind(而不是--rbind),你就会得到一个没有安装在它上面的东西的安装副本。

  • 是否值得编辑此答案以包含以下事实:您必须绑定挂载到已挂载的目录之上的级别,如其他答案中所述?这个答案在其他方面更好,因为它更短,因此更容易快速阅读! (2认同)

0xC*_*22L 7

我试图实现类似的东西,但ephemient的答案并没有解释该方法的语义。它对我来说失败了,所以我早些时候在 unix.SE 上问了几乎相同的问题。发表评论后,我自己弄清楚并回答了它。这是我的答案的编辑版本,以适应此处的上下文。我删除了我的另一个问题(和答案)以支持这个问题。

这是我试图做的:

示例案例

坐骑:

/dev/sda1  on /     type ext4 (rw)
/dev/sdb1  on /data type ext4 (rw)
/data/home on /home type none (rw,bind)
Run Code Online (Sandbox Code Playgroud)

安装后,/我有一个/home/joeuser文件夹joe。一旦其他位置被安装 ( /data),我就有了完整的主文件夹可用,所以我将它们绑定安装到位 ( /data/home on /home)。有一个文件夹/data/home/joe,所以只要挂载/dev/sdb1成功,他就会得到 的内容/data/home/joe,否则他会回退到/home/joe(上/dev/sda1!)。

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

解决方案

根据帕特里克对我的问题的评论和 ephemient 的解决方案(此处接受的答案),我想出了以下内容。

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

mount --bind /home/joe /home/joe/underneath
# or ...
mount --bind /home /home/joe/underneath
Run Code Online (Sandbox Code Playgroud)

(即在别处安装已经绑定安装的位置)我必须:

test -d /.ROOT || mkdir /.ROOT
mount --bind / /.ROOT
mount --bind /.ROOT/home/joe /home/joe/underneath
Run Code Online (Sandbox Code Playgroud)

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

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

只要你有一个可用的绑定安装位置的父文件夹,它就可以工作,尽管有一个如上所示的间接。如果您绑定安装了某些东西,那/您就不走运了,因为/.