背景
Curve 当前的分布式块存储 CurveBS 和分布式文件存储 CurveFS 都实现了回收站功能。这篇文章为大家介绍一下 CurveFS 的回收站功能。如果大家有兴趣,下次再为大家介绍以下 CurveBS 的回收站功能。
Curve 文件系统的回收站功能,分为几个功能点进行进行开发。
最基础的回收站功能
提供修改回收站过期时间修改功能(待实现)
提供回收站过滤功能(待实现)
提供目录批量删除加速功能(待实现)
提供目录的原路径恢复(待实现)
CurveFS 回收站功能
1、开启回收站功能
能够在创建文件系统的时候,通过配置指定是否开启回收站功能。通过一个 recycleTimeHour 配置项,这个值为一个非负整数。如果这个配置项如果设置为0,表示这个FS不开启FS功能;如果这个配置项不为0,表示删除的文件进入回收站之后,在回收站保留的时间,超过这个时间之后,这个文件会从回收站进行清理。这个配置项默认为0,在 curve/curvefs/conf/tools.conf。
# fs recycle, if set 0, disable fs recycle, delete files directly,# if set not 0, enable fs recycle, delete files after a period of timerecycleTimeHour=0
如果通过 curveadm 工具挂载 Curve 文件系统,可以修改 client.yaml 文件,增加一项 recycleTimeHour。比如,修改回收站时间为删除文件后,文件在回收站保留1个小时,1个小时后自动被回收站清理,可以在 curveadm 挂载 FS 使用的 client.yaml 配置文件中,增加一行:
recycleTimeHour: 1
2、查看回收站功能是否开启
curvefs_tool list-fs{"fsInfo": [{"fsId": 2,"fsName": "fs2","status": "INITED","rootInodeId": "1",......"recycleTimeHour": 1},{"fsId": 1,"fsName": "fs","status": "INITED","rootInodeId": "1",......"recycleTimeHour": 0}]}
未开启回收站$ ls cwdir1/ -alhtotal 0开启了回收站$ ls cwdir2/ -alhtotal 0drwxrwxrwt 2 root root 0 Jan 28 16:18 .recycle
3、删除的文件进入回收站
创建一个目录dir1,和目录下文件file1~/cwdir2$ mkdir dir1~/cwdir2$ touch dir1/file1删除之后,查看原路径,目录和文件不存在了~/cwdir2$ rm -r dir1~/cwdir2$ ls -alhtotal 0drwxrwxrwt 3 root root 0 Jan 28 16:38 .recycle查看回收站,多了一个目录,格式为 年-月-日-小时~/cwdir2$ ls -alh .recycle/total 0drwxr-xr-x 3 root root 4.0K Jan 28 16:38 2023-01-28-16时间目录下,有删除的文件和目录,名字加上了自己和父母的inodeid作为前缀~/cwdir2$ ls -alh .recycle/2023-01-28-16/total 0drwxr-xr-x 2 root root 4.0K Jan 28 16:38 1_5242880_dir1-rw-r--r-- 1 root root 0 Jan 28 16:38 5242880_2097152_file1~/cwdir2$
4、CurveFS 回收站的恢复
~/cwdir2$ ls -alh .recycle/2023-01-28-17/total 0drwxr-xr-x 2 root root 4.0K Jan 28 17:06 1_8388608_dir1-rw-r--r-- 1 root root 0 Jan 28 17:06 8388608_4194304_file1~/cwdir2$ mv .recycle/2023-01-28-17/8388608_4194304_file1 ./file1_new~/cwdir2$ lsfile1_new~/cwdir2$ ls -alh .recycle/2023-01-28-17/total 0drwxr-xr-x 2 root root 4.0K Jan 28 17:06 1_8388608_dir1
CurveFS 回收站会定期检查是否有文件已经过期,清理过期的文件,自动清理工作由 metaserver 负责。metaserver 会定期扫描回收站下的目录,根据删除的时间(前面提到的 年-月-日-小时 目录)和设置的回收站时间(前面提到的 recycleTimeHour)判断是否需要清理。每个fs有自己独立的扫描清理任务,各FS之间互不干扰。每个FS默认1小时扫描检查1次回收站。相关的配置在 curve/curvefs/conf/metaserver.conf。
# recycle options# metaserver scan recycle period, default 1hrecycle.manager.scanPeriodSec=3600# metaserver recycle cleaner scan list dentry limit, default 1000recycle.cleaner.scanLimit=1000
CurveFS 回收站待完善功能
目前回收站功能是否开启不支持修改,以及回收站时间也不支持修改,只能在创建FS的时候指定。后续需要提供修改回收站过期时间修改功能。
提供回收站过滤功能。如果 CurveFS 所有的文件删除后不加筛选都进入回收站,可能会在回收站放入太多的垃圾文件,占用FS的资源。可考虑增加回收站白名单或者黑名单,对进入回收站的文件进行过滤。
提供目录批量删除加速功能。CurveFS 是通过 fuse 的方式挂载到宿主机上使用,如果删除一个有1亿文件的目录,fuse 会向 CurveFS 下发1亿条删除请求。如果提供一个批量删除加速的工具,CurveFS 只接收1条删除请求,由 CurveFS 系统自己进行删除,会大大提高删除的效率。
提供目录的原路径恢复,当前恢复回收站中的文件,只能通过mv的方式一个一个恢复文件。如果删除一个目录,有时候是希望能够按照目录原来的层级结构,把目录下的文件进行恢复。回收站中的文件记录了删除的时候的父目录的 inodeid 和自己的 inodeid,利用这些信息,可以拼凑出的原来的层级结构,进而把文件自动恢复的删除前的原路径。
以上都是 CurveFS 回收站规划但是还没开展的功能,欢迎感兴趣的社区同学进群一起讨论&参与,也强烈欢迎社区同学对于回收站提出其他feat的想法~



关于 Curve
Curve 亦可作为云存储中间件使用 S3 兼容的对象存储作为数据存储引擎,为公有云用户提供高性价比的共享文件存储。




