bottom 磁盘 I/O 图Disk I/O Graph配置完全指南读写速率、图例与过滤【免费下载链接】bottomYet another cross-platform graphical process/system monitor.项目地址: https://gitcode.com/GitHub_Trending/bo/bottom本文是 bottombtm跨平台系统监控器中磁盘 I/O 图组件的配置实战指南聚焦[disk_io_graph]配置段。通过本文你将掌握读写速率曲线的显隐控制、图例标签设备名/挂载点切换、对数坐标轴、图例位置、Linux 未挂载设备显示以及基于设备名/挂载点的过滤含正则与大小写/整词匹配等完整配置能力。所有配置均可在 默认配置文件 中取消注释后直接使用。bottom 的磁盘 I/O 图是一个实时绘制各磁盘读写速率的时间序列组件其运行时状态与配置解析分别定义于 src/widgets/disk_io_graph.rs 与 src/options/config/disk_io_graph.rs。配置结构体DiskIoGraphConfig中的每个字段都对应本文介绍的一个配置项完整配置段如下[disk_io_graph] # 是否显示读取速率曲线。默认 true。 show_read true # 是否显示写入速率曲线。默认 true。 show_write true # 图例标签使用设备名disk还是挂载点mount。默认 disk。 legend disk # y 轴是否使用对数刻度。默认 false。 use_log false # 图例位置。可选 none/top-left/top/top-right/left/right/bottom-left/bottom/bottom-right。默认 top-right。 legend_position top-right # 是否显示未挂载的块设备仅 Linux。默认 false。 include_unmounted false [disk_io_graph.name_filter] # 是否忽略命中的条目。默认 true。 is_list_ignored true # 需要匹配的过滤列表。 list [/dev/sda\\d, /dev/nvme0n1p2] # 是否使用正则表达式。默认 false。 regex true # 是否区分大小写。默认 false。 case_sensitive false # 是否要求整词匹配。默认 false。 whole_word false控制读写速率曲线的显示磁盘 I/O 图默认同时绘制**读取速率R与写入速率W**两条曲线二者可独立开关[disk_io_graph] # 是否显示读取速率曲线。默认 true。 show_read true # 是否显示写入速率曲线。默认 true。 show_write true例如只关注写入流量时可设show_read false反之show_write false。在源码层DiskIoGraphConfig将二者声明为Optionboolsrc/options/config/disk_io_graph.rs未配置时使用默认值true运行时状态则保存在DiskIoGraphWidgetState的show_read/show_write字段中src/widgets/disk_io_graph.rs。绘制阶段只对仍然开启的曲线收集数据源// 摘自 src/canvas/widgets/disk_io_graph.rs 中 draw_disk_io_graph if show_read let Some(data) read_data.get(*name) { visible_sources.push(data); } if show_write let Some(data) write_data.get(*name) { visible_sources.push(data); }需要指出的是两条曲线共享同一时间序列数据集读取速率来自time_series_data.disk_io_read写入速率来自time_series_data.disk_io_writeshow_read/show_write只是控制绘制时是否把对应数据纳入可见系列并不会影响数据采集本身。图例标签设备名还是挂载点默认情况下图例中的每条曲线以内核设备名标注如sda、nvme0n1。如果希望改用挂载点标注如/、/home将legend设为mount[disk_io_graph] legend mount合法取值仅有两个disk默认设备名与mount挂载点。源码中使用DiskGraphLegend枚举表示该选项src/options/config/disk_io_graph.rs#[serde(rename_all snake_case)] pub enum DiskGraphLegend { #[default] Disk, // 按内核设备名标注如 sda、nvme0n1 Mount, // 按挂载点标注如 /、/home }legend mount模式有两个值得注意的行为参见 src/canvas/widgets/disk_io_graph.rs 的绘制逻辑只有当前处于已挂载状态挂载点非空且在当前可见时间窗内有数据的设备才会被绘制设备曾有过挂载点但已卸载时在 mount 模式下会被直接跳过因为此时标注挂载点会产生误导磁盘设备名与挂载点的映射来自数据采集阶段的disk_harvest绘制时构建为name - mount_point的哈希表用于查询。同时图例中每条曲线的名称会格式化为固定宽度例如sda R: 12.3MiB/s其中速率部分始终右对齐为 11 个字符宽见format_rate_fixed单位为 B/s、KiB/s、MiB/s、GiB/s、TiB/s以保证图例框在各帧之间不会因数字位数变化而左右抖动。切换对数坐标轴当磁盘负载跨度较大例如同时存在 SSD 与机械硬盘时线性坐标轴可能让低速率曲线难以观察。将 y 轴切换为对数刻度[disk_io_graph] use_log true默认值为false线性刻度。该选项直接决定绘制阶段使用的坐标缩放与 y 轴标签生成方式src/canvas/widgets/disk_io_graph.rslet scaling if use_log { ChartScaling::Log2 } else { ChartScaling::Linear };从源码可见对数模式采用log2缩放y 轴标签为0B/s、1KiB/s、1MiB/s、…直至1PiB/s的幂级刻度而线性模式则基于当前最大值y_max向上取 1.5 倍余量生成0、0.5×max、1.0×max、1.5×max四档刻度。换句话说use_log true时纵轴上限与标签刻度都进入对数体系适合跨数量级观察use_log false时则是自适应线性刻度上限随数据自动伸缩。设置图例位置图例在组件内的位置通过legend_position设置可选值包括none不显示图例、top-left、top、top-right、left、right、bottom-left、bottom、bottom-right默认top-right[disk_io_graph] legend_position top-right该字符串会在配置加载阶段解析为LegendPosition枚举见 src/options.rs 中的get_disk_io_legend_position随后传给底层时间序列组件的绘制上下文GraphDrawCtx.legend_position见 src/canvas/widgets/disk_io_graph.rs。需要注意的是图例在组件内的可用区域受到约束宽度约占组件 9/10、高度约占 1/2因此在小尺寸布局中部分图例位置可能显示不完整。显示未挂载设备仅 Linux默认情况下图只会显示已挂载的设备。在 Linux 上如需把未挂载的块设备也纳入显示启用[disk_io_graph] include_unmounted true该选项目前仅对 Linux 生效默认false。从源码结构看include_unmounted是DiskIoGraphConfig中Optionbool字段src/options/config/disk_io_graph.rs最终汇总为disk_io_graph_show_unmounted配置项src/options.rs而是否真的能列出未挂载设备取决于磁盘采集后端Linux 后端提供了未挂载分区检测相关实现在 src/collection/disks/unix/linux/unmounted.rsmacOS 与 Windows 等其他平台则没有对应能力。因此在非 Linux 平台设置该项不会产生效果。通过 name_filter 过滤条目如果某些设备名不想出现在图中可以通过[disk_io_graph.name_filter]按设备名过滤。核心机制是配置一个过滤列表list再用is_list_ignored决定“命中列表的条目是被忽略还是被保留”其余开关控制匹配方式。例如忽略设备名匹配/dev/sda的条目[disk_io_graph.name_filter] # 是否忽略任何匹配项。默认 true。 is_list_ignored true # 要尝试匹配的过滤列表。 list [/dev/sda] # 是否使用正则表达式。默认 false。 regex true # 是否区分大小写。默认 false。 case_sensitive false # 是否要求整词匹配。默认 false。 whole_word false如果想让列表反过来作为“白名单”即只保留匹配的条目则设is_list_ignored false。底层实现中IgnoreList结构体src/options/config/ignore_list.rs的regex、case_sensitive、whole_word三个开关会共同决定如何把list中的字符串编译为正则表达式然后封装成Filtersrc/app/filter.rs。Filter::should_keep的判定逻辑为条目命中列表时is_list_ignored true则拒绝返回 falsefalse则保留条目未命中时is_list_ignored true则保留false则拒绝。即is_list_ignored决定了过滤语义是“黑名单”还是“白名单”。仓库自带的单元测试src/app/filter.rs 中的filter_simple与filter_is_list_ignored两个用例验证了上述两种语义黑名单模式下仅保留未命中的条目白名单模式下仅保留命中的条目。关于whole_word需要说明在whole_word false时只要目标字符串包含列表中任一项即视为匹配例如list [sda]会同时匹配sda与sda1设为true后则要求整词匹配。这一开关与regex配合使用能够实现从“简单包含”到“精确正则”的灵活过滤。名称过滤的完整示例结合上述开关一个更贴近实战的示例——忽略所有/dev/sda与/dev/nvme0n1p2这类设备同时开启正则[disk_io_graph.name_filter] is_list_ignored true list [/dev/sda\\d, /dev/nvme0n1p2] regex true case_sensitive false whole_word false该示例直接取自 默认配置文件 中[disk_io_graph.name_filter]的注释样例正则\d可以匹配sda后的任意数字分区号。此外在 Linux 上挂载点过滤可通过[disk.name_filter]/[disk.mount_filter]实现见 src/options.rs 中disk_name_filter、disk_mount_filter的解析相关配置项说明可进一步参考 磁盘表格配置。完整可运行配置示例将以上所有配置项组合起来一个可直接放入配置文件的完整示例与仓库测试用例 tests/valid_configs/widget/disk_io_graph.toml 结构一致如下[disk_io_graph] show_read true show_write false legend mount use_log true legend_position bottom-left [disk_io_graph.name_filter] is_list_ignored true list [sda] regex false case_sensitive false whole_word false该示例展示了仅显示读取速率曲线、图例按挂载点标注、对数坐标轴、图例置于左下角并过滤掉名称包含sda的设备。配置生效方式与验证编辑配置文件bottom 的配置文件位于系统配置目录Linux/macOS 为~/.config/bottom/bottom.tomlWindows 为%APPDATA%\bottom\bottom.toml。建议基于 默认配置文件 复制并取消所需行的注释。启动验证运行btm进入磁盘 I/O 图组件即可看到读写曲线、图例标签与坐标轴按配置生效。过滤语义验证修改is_list_ignored或regex后重启btm观察图中条目数量变化即可确认黑名单/白名单语义是否符合预期。常见问题排查图例没有显示检查legend_position是否被设为none或组件尺寸过小导致图例区域宽度 9/10、高度 1/2 约束放不下。legend mount下某些设备消失这是预期行为——mount 模式只显示当前已挂载且时间窗内有数据的设备未挂载或已卸载设备会被跳过src/canvas/widgets/disk_io_graph.rs。非 Linux 平台设置include_unmounted无效该选项仅 Linux 后端支持未挂载设备检测其他平台无对应采集能力src/collection/disks/unix/linux/unmounted.rs。过滤不生效确认list中的字符串与设备实际名称一致开启regex时注意 TOML 中反斜杠需要写成\\如/dev/sda\\d需要精确匹配时把whole_word设为true。如需了解磁盘 I/O 图在界面上的基础操作如缩放时间窗口、切换组件与数据含义可参见 磁盘 I/O 图使用指南所有配置项的权威清单以 flags 配置说明 与 JSON Schemaschema/v0.14.7/bottom.json为准。【免费下载链接】bottomYet another cross-platform graphical process/system monitor.项目地址: https://gitcode.com/GitHub_Trending/bo/bottom创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考