注意
本文档适用于 Ceph 的开发版本。
在 Windows 上对 Ceph 进行故障排除
MSI 安装程序
MSI 源代码可以在这里查阅: https://github.com/cloudbase/ceph-windows-installer
以下命令可用于生成 MSI 日志
msiexec.exe /i $msi_full_path /l*v! $log_file
WNBD 驱动程序安装失败将记录在此处: C:\Windows\inf\setupapi.dev.log。卸载驱动程序后需要重启服务器,否则后续安装尝试可能会失败。
Wnbd
对于 WNBD 故障排除,请查看此页面: https://github.com/cloudbase/wnbd#troubleshooting
权限
大多数 rbd-wnbd 和 rbd device 命令需要特权。请确保使用提升权限的 PowerShell 或 CMD 命令提示符。
崩溃转储
用户空间崩溃转储可以放置在可配置的位置,并为所有应用程序或仅为预定义的应用程序启用,如这里所述: https://docs.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps。
每当 Windows 应用程序崩溃时,都会向 Application Windows 事件日志提交一个事件,事件 ID 为 1000。该条目还将包括进程 ID、故障模块名称和路径以及异常代码。
请注意,为了分析崩溃转储,需要调试符号。我们目前使用 MinGW 构建 Ceph,因此默认情况下 DWARF 符号将嵌入到二进制文件中。windbg 不支持此类符号,但可以使用 gdb。
gdb 可以调试正在运行的 Windows 进程,但它不能打开 Windows 小转储。在将此功能合并到上游之前,可以使用以下 gdb 分支: https://github.com/ssbssa/gdb/releases。作为替代方案,可以使用 cv2pdb 转换 DWARF 符号,但请注意此工具对 C++ 的支持有限。
ceph 工具
ceph Python 工具目前无法在 Windows 上本地使用。稍加改动它可能会运行,但主要问题是 Python 目前不允许在 Windows 上使用 AF_UNIX: https://bugs.python.org/issue33408
作为替代方案,可以通过适用于 Linux 的 Windows 子系统 (WSL) 使用 ceph 工具。例如,可以通过以下方式联系正在运行的 Windows RBD 守护程序
ceph daemon /mnt/c/ProgramData/ceph/out/ceph-client.admin.61436.1209215304.asok help
IO 计数器
除了标准的 RBD 性能计数器外,还可以使用以下命令检索 libwnbd IO 计数器
rbd-wnbd stats $imageName
同时,可以使用以下命令获取 WNBD 驱动程序计数器
wnbd-client stats $mappingId
请注意,wnbd-client 映射标识符将是完整的 RBD 镜像规范(rbd device list 输出的 device 列)。
缺失的库
如果缺少所需的 DLL 之一或不支持,Ceph 工具可能会静默退出并返回 -1073741515 返回代码。
Dependency Walker 工具可用于确定缺失的库。