跳转至内容
  • 万一实现了呢

    3k 7k
    3k 主题
    7k 帖子
    S
    一、问题描述 在 Ubuntu 26.04.1 LTS 服务器上,XTerminal 的服务器监控功能可以正常显示 CPU、内存、网络和磁盘容量信息,但磁盘 I/O 读取速度、写入速度始终显示为 0.0 B。 经过排查发现,Linux 内核能够正常统计磁盘 I/O,XTerminal 远程采集脚本也可以计算读写速度,但对于 LVM(Logical Volume Manager)逻辑卷存在设备识别和名称关联问题。 经过修改采集脚本的设备过滤规则,以及将 I/O 设备名统一为文件系统挂载源名称后,磁盘读写速度成功恢复显示。 二、问题环境 项目 环境 操作系统 Ubuntu 26.04.1 LTS (Resolute Raccoon) 内核版本 7.0.0-34-generic 文件系统 ext4 磁盘结构 SCSI 磁盘 + LVM 根文件系统 /dev/mapper/ubuntu--vg-ubuntu--lv 对应块设备 /dev/dm-0 XTerminal 远程采集脚本版本 26 XTerminal 客户端版本 最新版(具体版本号待补充) 重装最新远程监控脚本后,问题依然存在。 三、发现的两个问题 问题 1:采集脚本没有包含 dm-* 设备 文件路径: ~/.xterminal/sub/fs_stats/fs_stats.sh 当前远程脚本版本 26 的设备过滤逻辑为: is_tracked_block_device() { case "$1" in sd[a-z]*|vd[a-z]*|hd[a-z]*|xvd[a-z]*|nvme*n*|mmcblk*|mtdblock*|ubiblock*|loop*) return 0 ;; esac return 1 } 问题:缺少 dm-* 设备的匹配规则。 Ubuntu 使用 LVM 时,实际逻辑卷设备为 dm-0。虽然 /proc/diskstats 包含该设备的 I/O 统计数据,但采集脚本会将其过滤。 手动增加: |dm-[0-9]* 之后,fs_stats.stats 成功出现: - device: dm-0 rxPerSec: 0 wxPerSec: 84195 source: proc 证明该设备可以正常采集。 问题 2:LVM 设备名称没有正确关联 添加 dm-0 采集支持后,监控界面仍然显示 0.0 B。 进一步发现: 文件系统容量统计使用: fsSize: - fs: /dev/mapper/ubuntu--vg-ubuntu--lv type: ext4 mount: / 磁盘 I/O 统计使用: fsStats: - device: dm-0 rxPerSec: 0 wxPerSec: 230286 source: proc 两个名称实际指向同一个块设备,但 XTerminal 无法正确关联其读写速度。 为验证这一问题,修改采集脚本,将 dm-0 对外输出的设备名改成: /dev/mapper/ubuntu--vg-ubuntu--lv 修改后采集结果: fsStats: - device: /dev/mapper/ubuntu--vg-ubuntu--lv rxPerSec: 0 wxPerSec: 68949 source: proc 测试结果:XTerminal 磁盘写入速度成功恢复显示。 进一步使用 dd 进行直接读取测试,产生实际磁盘读取 I/O,XTerminal 也能够正确显示读取速度。 说明客户端可以展示读取和写入速度,异常与 LVM 设备名称关联具有明确关系。 四、复现与验证结果 测试操作 结果 原版脚本监控 LVM 根分区 读写速度始终为 0 检查 /proc/diskstats 存在正常 I/O 数据 重装最新采集脚本 未解决 添加 dm-[0-9]* 匹配规则 可以采集 dm-0,但界面仍为 0 将 dm-0 输出为 ubuntu--vg-ubuntu--lv 未恢复 将 dm-0 输出为完整 /dev/mapper/ubuntu--vg-ubuntu--lv 写入速度恢复 使用 dd 产生直接磁盘读取 读取速度恢复 恢复原脚本 临时修复不再保留 补充说明:低负载下读取速度为 0 是正常情况,因为实际采样结果 rxPerSec 也可能为 0,不属于本次 Bug。 五、原因分析 根据实际脚本及验证结果,推测存在两个需要修复的兼容性问题: 1. 远程采集脚本缺少 Device Mapper 设备支持。 当前设备过滤规则没有包含 dm-*,导致 LVM 逻辑卷不能直接进入磁盘 I/O 统计列表。 2. 磁盘容量和 I/O 数据的设备标识缺少规范化关联。 fsSize.fs 使用 /dev/mapper/...,而 fsStats.device 使用 dm-0。 两者虽然属于同一个逻辑卷,但当前展示链路未能正确关联。将 I/O 设备名称改成与 fsSize.fs 完全一致后,监控恢复正常。 六、建议修复方案 建议官方从以下两方面修复: 完善 Linux 远程采集脚本:在 is_tracked_block_device() 中支持 dm-[0-9]*,确保 LVM 和 Device Mapper 设备可以被正常采集。 完善设备名称映射逻辑:对 /dev/mapper/...、/dev/dm-* 等同一块设备的不同命名形式进行规范化关联,建议考虑 Linux 主次设备号(major:minor),避免直接通过设备名称字符串匹配。 另外,在统计磁盘总 I/O 时,建议避免将 sda、sda3、dm-0 同一条存储链路的 I/O 简单相加,以免重复计算。 七、结论 本次问题在 Ubuntu 26.04.1 LTS + LVM 环境下已复现,并通过修改远程采集脚本成功验证临时解决方案。 这不是 Ubuntu 内核无法提供磁盘 I/O 数据,而是 XTerminal 对 LVM 逻辑卷的采集及设备名称关联存在兼容性问题。 希望官方能够在后续版本中修复,避免用户每次更新采集脚本后需要重新手动修改。 如有需要,愿意提供复现bug的环境
  • 软件更新动态

    50 1k
    50 主题
    1k 帖子
    O
    1