访问挂载点的原始内容

访问挂载点的原始内容

在我的无头 NAS 上,我sdf1安装了(闪存卡),同时/从(由软件 RAID 支持的 LVM 卷)/home安装。lv00为了能够在 RAID 失败时访问计算机,我在/home/foo/.ssh文件系统中保存了 ssh 公钥等的副本sdf1
要更新挂载隐藏的文件,/home我通常会重新lv00挂载/mnt/home,执行我必须执行的操作,然后移lv00回原位。
有没有办法在不卸载的情况下实现这一目标/home

答案1

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

只要您使用--bind(与 相对--rbind),您就可以获得安装座的克隆,而无需安装在其顶部的东西。

答案2

我尝试过实现类似的目标,但是短暂的的答案没有解释该方法的语义。它对我来说失败了,所以我早些时候在 unix.SE 上问了几乎相同的问题。评论后我自己弄清楚并回答了它。这是我的答案的编辑版本,以适应这里的上下文。我删除了其他问题(和答案)以支持这个问题。

这就是我试图做的:

示例案例

坐骑:

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

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

什么时候它成功了,我如何访问 /home/joe(on /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

(即在其他地方安装已经绑定安装的位置)我必须:

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

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

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

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

答案3

您可以使用以下命令将安装移动到新位置而不卸载它mount --move

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

相关内容