有什么办法可以绕过安装选项的长度限制吗?

有什么办法可以绕过安装选项的长度限制吗?

假设我以“elem_###”的形式创建一系列目录,其中 ### 是从 001 到 454 的整数,如下所示:

$ dirs=$(seq -felem_%03.0f 454 | tr '\n' ' ')
$ mkdir ${dirs}

然后我使用这些目录来lowerdir安装overlayfs

$ dirs=${dirs::-1}
$ mkdir mountpoint
# mount overlay -t overlay mountpoint -o lowerdir=${dirs// /:}
# umount mountpoint

效果很好。但是,如果我这样做:

$ mkdir elem_455
# mount overlay -t overlay mountpoint -o lowerdir=${dirs// /:}:elem_455
mount: /home/username/dir/mountpoint: wrong fs type, bad option, bad superblock on overlay, missing codepage or helper program, or other error.
$ dmesg | tail
(...)
[ 1541.668221] overlayfs: empty lowerdir
(...)

它失败。

所以,发生的事情是这样的:在第一次尝试中,选项字符串的长度是 4094 个字符,而在第二次尝试中,长度是 4103。此外,根据错误判断,字符串被剪切为 4095 个字符。

当然,

$ getconf PAGE_SIZE
4096

因此选项字符串显然仅限于内存页面大小减一。是 Linux 内核施加的限制还是mount程序本身的限制?有什么办法解决这个问题吗?

答案1

一种想法是将部分目录聚合到中间的overlayfs层中。然后,我们可以将它们聚合到最终的挂载点。

# mount overlay -t overlay dummy1 -o lowerdir=${dirs// /:}
# mount overlay -t overlay dummy2 -o lowerdir=${dirs// /:}
# ...
# mount overlay -t overlay mountpoint -o lowerdir=dummy1:dummy2:...

相关内容