lsblk -J 是获取结构化磁盘拓扑最直接的方式,输出标准 JSON,通过 "children" 数组表达层级关系,字段清晰且天然适配可视化工具。

lsblk -J 是获取磁盘拓扑结构最直接、最适配可视化工具的方式。它输出标准 JSON,字段清晰、嵌套合理,天然支持前端图表库(如 D3.js、ECharts)或运维平台解析。
用 lsblk -J 获取结构化磁盘拓扑
该命令默认递归展示设备树(disk → part → lvm/rom 等),所有层级关系通过 "children" 数组表达,每个节点包含设备基础属性和挂载/文件系统信息。
运行命令:
lsblk -J
典型输出片段(已简化):
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
{
"blockdevices": [
{
"name": "sda",
"kname": "sda",
"path": "/dev/sda",
"size": "20G",
"type": "disk",
"mountpoint": null,
"children": [
{
"name": "sda1",
"kname": "sda1",
"path": "/dev/sda1",
"size": "500M",
"type": "part",
"mountpoint": "/boot",
"fstype": "ext4",
"uuid": "e2f8b2f8-2c0b-4e7a-8fb7-7e85a8e8c8e8"
},
{
"name": "sda2",
"kname": "sda2",
"path": "/dev/sda2",
"size": "1G",
"type": "part",
"mountpoint": null,
"fstype": "LVM2_member",
"children": [
{
"name": "lvm-root",
"kname": "dm-0",
"path": "/dev/mapper/vg0-root",
"size": "15G",
"type": "lvm",
"mountpoint": "/",
"fstype": "ext4",
"uuid": "3f6e3f6e-2d4f-4d69-8df4-f7e6a7e7e6a7"
}
]
}
]
},
{
"name": "sr0",
"kname": "sr0",
"path": "/dev/sr0",
"size": "1024M",
"type": "rom",
"mountpoint": null
}
]
}
关键字段说明(用于可视化映射)
-
"name":显示名称(如sda,sda1),适合做节点标签 -
"type":决定图标类型(disk→硬盘图标,part→分区,lvm→逻辑卷,rom→光驱) -
"size":原始字符串(如"20G"),建议后端解析为字节数便于排序或缩放 -
"mountpoint":非空表示已挂载,可标为绿色/高亮;null表示未挂载 -
"fstype"和"uuid":辅助识别文件系统类型与唯一性,可用于 tooltip 或筛选 -
"children":定义父子关系,是构建树图(Tree Diagram)、拓扑图(Topology Graph)的核心依据
提升可视化可用性的实用技巧
- 加
-f显式包含文件系统信息(lsblk -Jf),确保fstype、label、uuid、mountpoint全量输出 - 加
-p获取完整路径(lsblk -Jfp),方便关联/dev/设备节点做进一步操作(如点击跳转到udevadm info) - 加
-o自定义字段(但注意-J模式下仅部分字段生效);推荐组合:lsblk -Jfpm
同时带文件系统、权限(owner/group/mode)和完整路径,适合安全审计类可视化
- 若需过滤(例如只看物理磁盘及其子设备),可配合
jq预处理:lsblk -J | jq '.blockdevices[] | select(.type == "disk")'
或排除 RAM 盘(主设备号 1):
lsblk -Je 1 -J
注意事项
- 输出中
"size"默认是人类可读格式(如20G),脚本解析时建议用-b(lsblk -Jfb)强制字节单位,避免单位转换错误 - 所有字段均为只读快照,不依赖 root 权限,普通用户可执行
- JSON 输出严格遵循层级嵌套,无需额外解析依赖关系——
children存在即表示从属,不存在即为叶子节点
不复杂但容易忽略:确保接收端(如 Web 前端或 Python 脚本)正确处理 null 值和嵌套深度,避免渲染时报错。










