ceph Vol 45 Issue 2

CephFS: No space left on device

After upgrading to 10.2.3 we frequently see messages like

'rm: cannot remove '...': No space left on device

The folders we are trying to delete contain approx. 50K files 193 KB each.

The cluster state and storage available are both OK:

cluster 98d72518-6619-4b5c-b148-9a781ef13bcb

health HEALTH_WARN

mds0: Client XXX.XXX.XXX.XXX failing to respond to cache pressure

mds0: Client XXX.XXX.XXX.XXX failing to respond to cache pressure

mds0: Client XXX.XXX.XXX.XXX failing to respond to cache pressure

mds0: Client XXX.XXX.XXX.XXX failing to respond to cache pressure

mds0: Client XXX.XXX.XXX.XXX failing to respond to cache pressure

monmap e1: 1 mons at {000-s-ragnarok=XXX.XXX.XXX.XXX:6789/0}

election epoch 11, quorum 0 000-s-ragnarok

fsmap e62643: 1/1/1 up {0=000-s-ragnarok=up:active}

osdmap e20203: 16 osds: 16 up, 16 in

flags sortbitwise

pgmap v15284654: 1088 pgs, 2 pools, 11263 GB data, 40801 kobjects

23048 GB used, 6745 GB / 29793 GB avail

1085 active+clean

2 active+clean+scrubbing

1 active+clean+scrubbing+deep

Has anybody experienced this issue so far?

这个问题是作者在升级了一个集群以后(jewel 10.2.3),做删除的时候,发现提示了 No space left on device,按正常的理解做删除不会出现提示空间不足

这个地方的原因是,有一个参数会对目录的entry做一个最大值的控制 mds_bal_fragment_size_max ,而这个参数实际上在做删除操作的时候,当文件被unlink的时候,被放入待删除区的时候,这个也是被限制住的,所以需要调整这个参数,如果有上百万的文件被等待删除的时候,可能就会出现这个情况,并且出现 failing to respond to cache pressure 我们根据自己的需要去设置这个值

默认的 mds_bal_fragment_size_max=100000,也就是单个目录10万文件,如果不调整,单目录写入10万文件就能出现上面的问题,根据需要调大这个值

这个地方可以用命令来监控mds的当前状态

[root@lab8106 mnt]# ceph daemonperf mds.lab8106
-----mds------ --mds_server-- ---objecter--- -----mds_cache----- ---mds_log----
rlat inos caps|hsr hcs hcr |writ read actv|recd recy stry purg|segs evts subm|
0 163k 5 | 0 0 0 | 0 0 36 | 0 0 145k 0 | 33 29k 0
0 163k 5 | 0 0 0 | 6 0 34 | 0 0 145k 6 | 33 29k 6
0 163k 5 | 0 0 0 | 24 0 32 | 0 0 145k 24 | 32 29k 24
0 163k 5 | 0 0 0 | 42 0 32 | 0 0 145k 42 | 32 29k 42
0 159k 5 | 0 0 0 |972 0 32 | 0 0 144k 970 | 33 27k 971
0 159k 5 | 0 0 0 |905 0 32 | 0 0 143k 905 | 31 28k 906
0 159k 5 | 0 0 0 |969 0 32 | 0 0 142k 969 | 32 29k 970
0 159k 5 | 0 0 0 |601 0 31 | 0 0 141k 601 | 33 29k 602

这个地方还有一个硬链接删除以后没有释放stry的问题,最新版的master里面已经合进去了代码(scan_link

修复过程如下

执行flush MDS journal

ceph daemon mds.xxx flush journal

停止掉所有mds

stop all mds

执行

cephfs-data-scan scan_links

重启mds

restart mds

执行命令

ceph daemon mds.x scrub_path / recursive repair

执行完了以后去对目录进行一次ll,可以看到mds_cache的stry的就会被清理干净了

这个问题就可以解决了,实际测试中在换了新版本以后,重启后然后进行目录的ll,也能清空stry

cephfs删除报nospace的问题的更多相关文章

  1. mysql用查询结果当删除的判断条件进行删除报错1093 You can't specify target table解决方法

    mysql用查询结果当删除的判断条件进行删除报错1093 You can't specify target table解决方法 #分开两个sql执行正常的语句,只保留最新1000条数据,删掉1000条 ...

  2. gulp使用技巧-删除node_modules文件夹,解决目录层次太深删除报错的问题

    问题描述: 在使用gulp当中,自动生成的node_modules文件夹,因为文件目录层级太深,无法系统删除,用360粉碎工具也报错 解决方法: 使用npm中的插件rimraf,专门用于删除的模块插件 ...

  3. cocos2dx 编译遇到资源里有.svn文件不能删除报错的问题

    使用cocos compile -p android 对项目进行编译的时候,遇到res文件中包含了只读属性的svn目录,不能进行删除而报错. 错误如下图(build_android.py里面对.svn ...

  4. hibernate 级联删除报更新失败的问题(org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update)

    首先hibernate级联删除的前提是,首先需要在映射文件中配置,配置多表之间的关联关系: 下面以部门表(Dept)和员工表(Emp)为例: 1.在Emp.hbm.xml映射文件中配置many-to- ...

  5. (7)Launcher3客制化之,改动单屏幕后,Fix在Hotseat拖动应用删除报错

    改动单屏幕后,在workspace里面拖动图标.到删除button上松开的时候,报错问题. 而且无法再次显示拖动的图标. 拖动松开手时候触发 public void onDropCompleted(f ...

  6. T-SQL openquery 删除报错 “键列信息不足或不正确。更新影响到多行”

    DELETE OPENQUERY (VERYEAST_MAIN_MYSQL_CONN, 'SELECT college_userid FROM college_student_information ...

  7. docker log 批量删除报错: find: `/var/lib/docker/containers/': 没有那个文件或目录

    问题描述: 服务器上面docker log太多,打算用之前写的批量清理shell脚本清理掉,但是发现报错. find: `/var/lib/docker/containers/': 没有那个文件或目录 ...

  8. mysql批量删除报1064原因

    DELETE FROM table_name  t where t......; 报1064 错误,原因MySQL 中delete 语句不能给表名起别名. 另外.如果记录不存在,delete from ...

  9. Docker删除镜像报错

    问题描述: 笔者意图删除nginx-file的镜像文件,但通过命令删除镜像时出现报错信息,提示存在多个引用(即一个IMAGE可被多个REPOSITORY引用,故删除会出现失败),如下: [root@k ...

随机推荐

  1. git reset 与 git revert的区别?

    一,git reset的功能: 该命令修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本, 说明: 修改后,push到远程仓库时需要使用"git push -f"提 ...

  2. centos8平台使用slabtop监控slab内存的状态

    一,slabtop 所属的包: [root@yjweb ~]# whereis slabtop slabtop: /usr/bin/slabtop /usr/share/man/man1/slabto ...

  3. JS XMLHttpRequest请求

    前言 我们知道jq的请求非常简短好用,但是其实js原生的请求也不差,并且不用插件更能说明自己本身的技术已经很强了,别人看自己代码一脸懵逼的时候,这时就可以一一解释这些代码的用处,更能让别人敬佩! JS ...

  4. Redis集群环境搭建实践

    0 Redis集群简介 Redis集群(Redis Cluster)是Redis提供的分布式数据库方案,通过分片(sharding)来进行数据共享,并提供复制和故障转移功能.相比于主从复制.哨兵模式, ...

  5. IDEA上运行Flink任务

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. 【总结】sqlserver

    1 基础 1.1 简介 sqlserver是闭源的,必须运行在windows平台上的数据库.默认事务隔离级别是读已提交(commit read).全称Microsoft SQL Server,说以也被 ...

  7. bat批处理常用脚本

    windows下有很多场景需要编写批处理来解决问题,跟定时任务相结合使用更佳. 1.创建文件,md,mkdir都可以进行文件创建 set AwrPath=D:\OracleTabChk if not ...

  8. Java学习的第二十六天

    1.过滤处理流 DataOutputStream输入数据 用DataInputStream读数据 2.方法太多记不清 3.明天学习内存操作流和缓冲流

  9. OpenCascade拓扑对象之:拓扑对象的层次结构

    @font-face { font-family: "Times New Roman" } @font-face { font-family: "宋体" } @ ...

  10. 【新阁教育】基于ModbusTCP实现西门子1200PLC定位控制案例

    1. 引言 今天新阁教育给大家分享一个<基于ModbusTCP实现西门子1200PLC定位控制案例>,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusT ...