跳转至内容
  • 最近帖子
  • 0 未读帖子 0
  • 板块分类
  • 服务状态
  • 跳转官网
  • 帮助文档
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠

XTerminal 反馈社区

A
alexandranewco
稳弟稳
稳弟
S

sanjinCoder

@sanjinCoder
取消关注 关注
关于
帖子
1
主题
0
分享
0
群组
0
粉丝
0
关注
0

帖子

最新 最佳 有争议的

  • 服务器监控方式是否可以改一下
    S sanjinCoder
    xterminal 专区

    一、问题描述

    在 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 完全一致后,监控恢复正常。

    六、建议修复方案

    建议官方从以下两方面修复:

    1. 完善 Linux 远程采集脚本:在 is_tracked_block_device() 中支持 dm-[0-9]*,确保 LVM 和 Device Mapper 设备可以被正常采集。

    2. 完善设备名称映射逻辑:对 /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的环境

  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。

7

在线

8.7k

用户

3.0k

主题

8.9k

帖子
雨云500M带宽服务器推荐🔥
  • 第一个帖子
    最后一个帖子
0
  • 最近帖子
  • 未读帖子 0
  • 板块分类
  • 服务状态
  • 跳转官网
  • 帮助文档