是否可以将包含根文件系统的现有磁盘映像联合安装到upperdir的overlayfs挂载以进行读写访问?
我试图使用预先存在的脚本(最初写在Ubuntu12.04上并移植到14.04)将一些旧的磁盘映像联合到Ubuntu16.04机器上的/tmp/目录中。
旧的自动化脚本使用overlayfs在squashfs映像之上创建和联合挂载可写的ext2/3磁盘映像--如下所示:
cd /tmp
mkdir lower upper union
losetup /dev/loop1 /tmp/image.sfs
losetup /dev/loop2 /tmp/image.ext2
mount -t squashfs -o ro /dev/loop1 /tmp/lower
mount -t ext2 -o rw /dev/loop2 /tmp/upper
mount -t overlayfs -o rw,lowerdir=/tmp/lower,upperdir=/tmp/upper overlayfs /tmp/union最后一次在3.x内核上使用它们(可能在3.18之前),而且该方法似乎不再有效。覆盖现在需要一个workdir选项-例如:
mount -t overlay -o rw,lowerdir=/tmp/lower,upperdir=/tmp/upper,workdir=/tmp/work overlay /tmp/union问:是否可以调整自动化脚本,在4.x内核上以可写状态挂载和使用现有映像?我是否可以避免将它们重新定义为包含类似root和work目录的内容?在某些情况下,这可能会破坏它们在其他地方的使用。
根据文档,为了允许原子写入,workdir必须是与upperdir相同的文件系统上的一个空目录。在我看来,将根文件系统映像合并为读-写是不可能的。workdir必须存在于映像中(与其数据目录分开),这在根文件系统映像中是不可能的。
我已经考虑过在VM中加载Ubuntu14.04股票,进行几次一次性操作,但这不是一个长期的解决方案。
我想出的避免将相同数据双写到磁盘的唯一解决方案是将两个映像作为lowerdir值挂载,upperdir和workdir目录位于tmpfs挂载上。然后,我可以使用rsync将更改从tmpfs位置复制到挂载的ext2/3映像,在自动写入完成并且覆盖联盟已被卸载之后--即:
mount -t overlay -o rw,lowerdir=/tmp/upper:/tmp/lower,upperdir=/tmp/tmpfs/root,workdir=/tmp/tmpfs/work overlay /tmp/union
...perform automated reads/writes...
umount /tmp/union
...rsync contents from /tmp/tmpfs/root to /tmp/upper...不过,它严格限制在可用的RAM上,而且添加到所有自动化脚本中是一种丑陋的做法。
发布于 2018-05-03 15:34:48
在图像文件中创建一个额外的嵌套级别:
mkdir /tmp/upper/upper
mkdir /tmp/upper/work
mount -t overlay -o rw,lowerdir=/tmp/lower,upperdir=/tmp/upper/upper,workdir=/tmp/upper/work overlay /tmp/unionhttps://unix.stackexchange.com/questions/308980
复制相似问题