428 Star 1.6K Fork 1.6K

GVPopenEuler/kernel

 / 详情

【openEuler 22.09】Add sysfs file to overlayfs to display mount information

已完成
开源之夏2023
创建于  
2022-10-19 13:42

【项目难度】:基础
【项目描述】:
在实际生产环境中不断出现overlayfs没有真正卸掉的出现了诸如quota统计数据持续增长等问题。对于现网环境目前没有好的办法去界定该类情况。overlayfs在实际使用过程中是有很多限制但是并没有在代码层面直接做限制,所以在使用过程会出现操作错误引入的一些奇怪的问题,往往这类问题表露出来的现象是比较奇怪的,定位起来比较耗时。基于这样的背景overlayfs的维测功能需要增强。
构想:
在“/sys/fs/“目录下增加overlayfs的目录,目录下记录各个挂载点的挂载信息,只有overlayfs被真正卸载掉目录下对应的目录才会删除。
目录结构构想如下,其中目录名称组成结构为:"merge_主设备号_次设备号"
目录结构构想
【产出标准】:
1. 在"/sys/fs"目录下增加overlayfs目录,目录下记录各个挂载点的挂载信息
2. 只有在overlayfs被真正卸载掉时,目录下对应的目录才会被删除
【技术要求】:
1. C语言
2. Linux kernel
3. 存储
【导师姓名/导师邮箱】:yebin10@huawei.com
【成果提交仓库】:https://gitee.com/openeuler/kernel/tree/openEuler-22.09/
【相关参考资料】:https://gitee.com/openeuler/kernel

本次活动将面向全球学生,题目内容请同时提交中英文版本。

project name:Add sysfs file for overlayfs
【Difficulty】:basic
【Description】:
In the actual production environment, Overlayfs often occurs some problems, such as continuous growth of quota statistics. There is no good way to define this category for the current environment. Overlayfs has many restrictions in the actual use process but it has not directly restricted at the code level. Therefore, some strange problems introduced in operation errors will occur during the use process. It is time-consuming. Based on this background, Overlayfs's maintenance function needs to be enhanced.
This patch add sysfs file for overlayfs to recording the mount information. The sysfs file will be deleted only when Overlayfs is truly unloaded.
Idea:
Add the directory of overlayfs under the directory "/sys/fs/", and the directory records the mount information of each mount point, and the corresponding directory under the directory will be deleted only when the overlayfs is really unmounted.
The directory structure is conceived as follows, where the directory name composition structure is: "merge_primary_secondary_device_number"
directory structure
【Output Requirements】:
1. Add the directory "/sys/fs" to the directory overlayfs, which records the mount information of each mount point
2. Only when overlayfs is actually unmounted, the corresponding directory will be deleted
【Technical Requirements】:
1. C language
2. Linux kernel
3. storage
【Mentor/Email】:yebin10@huawei.com
【Project Repository】:https://gitee.com/openeuler/kernel/tree/openEuler-22.09/
【Notes】:https://gitee.com/openeuler/kernel

评论 (3)

hiixfj 创建了开源之夏2022 3年前

Hi hiixfj, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: Kernel, and any of the maintainers: @yangyingliang , @gatieme , @jiaoff , @zhengzengkai , @LiuYongQiang0816 , @wangxiongfeng , @kevinzhu1 , @jentlestea , @lujialin2 , @wuxu_buque , @xukuohai , @lengchao , @alvin-ling , @yuzenghui , @yuehaibing , @juntianlinux , @chenguangli , @gasonchen , @whoisxxx , @koulihong , @kailiu42 , @hanjun-guo , @woqidaideshi , @chiqijun , @wkfxxx , @thundertown , @guohaocs2c , @kylin-mayukun , @oskernel0719 , @liuxinux , @newbeats , @zhujianwei001 , @zhenpengzheng , @SuperSix173 , @colyli , @zhangyi089 , @htforge , @qiuuuuu , @xiexiuqi

验证记录:

运行环境:QEMU Debian GNU/Linux 10 debian ttyS0

挂载 overlayfs 文件系统:

root@debian:~# mount -t overlay -o lowerdir=lower,upperdir=upper,workdir=work overlay merge
root@debian:~# mount -t overlay -o \
lowerdir=testdir/lower:testdir/ller,\
upperdir=testdir/upper, \
workdir=testdir/work, \
overlay testdir/rename

测试添加到 /sys/fs/overlayfs 目录下的 sysfs 文件:

root@debian:~# cat /sys/fs/overlayfs/merge_0_46/upper
upper
root@debian:~# cat /sys/fs/overlayfs/merge_0_46/lower
lower
root@debian:~# cat /sys/fs/overlayfs/merge_0_46/merge
/root/merge
root@debian:~# cat /sys/fs/overlayfs/merge_0_46/work
work
root@debian:~# cat /sys/fs/overlayfs/merge_0_48/upper
testdir/upper
root@debian:~# cat /sys/fs/overlayfs/merge_0_48/lower
testdir/lower:testdir/ller
root@debian:~# cat /sys/fs/overlayfs/merge_0_48/merge
/root/testdir/rename
root@debian:~# cat /sys/fs/overlayfs/merge_0_48/work
testdir/work

在文件系统的挂载点下使用 umount -l 卸载文件系统,之后再次查看 sysfs 文件:

root@debian:~# cd merge/
root@debian:~/merge# umount -l .
root@debian:~/merge# cat /sys/fs/overlayfs/merge_0_46/upper
upper
root@debian:~/merge# cat /sys/fs/overlayfs/merge_0_46/lower
lower
root@debian:~/merge# cat /sys/fs/overlayfs/merge_0_46/merge
/root/merge
root@debian:~/merge# cat /sys/fs/overlayfs/merge_0_46/work
work

sysfs 文件未被删除,
退出挂载点目录后:

root@debian:~/merge# cd ..
root@debian:~# cat /sys/fs/overlayfs/merge_0_46/work
cat: /sys/fs/overlayfs/merge_0_46/work: No such file or directory
root@debian:~# ls /sys/fs/overlayfs/
merge_0_48

sysfs 文件被删除,

符合预期

hiixfj 修改了描述 3年前
hiixfj 修改了标题 3年前

边界条件测试

运行环境:QEMU Debian GNU/Linux 10 debian ttyS0

  1. 测试 mergedir 路径长但在4096范围内的情况
    shell脚本:
#!/bin/bash
  
tmpmerge="mergedir/"
merge="mergedir/"
while ((${#merge} < 2048))
do
        mkdir $merge
        if ((${#merge} + 9 >= 2048))
        then
                break
        fi
        merge=$merge$tmpmerge
done
echo mergelength ${#merge}

lower=""
tmplower="lowerdir/lower"
lowerbias=0
mkdir lowerdir
for ((i=0;i<200;i++))
do
        tmp=$tmplower$lowerbias
        ((lowerbias += 1))
        mkdir $tmp
        lower=$lower$tmp
        if ((i == 199))
        then
                break
        fi
        lower=$lower":"
done

echo lower length ${#lower}

mkdir upper
mkdir work

mount -t overlay -o upperdir=upper,lowerdir=$lower,workdir=work overlay $merge

查看 sysfs 文件内容:

root@debian:~/extreme# cat /sys/fs/overlayfs/merge_0_46/upper
upper
root@debian:~/extreme# cat /sys/fs/overlayfs/merge_0_46/work
work
root@debian:~/extreme# cat /sys/fs/overlayfs/merge_0_46/lower
lowerdir/lower0:lowerdir/lower1:lowerdir/lower2:lowerdir/lower3:lowerdir/lower4:lowerdir/lower5:lowerdir/lower6:lowerdir/lower7:lowerdir/lower8:lowerdir/lower9:lowerdir/lower10:lowerdir/lower11:lowerdir/lower12:lowerdir/lower13:lowerdir/lower14:lowerdir/lower15:lowerdir/lower16:lowerdir/lower17:lowerdir/lower18:lowerdir/lower19:lowerdir/lower20:lowerdir/lower21:lowerdir/lower22:lowerdir/lower23:lowerdir/lower24:lowerdir/lower25:lowerdir/lower26:lowerdir/lower27:lowerdir/lower28:lowerdir/lower29:lowerdir/lower30:lowerdir/lower31:lowerdir/lower32:lowerdir/lower33:lowerdir/lower34:lowerdir/lower35:lowerdir/lower36:lowerdir/lower37:lowerdir/lower38:lowerdir/lower39:lowerdir/lower40:lowerdir/lower41:lowerdir/lower42:lowerdir/lower43:lowerdir/lower44:lowerdir/lower45:lowerdir/lower46:lowerdir/lower47:lowerdir/lower48:lowerdir/lower49:lowerdir/lower50:lowerdir/lower51:lowerdir/lower52:lowerdir/lower53:lowerdir/lower54:lowerdir/lower55:lowerdir/lower56:lowerdir/lower57:lowerdir/lower58:lowerdir/lower59:lowerdir/lower60:lowerdir/lower61:lowerdir/lower62:lowerdir/lower63:lowerdir/lower64:lowerdir/lower65:lowerdir/lower66:lowerdir/lower67:lowerdir/lower68:lowerdir/lower69:lowerdir/lower70:lowerdir/lower71:lowerdir/lower72:lowerdir/lower73:lowerdir/lower74:lowerdir/lower75:lowerdir/lower76:lowerdir/lower77:lowerdir/lower78:lowerdir/lower79:lowerdir/lower80:lowerdir/lower81:lowerdir/lower82:lowerdir/lower83:lowerdir/lower84:lowerdir/lower85:lowerdir/lower86:lowerdir/lower87:lowerdir/lower88:lowerdir/lower89:lowerdir/lower90:lowerdir/lower91:lowerdir/lower92:lowerdir/lower93:lowerdir/lower94:lowerdir/lower95:lowerdir/lower96:lowerdir/lower97:lowerdir/lower98:lowerdir/lower99:lowerdir/lower100:lowerdir/lower101:lowerdir/lower102:lowerdir/lower103:lowerdir/lower104:lowerdir/lower105:lowerdir/lower106:lowerdir/lower107:lowerdir/lower108:lowerdir/lower109:lowerdir/lower110:lowerdir/lower111:lowerdir/lower112:lowerdir/lower113:lowerdir/lower114:lowerdir/lower115:lowerdir/lower116:lowerdir/lower117:lowerdir/lower118:lowerdir/lower119:lowerdir/lower120:lowerdir/lower121:lowerdir/lower122:lowerdir/lower123:lowerdir/lower124:lowerdir/lower125:lowerdir/lower126:lowerdir/lower127:lowerdir/lower128:lowerdir/lower129:lowerdir/lower130:lowerdir/lower131:lowerdir/lower132:lowerdir/lower133:lowerdir/lower134:lowerdir/lower135:lowerdir/lower136:lowerdir/lower137:lowerdir/lower138:lowerdir/lower139:lowerdir/lower140:lowerdir/lower141:lowerdir/lower142:lowerdir/lower143:lowerdir/lower144:lowerdir/lower145:lowerdir/lower146:lowerdir/lower147:lowerdir/lower148:lowerdir/lower149:lowerdir/lower150:lowerdir/lower151:lowerdir/lower152:lowerdir/lower153:lowerdir/lower154:lowerdir/lower155:lowerdir/lower156:lowerdir/lower157:lowerdir/lower158:lowerdir/lower159:lowerdir/lower160:lowerdir/lower161:lowerdir/lower162:lowerdir/lower163:lowerdir/lower164:lowerdir/lower165:lowerdir/lower166:lowerdir/lower167:lowerdir/lower168:lowerdir/lower169:lowerdir/lower170:lowerdir/lower171:lowerdir/lower172:lowerdir/lower173:lowerdir/lower174:lowerdir/lower175:lowerdir/lower176:lowerdir/lower177:lowerdir/lower178:lowerdir/lower179:lowerdir/lower180:lowerdir/lower181:lowerdir/lower182:lowerdir/lower183:lowerdir/lower184:lowerdir/lower185:lowerdir/lower186:lowerdir/lower187:lowerdir/lower188:lowerdir/lower189:lowerdir/lower190:lowerdir/lower191:lowerdir/lower192:lowerdir/lower193:lowerdir/lower194:lowerdir/lower195:lowerdir/lower196:lowerdir/lower197:lowerdir/lower198:lowerdir/lower199
root@debian:~/extreme# cat /sys/fs/overlayfs/merge_0_46/merge
mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/mergedir/
  1. 测试 mergedir 路径过长的情况
    shell脚本:
#!/bin/bash
  
tmpmerge="mergedir/"
merge="mergedir/"
while ((${#merge} < 4096))
do
        mkdir $merge
        if ((${#merge} + 9 >= 4096))
        then
                break
        fi
        merge=$merge$tmpmerge
done
echo mergelength ${#merge}

lower=""
tmplower="lowerdir/lower"
lowerbias=0
mkdir lowerdir
for ((i=0;i<200;i++))
do
        tmp=$tmplower$lowerbias
        ((lowerbias += 1))
        mkdir $tmp
        lower=$lower$tmp
        if ((i == 199))
        then
                break
        fi
        lower=$lower":"
done

echo lower length ${#lower}

mkdir upper
mkdir work

mount -t overlay -o upperdir=upper,lowerdir=$lower,workdir=work overlay $merge

查看 sysfs 文件内容:

root@debian:~/extreme# cat /sys/fs/overlayfs/merge_0_46/upper
upper
root@debian:~/extreme# cat /sys/fs/overlayfs/merge_0_46/work
work
root@debian:~/extreme# cat /sys/fs/overlayfs/merge_0_46/merge
mergedir
root@debian:~/extreme# 
root@debian:~/extreme# cat /sys/fs/overlayfs/merge_0_46/lower
lowerdir/lower0:lowerdir/lower1:lowerdir/lower2:lowerdir/lower3:lowerdir/lower4:lowerdir/lower5:lowerdir/lower6:lowerdir/lower7:lowerdir/lower8:lowerdir/lower9:lowerdir/lower10:lowerdir/lower11:lowerdir/lower12:lowerdir/lower13:lowerdir/lower14:lowerdir/lower15:lowerdir/lower16:lowerdir/lower17:lowerdir/lower18:lowerdir/lower19:lowerdir/lower20:lowerdir/lower21:lowerdir/lower22:lowerdir/lower23:lowerdir/lower24:lowerdir/lower25:lowerdir/lower26:lowerdir/lower27:lowerdir/lower28:lowerdir/lower29:lowerdir/lower30:lowerdir/lower31:lowerdir/lower32:lowerdir/lower33:lowerdir/lower34:lowerdir/lower35:lowerdir/lower36:lowerdir/lower37:lowerdir/lower38:lowerdir/lower39:lowerdir/lower40:lowerdir/lower41:lowerdir/lower42:lowerdir/lower43:lowerdir/lower44:lowerdir/lower45:lowerdir/lower46:lowerdir/lower47:lowerdir/lower48:lowerdir/lower49:lowerdir/lower50:lowerdir/lower51:lowerdir/lower52:lowerdir/lower53:lowerdir/lower54:lowerdir/lower55:lowerdir/lower56:lowerdir/lower57:lowerdir/lower58:lowerdir/lower59:lowerdir/lower60:lowerdir/lower61:lowerdir/lower62:lowerdir/lower63:lowerdir/lower64:lowerdir/lower65:lowerdir/lower66:lowerdir/lower67:lowerdir/lower68:lowerdir/lower69:lowerdir/lower70:lowerdir/lower71:lowerdir/lower72:lowerdir/lower73:lowerdir/lower74:lowerdir/lower75:lowerdir/lower76:lowerdir/lower77:lowerdir/lower78:lowerdir/lower79:lowerdir/lower80:lowerdir/lower81:lowerdir/lower82:lowerdir/lower83:lowerdir/lower84:lowerdir/lower85:lowerdir/lower86:lowerdir/lower87:lowerdir/lower88:lowerdir/lower89:lowerdir/lower90:lowerdir/lower91:lowerdir/lower92:lowerdir/lower93:lowerdir/lower94:lowerdir/lower95:lowerdir/lower96:lowerdir/lower97:lowerdir/lower98:lowerdir/lower99:lowerdir/lower100:lowerdir/lower101:lowerdir/lower102:lowerdir/lower103:lowerdir/lower104:lowerdir/lower105:lowerdir/lower106:lowerdir/lower107:lowerdir/lower108:lowerdir/lower109:lowerdir/lower110:lowerdir/lower111:lowerdir/lower112:lowerdir/lower113:lowerdir/lower114:lowerdir/lower115:lowerdir/lower116:lowerdir/lower117:lowerdir/lower118:lowerdir/lower119:lowerdir/lower120:lowerdir/lower121:lowerdir/lower122:lowerdir/lower123:lowerdir/lower124:lowerdir/lower125:lowerdir/lower126:lowerdir/lower127:lowerdir/lower128:lowerdir/lower129:lowerdir/lower130:lowerdir/lower131:lowerdir/lower132:lowerdir/lower133:lowerdir/lower134:lowerdir/lower135:lowerdir/lower136:lowerdir/lower137:lowerdir/lower138:lowerdir/lower139:lowerdir/lower140:lowerdir/lower141:lowerdir/lower142:lowerdir/lower143:lowerdir/lower144:lowerdir/lower145:lowerdir/lower146:lowerdir/lower147:lowerdir/lower148:lowerdir/lower149:lowerdir/lower150:lowerdir/lower151:lowerdir/lower152:lowerdir/lower153:lowerdir/lower154:lowerdir/lower155:lowerdir/lower156:lowerdir/lower157:lowerdir/lower158:lowerdir/lower159:lowerdir/lower160:lowerdir/lower161:lowerdir/lower162:lowerdir/lower163:lowerdir/lower164:lowerdir/lower165:lowerdir/lower166:lowerdir/lower167:lowerdir/lower168:lowerdir/lower169:lowerdir/lower170:lowerdir/lower171:lowerdir/lower172:lowerdir/lower173:lowerdir/lower174:lowerdir/lower175:lowerdir/lower176:lowerdir/lower177:lowerdir/lower178:lowerdir/lower179:lowerdir/lower180:lowerdir/lower181:lowerdir/lower182:lowerdir/lower183:lowerdir/lower184:lowerdir/lower185:lowerdir/lower186:lowerdir/lower187:lowerdir/lower188:lowerdir/lower189:lowerdir/lower190:lowerdir/lower191:lowerdir/lower192:lowerdir/lower193:lowerdir/lower194:lowerdir/lower195:lowerdir/lower196:lowerdir/lower197:lowerdir/lower198:lowerdir/lower199

符合预期

hiixfj 通过合并 Pull Request !149: [openEuler-22.09] Add sysfs file for overlayfs任务状态待办的 修改为已完成 3年前

登录 后才可以发表评论

状态
负责人
项目
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
预计工期 (小时)
开始日期   -   截止日期
-
置顶选项
优先级
分支
参与者(2)
5329419 openeuler ci bot 1632792936 hiixfj-hiixfj
C
1
https://gitee.com/openeuler/kernel.git
git@gitee.com:openeuler/kernel.git
openeuler
kernel
kernel

搜索帮助