我使用 Linux overlay
fs 作为根文件系统,以保持真实根分区只读并将更改写入另一个 fs(例如,tmpfs 或另一个分区)。
但是,当根文件系统最终到位时(在“pivot root”之后),原始挂载(假设在/dev/sda
at /mnt/root-write-protected
)隐藏在初始根(例如 init ramdisk)中,但仍处于活动挂载状态。但是,它不再从根文件系统内部可见,也无法以可写方式再次挂载原始设备,如下mount
所示:
mount: /dev/sda is already mounted
mount
尽管或没有列出任何条目cat /etc/mtab
。
我如何访问(例如,读取、重新挂载)这个隐藏的挂载?
答案1
在 pivot-root 发生之前,mount --bind
将文件系统放到您可以访问的位置。
例如:
- 挂载
sda2
上/mnt/root-write-protected
。 - 将 overlayfs 挂载到
/mnt/new-root
。 - 添加步骤:
/mnt/root-write-protected
绑定/mnt/new-root/raw-disk
。 - 转向
/mnt/new-root
。 - 现在您可以
sda2
访问/raw-disk
。
答案2
由于原始挂载被pivot_root
或 所“埋没” change_root
,因此无法将其重新挂载为可写设备。但是,可以将该卷用作循环设备的源文件。这可以照常挂载并用于写访问。更改此设备后应重新启动系统,因为覆盖与实际磁盘数据不一致。
喜欢:
sudo mkdir /mnt/hidden_root
sudo losetup -f /dev/sda2 # change to your overlayed root volume
sudo mount /dev/loop0 /mnt/hidden_root # change loop0 if already used before
# ... do changes to /mnt/hidden_root here ...
sudo reboot
重启后,更改将应用于实时根。
另外,请确保不要循环挂载已经以读/写方式挂载的设备。这两个文件系统(至少在 ext3/4 的情况下)几乎会立即开始争夺磁盘上的共享元数据,从而破坏 FS。