在我的无头 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/joe
user文件夹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