bottom 磁盘监视 Widget 完全指南:磁盘分区表格的数据解读、快捷键排序与过滤配置 bottom 磁盘监视 Widget 完全指南磁盘分区表格的数据解读、快捷键排序与过滤配置【免费下载链接】bottomYet another cross-platform graphical process/system monitor.项目地址: https://gitcode.com/GitHub_Trending/bo/bottombottom 是一个跨平台的图形化进程/系统监视器其中 Disk磁盘Widget 以表格形式集中展示所有磁盘与分区的容量与 I/O 信息。本文基于官方使用文档并结合仓库源码深入讲解磁盘表格的数据列含义、单位换算规则、全部快捷键与鼠标绑定、排序机制以及如何通过配置文件定制列、默认排序与名称/挂载点过滤帮助你快速定位磁盘空间瓶颈与读写热点。一、Widget 概览一张表看懂磁盘全貌Disk Widget 的核心功能是把每个磁盘/分区渲染成一行可排序的表格提供容量 实时 I/O两类关键信息。根据 官方使用文档它默认提供以下内容Disk name磁盘名称如/dev/nvme0n1p1这类设备路径Disk mount location挂载点如/、/home、/bootAmount of space used已用空间Amount of space left剩余空间Total amount of space总空间Percentage of space used已用百分比Read per second每秒读取速率R/sWrite per second每秒写入速率W/s。从源码看表格每一行对应的数据结构定义在 src/widgets/disk_table.rspub struct DiskWidgetData { pub name: String, // 磁盘/分区名称 pub mount_point: String, // 挂载点 pub free_bytes: Optionu64, // 剩余空间字节 pub used_bytes: Optionu64, // 已用空间字节 pub total_bytes: Optionu64, // 总空间字节 pub summed_total_bytes: Optionu64, // 用于计算百分比的分母 pub io_read_rate_bytes: Optionu64, // 读取速率字节/秒 pub io_write_rate_bytes: Optionu64, // 写入速率字节/秒 }值得注意的细节是字段大量使用Optionu64。当某个值无法获取时例如未挂载的设备没有容量数据表格中对应列会显示为N/A而不是 0避免产生误导。列与数据单位换算规则表格中的列由枚举DiskWidgetColumn定义src/widgets/disk_table.rs共 9 种Disk、Mount、Used、Free、Total、UsedPercent、FreePercent、IoRead、IoWrite。列头文本同时标注了对应排序快捷键例如Disk(d)、Mount(m)、Used(u)、Used%(p)、R/s(r)、W/s(w)src/widgets/disk_table.rs。单位换算遵循十进制SI前缀get_decimal_bytes以 1000 为进制依次输出B、KB、MB、GB、TBsrc/utils/data_units.rs而速率列使用dec_bytes_per_second_string在数值达到 GB 及以上时额外保留一位小数例如1.0GB/ssrc/utils/conversion.rs。百分比列则统一保留一位小数如42.3%。二、键盘绑定表格内导航与一键排序Disk Widget 聚焦后即可使用以下快捷键注意快捷键区分大小写。其中d、m、u、n、t、p、r、w分别对应表格的 8 个可排序列按下一次按该列升序排序再次按下则反向绑定动作↑/k在 Widget 内向上移动↓/j在 Widget 内向下移动gg/Home跳转到表格第一行G/End跳转到表格最后一行d按磁盘Disk排序再次按下反向m按挂载点Mount排序再次按下反向u按已用空间Used排序再次按下反向n按剩余空间Free排序再次按下反向t按总空间Total排序再次按下反向p按已用百分比Used%排序再次按下反向r按读取速率R/s排序再次按下反向w按写入速率W/s排序再次按下反向这些按键与源码中ColumnHeader::text()返回的列头提示一一对应因此即使忘记快捷键也可以直接看列头括号中的字母。三、鼠标绑定绑定动作鼠标左键LButton选中表格中的某一行在启用了鼠标支持的终端中左键点击即可切换当前选中条目选中行可用于与进程 Widget 的联动操作或后续的进程终止流程。四、排序机制按下按键后发生了什么Disk Widget 的排序不是简单调用sort()而是经由通用数据表组件SortDataTable完成。每种列都实现了SortsRow::sort_data按各自的数据类型排序名称/挂载点按字符串排容量与速率按数值排百分比则基于计算函数排src/widgets/disk_table.rs。此外每种列在创建时被声明为soft软排序或 hard硬排序并带有权重src/widgets/disk_table.rsDisk、Mount为 soft 排序权重0.2字符串列不追求严格顺序其余数值列Used、Free、Total、Used%、R/s、W/s等为 hard 排序并默认降序排列default_descending。默认显示的列组合是Disk → Mount → Used → Free → Total → Used% → R/s → W/ssrc/widgets/disk_table.rs默认排序按磁盘名称升序。数据刷新时set_table_data会先取出采集数据再按当前排序列与方向排序后送入表格src/widgets/disk_table.rs。五、配置定制列、默认排序与未挂载设备除了运行时按键操作Disk Widget 还支持通过 TOML 配置文件进行深度定制完整说明见 disk-table 配置文档对应配置结构定义在 src/options/config/disk.rs。5.1 自定义显示列通过[disk].columns可以按任意顺序挑选要显示的列合法列名Disk、Mount、Used、Free、Total、Used%、Free%、R/s、W/s[disk] # 按任意顺序挑选列 columns [Disk, Mount, Used, Free, Total, Used%, R/s, W/s]源码中列的字符串解析位于 src/widgets/disk_table.rs列名大小写不敏感且每个列支持多个别名例如Used%/UsedPercent、R/s/Read/Rps、W/s/Write/Wps。传入未知列名会直接报错仓库测试 src/options/config/disk.rs 验证了合法与非法列名两种情形。5.2 默认排序列与排序方向[disk] # 默认按读取速率排序默认行为是按磁盘名升序 default_sort R/s # 排序方向Ascending 或 Descending默认 Ascending sort_order Ascendingdefault_sort可以使用任意合法列名。若指定的列并未出现在columns中则回退为表格的第一列见 src/widgets/disk_table.rs 中position(...).unwrap_or_default()的实现。5.3 显示未挂载设备仅 Linux默认情况下只显示已挂载的设备。在 Linux 上可通过include_unmounted一并展示未挂载的块设备[disk] include_unmounted true需要了解的行为与限制官方配置文档明确说明未挂载设备仍能显示 I/O 活动但没有已用/剩余空间数据容量数据依赖活跃挂载因此对应列显示为N/A伪设备loop*、ram*、zram*会被自动跳过其他噪音设备可以用 5.4 节的名称过滤隐藏。从实现看该开关只在 Linux 下过滤掉mount_point为空的条目其他平台直接透传全部采集数据src/widgets/disk_table.rs。六、名称与挂载点过滤精确定制显示条目Disk Widget 支持按磁盘名称name_filter和挂载点mount_filter过滤条目每组过滤包含 4 个选项定义于 src/options/config/ignore_list.rs配置项默认值含义is_list_ignoredtruetrue表示忽略隐藏匹配项false表示仅保留匹配项list空列表用于匹配的模式列表regexfalse是否把列表项当作正则表达式case_sensitivefalse是否区分大小写whole_wordfalse是否要求整词匹配例如忽略名称匹配/dev/sda的条目[disk.name_filter] is_list_ignored true list [/dev/sda] regex true case_sensitive false whole_word false也可以同时组合名称过滤与挂载点过滤例如只保留/dev/sda但排除挂载到/mnt/...或根目录的条目[disk.name_filter] is_list_ignored false list [/dev/sda] regex true case_sensitive false whole_word false [disk.mount_filter] is_list_ignored true list [/mnt/.*, /] regex true case_sensitive false whole_word true过滤规则的优先级当名称过滤与挂载点过滤同时存在且结论冲突时遵循允许优先于拒绝的固定优先级src/collection/disks.rs条目若命中任一is_list_ignored falseallow 型过滤 → 一定保留条目若命中任一is_list_ignored truedeny 型过滤 → 一定隐藏其余情况 → 默认保留。这一判定由keep_disk_entry函数实现并被仓库单元测试test_keeping_disk_entry覆盖了名称过滤、挂载点过滤以及两者组合共 8 种场景src/collection/disks.rs。过滤器的底层匹配由Filter结构封装其should_keep的核心逻辑是命中时返回!is_list_ignored未命中时返回is_list_ignoredsrc/app/filter.rs。七、实现链路从采集到渲染磁盘数据最终如何呈现在屏幕上调用链可以概括为数据采集get_io_usage读取各挂载点的累计读写字节src/collection/disks.rs结合容量数据组装成DiskHarvest过滤按上文规则调用keep_disk_entry决定保留/隐藏表格刷新DiskTableWidget::set_table_data按当前排序写入SortDataTable绘制Painter::draw_disk_table在每次重绘周期内调用表格的draw并根据SelectionState是否展开、是否聚焦决定高亮样式src/canvas/widgets/disk_table.rs。八、总结Disk Widget 是 bottom 中查看磁盘容量与 I/O 状况的核心入口8 个可排序列覆盖了名称、挂载点、容量、百分比与读写速率键盘快捷键与列头字母对应配合鼠标点击即可快速完成数据探索配置文件则允许你自定义列组合、默认排序并通过名称/挂载点过滤与 Linux 未挂载设备开关把表格裁剪成只关心的那部分磁盘。结合本文的源码解读你既能在日常监控中熟练操作也能在需要时对表格行为进行精准定制。【免费下载链接】bottomYet another cross-platform graphical process/system monitor.项目地址: https://gitcode.com/GitHub_Trending/bo/bottom创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考