访问覆盖根文件系统的下层挂载

访问覆盖根文件系统的下层挂载

我使用 Linux overlayfs 作为根文件系统,以保持真实根分区只读并将更改写入另一个 fs(例如,tmpfs 或另一个分区)。

但是,当根文件系统最终到位时(在“pivot root”之后),原始挂载(假设在/dev/sdaat /mnt/root-write-protected)隐藏在初始根(例如 init ramdisk)中,但仍处于活动挂载状态。但是,它不再从根文件系统内部可见,也无法以可写方式再次挂载原始设备,如下mount所示:

mount: /dev/sda is already mounted

mount尽管或没有列出任何条目cat /etc/mtab

我如何访问(例如,读取、重新挂载)这个隐藏的挂载?

答案1

在 pivot-root 发生之前,mount --bind将文件系统放到您可以访问的位置。

例如:

  1. 挂载sda2/mnt/root-write-protected
  2. 将 overlayfs 挂载到/mnt/new-root
  3. 添加步骤:/mnt/root-write-protected绑定/mnt/new-root/raw-disk
  4. 转向/mnt/new-root
  5. 现在您可以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。

相关内容