You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ceph Crushtool管道命令执行失败:输入文件‘-’未找到问题求助

解决Ceph crushtool编译命令报错"input file - not found"的问题

这个问题我之前调试CRUSH映射时也碰到过,核心原因是crushtool的-c(编译)选项对标准输入(stdin)的处理逻辑和-d(反编译)选项不一致:-d默认支持用-表示从stdin读取内容,但-c选项在很多Ceph版本中并不会自动将-解析为stdin,因此才会抛出"input file - not found"的错误。

下面提供几种可行的解决方法:

方法1:使用临时文件中转(最稳妥,适合调试/修改场景)

先将反编译后的文本CRUSH映射保存到临时文件,再用crushtool编译:

# 导出并反编译CRUSH映射到临时文件
ceph osd getcrushmap | crushtool -d - > crushmap_temp.txt

# 编译文本映射为二进制文件(指定输出文件为new_crushmap.bin)
crushtool -c crushmap_temp.txt -o new_crushmap.bin

# (可选)清理临时文件
rm crushmap_temp.txt

这种方法逻辑清晰,还方便你在编译前查看或修改文本格式的CRUSH映射,适合大多数场景。

方法2:直接指定从标准输入读取(无需临时文件)

部分Ceph版本中,crushtool支持通过/dev/stdin明确指定从标准输入读取内容,替代-即可解决问题:

ceph osd getcrushmap | crushtool -d - | crushtool -c /dev/stdin -o new_crushmap.bin

这里/dev/stdin是系统提供的标准输入设备文件,crushtool能正确识别它作为输入源,从而完成编译。

方法3:检查并升级Ceph版本(针对老旧版本)

如果上述方法都无效,可能是你使用的Ceph版本过于老旧,crushtool的-c选项完全不支持从stdin读取内容。可以先查看crushtool的帮助文档确认:

crushtool --help

如果帮助信息中-c选项的说明只提到需要指定具体文件路径,建议升级到较新的Ceph版本(比如Nautilus及以后),新版本的crushtool已经修复了这个参数解析问题,直接使用-作为输入源也能正常工作。

内容的提问来源于stack exchange,提问作者USR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 11:07:51