cephfs shell cp 数据内容丢失问题分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cephfs shell cp 数据内容丢失问题分析相关的知识,希望对你有一定的参考价值。

参考技术A 业务在使用cephfs共享存储的时候遇到一个诡异的问题,容器内执行了cp操作之后,在其他挂载目录能看到新的文件,但是数据内容为空,大小为0。但是在容器里观察和宿主机上观察一切正常。
A、B均挂载了同一个cephfs
宿主机A容器里执行cp aaa bbb
容器里:

B机器:

好像对ceph协议的支持不怎么完善,此路不通。

于是选择根据日志去排查问题。
首先打开mds的日志:
ceph tell mds.* injectargs --debug-ms 5/5

确实有创建新文件的请求:

但是没有具体文件内容和大小的日志

然后打开osd的日志:
ceph tell osd.* injectargs --debug-osd 10/10
但是没有发现关联到新文件的日志,所以没法确认文件的内容是否被写入了

正当一筹莫展的时候,同事有了重大发现,当替换成其他镜像进行同样的操作时问题消失,查看了有问题的镜像系统为alpine,换成centos和ubuntu均没有该问题。我们又做了另一个试验,升级的client的内核,ceph官方推荐在4.*的内核下使用cephfs client的kernel模式,但是我们是用centos的默认3.10内核。我们把client的内核升级到4.14.15,再进行一样的操作问题也消失了!!!

到这里问题似乎付出了水面,初步判断是alpine的cp命令在3.10内核下面会触发cephfs的bug导致写入内容失败,我们方案是升级到4.*的内核。ceph的日志着实难懂,后续搞清楚了之后再补上结论 : )

拾遗:shell 技巧之 yes 小工具

当需要在脚本中自动回答 ‘yes‘ 或 ‘no‘ 等选项时,就可以调用 yes 小工具,语法如下:

技术分享

如(对于管道后面的命令执行过程中提出的每个询问,都发送定制的内容 no 过去):

  yes no | cp -i testfile /tmp

就等同于:

  cp -n testfile /tmp

对于没有像 cp 一样提供内置选项的工具,就可以使用 yes 工具自动回答任何需要的内容。

 

以上是关于cephfs shell cp 数据内容丢失问题分析的主要内容,如果未能解决你的问题,请参考以下文章

django分页后查询丢失

拾遗:shell 技巧之 yes 小工具

服务器挂掉 进入一个基本的shell系统将数据全部cp便于恢复

Shell之变量的基础知识

备份MySQL数据库

CP 001.输入不定的情况