cephfs删除报nospace的问题
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的问题的更多相关文章
- mysql用查询结果当删除的判断条件进行删除报错1093 You can't specify target table解决方法
mysql用查询结果当删除的判断条件进行删除报错1093 You can't specify target table解决方法 #分开两个sql执行正常的语句,只保留最新1000条数据,删掉1000条 ...
- gulp使用技巧-删除node_modules文件夹,解决目录层次太深删除报错的问题
问题描述: 在使用gulp当中,自动生成的node_modules文件夹,因为文件目录层级太深,无法系统删除,用360粉碎工具也报错 解决方法: 使用npm中的插件rimraf,专门用于删除的模块插件 ...
- cocos2dx 编译遇到资源里有.svn文件不能删除报错的问题
使用cocos compile -p android 对项目进行编译的时候,遇到res文件中包含了只读属性的svn目录,不能进行删除而报错. 错误如下图(build_android.py里面对.svn ...
- hibernate 级联删除报更新失败的问题(org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update)
首先hibernate级联删除的前提是,首先需要在映射文件中配置,配置多表之间的关联关系: 下面以部门表(Dept)和员工表(Emp)为例: 1.在Emp.hbm.xml映射文件中配置many-to- ...
- (7)Launcher3客制化之,改动单屏幕后,Fix在Hotseat拖动应用删除报错
改动单屏幕后,在workspace里面拖动图标.到删除button上松开的时候,报错问题. 而且无法再次显示拖动的图标. 拖动松开手时候触发 public void onDropCompleted(f ...
- T-SQL openquery 删除报错 “键列信息不足或不正确。更新影响到多行”
DELETE OPENQUERY (VERYEAST_MAIN_MYSQL_CONN, 'SELECT college_userid FROM college_student_information ...
- docker log 批量删除报错: find: `/var/lib/docker/containers/': 没有那个文件或目录
问题描述: 服务器上面docker log太多,打算用之前写的批量清理shell脚本清理掉,但是发现报错. find: `/var/lib/docker/containers/': 没有那个文件或目录 ...
- mysql批量删除报1064原因
DELETE FROM table_name t where t......; 报1064 错误,原因MySQL 中delete 语句不能给表名起别名. 另外.如果记录不存在,delete from ...
- Docker删除镜像报错
问题描述: 笔者意图删除nginx-file的镜像文件,但通过命令删除镜像时出现报错信息,提示存在多个引用(即一个IMAGE可被多个REPOSITORY引用,故删除会出现失败),如下: [root@k ...
随机推荐
- 界面酷炫,功能强大!这款 Linux 性能实时监控工具超好用!
对于维护.管理Linux系统来说,它的性能监控非常重要,特别是实时监控数据,这个数据有利于我们判断服务器的负载压力,及时调整资源调配,也有助于更好的服务于业务.所以,今天民工哥给大家安利一款 Linu ...
- Verilog基础入门——Vivado工程创建(三)
Verilog基础入门--Vivado工程创建(三) Vivado是Verilog语言的一个集成环境,目前使用的版本为英文版,简单介绍一下在Vivado中创建一个工程并写入源文件 [配置] win10 ...
- swoole为什么不建议使用static和global
$http = new swoole_http_server("0.0.0.0", 9501); $http->on("request", functio ...
- git 报错 error: failed to push some refs to .....
git push 代码的时候报错,报错如下: 这种报错是因为远程仓库的代码和本地仓库的代码不同步,对本地的代码进行一次拉取,再 git push 就可以解决了 通过如下命令进行代码合并 git pul ...
- 在git下如何创建分支
创建main分支下的远程分支dev: 直接输入dev,就可以创建在main分支下的远程分支dev了 在dev下创建devdev
- 论文解读《Understanding the Effective Receptive Field in Deep Convolutional Neural Networks》
感知野的概念尤为重要,对于理解和诊断CNN网络是否工作,其中一个神经元的感知野之外的图像并不会对神经元的值产生影响,所以去确保这个神经元覆盖的所有相关的图像区域是十分重要的:需要对输出图像的单个像素进 ...
- net core webapi多版本控制与nswag 交互
前言 首先希望webapi 支持多版本,swagger针对不同的版本可进行交互.netcore 基于Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer 包, ...
- Pycharm快捷键与基本使用方法
pycharm常用快捷键设置 关注公众号"轻松学编程"了解更多. 可在file->settings->keymap中查找关键字然后修改快捷键 1.多行编辑 ALT+鼠标 ...
- [P2114] [NOI2014]起床困难综合症 (位运算)
题面 传送门:https://www.luogu.org/problemnew/show/P2114 Solution 一道很有意思的位运算题. 要做这一题,我们首先得了解一个很重要的特点 位运算过程 ...
- 虚拟环境及venv和virtualenv
一.虚拟环境概述 Python应用程序通常会使用不在标准库内的软件包和模块.应用程序有时需要特定版本的库,修复特定的错误,或者可以使用库的过时版本的接口编写应用程序. 这说明一个Python安装可能无 ...