我根据测试得出的结论是aufs仅限于127层。
(准备)
mkdir write joined {1..400}
for((i=1;i<=400;i++));do echo >$i/$i.txt;done #for checks
使用单个安装,限制为 84 层(编号 + 写入层)。
文件夹名称不会更改 84 个限制(因此每个文件夹名称都可以更大,例如“layer-72”,因此不是字符串大小限制)。
sudo mount -v -t aufs \
-o "sync,br=write:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:22:23:24:25:26:27:28:29:30:31:32:33:34:35:36:37:38:39:40:41:42:43:44:45:46:47:48:49:50:51:52:53:54:55:56:57:58:59:60:61:62:63:64:65:66:67:68:69:70:71:72:73:74:75:76:77:78:79:80:81:82:83:84" \
"none" "joined";echo $?
除非您从末尾删除“:84”,否则上述操作将失败。
使用remount,最多可以达到127层(编号+写入层)
sudo mount -v -t aufs -o "sync,br=write" "none" "joined";echo $?
for((i=1;i<=400;i++));do
echo "try $i";
if ! "sudo" "mount" -v "-o" "remount,append:$i" "joined";then
break; # it stops with error "No space left on device", but is not related to free bytes on storage!
fi;
ls -l joined/$i.txt;
done
研究
我试图使用mount.aufs
它来查看可读的错误消息,但mount -v
没有帮助。
是否有文档指定如何将mount
参数转换为mount.aufs
?
我还在尝试寻找mount.aufs
源代码;这可以帮助我理解它接受哪些参数。
可接受的替代答案
aufs 可以打补丁吗(因为 127 显然是一个硬编码限制)?是否值得付出努力/造成混乱,或者超过 127 可能会导致性能问题,如评论中所述?
另一种文件夹合并可以提供超过 127 层吗?如果有,是哪一个?这里是我找到的列表:overlayfs unionfs mhddfs mergefs docker。根据上面提供的测试用例,我应该使用哪些命令? aufs 非常清晰、易于使用和理解,这是我选择它的主要原因。
PS:我现在用的是这个:如何使 mergefs 的行为像我对 aufs 的行为一样:只将所有新的或修改的内容(包括路径、所有内容..)写入单个可写文件夹?