如何在overlayfs中使用多个较低层

时间:2015-06-25 08:26:28

标签: linux filesystems

根据this文档,应该可以在overlayfs中使用多个较低层,但我无法在内核3.18.13上使用它。我使用它是错误的,还是我需要一个以后的内核,如果是这样的话?

这有效:

>>>mkdir lower1 lower2 upper workdir merged
>>>echo hello > lower1/myfile
>>>sudo mount -t overlay overlay -olowerdir=lower1,upperdir=upper,workdir=workdir/ merged
>>>cat merged/myfile
hello

示例与文档非常相似:

>>>sudo mount -t overlay overlay -olowerdir=lower1:lower2 merged
mount: wrong fs type, bad option, bad superblock on overlay,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.
>>>dmesg | tail -n1
[42131.327203] overlayfs: missing upperdir or lowerdir or workdir

好的,让我们添加它们:

>>>sudo mount -t overlay overlay -olowerdir=lower1:lower2,upperdir=upper,workdir=workdir/ merged
mount: wrong fs type, bad option, bad superblock on overlay,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.
>>>dmesg | tail -n1
[42155.052961] overlayfs: failed to resolve 'lower1:lower2': -2

3 个答案:

答案 0 :(得分:3)

使用多个overlayfs挂载来实现"堆叠"可能很诱人。但是,对于以后的内核版本,已经证明这不可能实现beyond two mounts。也就是说,如果你将一组上/下目录挂载到一个挂载点然后使用相同的挂载点作为另一个overlayfs挂载的下层目录,第三次挂载尝试将失败,你会在dmesg中看到这个:" overlayfs: maximum fs stacking depth exceeded&#34 ;.我看到why a limiting stacking depth is needed,但我不清楚为什么目前设置为2。

因此,如果您遇到3.18并且无法移至3.19(如toto38所示)那么您正在寻找一种方法来使用多个"更低的"没有重新编译内核的目录?如果你正在使用RHEL / Centos / Fedora,那么funionfs可能是你最好的选择(yum install funionfs)。您可以在单个安装命令中指定多个只读的较低目录:

funionfs -o dirs=<FIRST_LOWER_RO_DIR_PATH>=RO:<SECOND_LOWER_RO_DIR_PATH>=RO:<UPPER_RW_DIR_PATH> NONE <MOUNT_POINT_DIR_PATH>

我从来没有比较过overlayfs和funionf之间的性能,虽然overlayfs在内核空间工作,而funionfs在用户空间(通过保险丝),所以我认为funionf可能比overlayfs。

答案 1 :(得分:0)

Linux 3.19中的OverlayFS多层支持 http://www.phoronix.com/scan.php?page=news_item&px=MTg1Nzg

答案 2 :(得分:0)

您可以使用一个现有的叠加层,而不是另一个叠加层。只需将一个叠加层的lowerdir设置为现有叠加层的挂载点(依此类推......)。例如,三级叠加:

  • / overlay1(lower = / ro-layer1,upper = / ro-layer2)
  • / overlay2(lower = / overlay1,upper = / rw-layer3

现在/ overlay2是ro-layer1加上ro-layer2和rw-layer3的变化