XFS(Structure needs cleaning)

事件缘起于遇到的一个现场问题

排查思路

先问原因:
如果是主机不正常关机,很可能是 操作系统的文件系统损害
如果是docker的某种操作,那就修改docker
如果以上都没问题,再考虑修复clickhouse
如果是主机问题,还需要用户解决呢;如果是二、三记录场景,看看如何避免。
不论哪个,先询问情况吧。可以用uptime、docker ps等看看启动时间,然后对照日志时间,看看是否对的上
16:16
估计是主机非正常关机,linux系统很稳定,很少出现文件系统损害。
如果是这样,需要开远程,慎重验证、修复。并向用户澄清,有丢失数据的风险(毕竟文件系统坏了),在首肯之后再操作

如果挂载了特殊的 硬件,如:RAID、NAS,由用户的主机管理员解决。(坚决禁止NAS)

非正常关机了?或者升级k8s重启?
merge过程分多阶段:
生成新文件夹
将待合并的多个文件夹,读取合并到新文件夹
删除旧文件夹
修改相关的系统表(分区表等)
这个问题,可以到github看clickhouse源代码,然后猜测问题点

df -T -x tmpfs

看来文件夹都在,只是文件系统记录的 状态 和 落盘 不一致了

文件系统需要卸载,所以先要看 有哪些应用在使用 /opt/local-path-provisioner,将k8s相关的服务都关闭吧

!!确定相关业务已经关闭,然后一个个执行

umount /dev/sdb1
xfs_repair /dev/sdb1
mount /dev/sdb1

lsblk -f
17:39
parted -l 可以查看未挂载的文件系统类型,以及那些分区尚未格式化

upload successful

会不会还有程序占用着相关文件?
lsof +d /opt/local-path-xxxxxprovoider
后边的路径就是挂载路径

刚还试了
没有lsof命令

ps -elf 看看是否有可疑进程,如果关闭k8s,应该没有几个进程在了

pstree命令执行一下,我看看继承顺序

另一个经常出的日志占用内存问题:删除文件后,进程依然持有文件描述符,内容将输出到内存

以后现场会发生的问题:经常出现断网——造成终端停止、里边的长时间命令就会失败
建议方法:启动一个tmux,启动命令后,脱离终端,等过一段时间再attach上去

参考文档

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/managing_file_systems/checking-an-xfs-file-system-with-xfs-repair_checking-and-repairing-a-file-system

https://bbs.qunyingkeji.com/2052/

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/managing_file_systems/proc_repairing-an-xfs-file-system-with-xfs_repair_checking-and-repairing-a-file-system

https://man7.org/linux/man-pages/man8/lsblk.8.html

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/managing_file_systems/unmounting-a-file-system-with-umount_assembly_mounting-file-systems