ClickHouse服务器文件系统错误:指定文件或目录不存在
ClickHouse文件系统错误排查:找不到data.mrk3文件
错误日志原文
[root@localhost /]# sudo tail -n 10 /var/log/clickhouse-server/clickhouse-server.err.log 9. ? @ 0x154cb2dc in /usr/bin/clickhouse 10. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0xaf6546a in /usr/bin/clickhouse 11. ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()>(void&&, void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()&&...)::'lambda'()::operator()() @ 0xaf674a4 in /usr/bin/clickhouse 12. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0xaf62837 in /usr/bin/clickhouse 13. ? @ 0xaf662fd in /usr/bin/clickhouse 14. start_thread @ 0x7ea5 in /usr/lib64/libpthread-2.17.so 15. __clone @ 0xfeb0d in /usr/lib64/libc-2.17.so Cannot print extra info for Poco::Exception (version 22.2.2.1) 2022.08.30 17:34:13.036190 [ 11926 ] {} <Error> Application: filesystem error: in directory_iterator::directory_iterator(...): No such file or directory [/var/lib/clickhouse/store/848/848085d9-4c3c-4a59-9c5b-6481f8022781/202208_215813_215813_0/data.mrk3]
日志翻译
无法打印Poco::Exception的额外信息(版本22.2.2.1);
2022年8月30日 17:34:13.036190 [ 11926 ] {} <错误> 应用程序:文件系统错误:在directory_iterator::directory_iterator(...)中:找不到指定的文件或目录 [/var/lib/clickhouse/store/848/848085d9-4c3c-4a59-9c5b-6481f8022781/202208_215813_215813_0/data.mrk3]
可能原因
- 文件/目录误删:运维操作、自动清理脚本或磁盘空间回收时,意外删除了该标记文件或上级目录
- 存储介质故障:磁盘出现坏道、挂载点异常,导致文件无法被正常读取,系统返回"不存在"错误
- 服务异常终止:ClickHouse意外崩溃时,数据未完成落盘,导致标记文件缺失或损坏
- 权限不足:ClickHouse进程(默认
clickhouse用户)无该文件或目录的读取权限,系统返回权限类错误但被判定为"文件不存在"
解决方案
1. 验证文件真实状态
执行以下命令检查文件路径是否存在,以及权限情况:
# 检查目标文件所在目录的内容 ls -l /var/lib/clickhouse/store/848/848085d9-4c3c-4a59-9c5b-6481f8022781/202208_215813_215813_0/ # 检查上级目录的权限信息 stat /var/lib/clickhouse/store/848/848085d9-4c3c-4a59-9c5b-6481f8022781/
2. 修复权限问题
如果确认是权限不足,调整目录和文件的所属用户为clickhouse:
chown -R clickhouse:clickhouse /var/lib/clickhouse/store/848/848085d9-4c3c-4a59-9c5b-6481f8022781/
3. 恢复缺失文件
- 有备份的情况:从ClickHouse备份(如
clickhouse-backup生成的备份)中恢复对应的data.mrk3标记文件及关联的data.bin数据文件 - 无备份的情况:删除损坏的分区后重新同步数据。先定位分区所属表,执行删除命令:
ALTER TABLE your_table_name DROP PARTITION '202208_215813_215813_0';
之后重新导入该分区的原始数据。
4. 检查存储健康状态
排查磁盘硬件或挂载问题:
# 检查磁盘挂载状态 df -h # 检查磁盘健康(替换为实际磁盘设备) smartctl -a /dev/your_disk_device
5. 重启服务验证
完成上述操作后,重启ClickHouse服务确认问题是否解决:
systemctl restart clickhouse-server
内容的提问来源于stack exchange,提问作者haoaremesda
相关产品推荐
相关产品推荐

