如何让aufs使用超过127层?或替代方案

如何让aufs使用超过127层?或替代方案

我根据测试得出的结论是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 的行为一样:只将所有新的或修改的内容(包括路径、所有内容..)写入单个可写文件夹?

相关内容