命令详解 lsblk
lsblk 用于列出 Linux 块设备及其依赖关系,包括磁盘、分区、LVM、加密设备、RAID 和挂载点。它适合盘点和排障,但不会替代备份,也不会自动判断哪块磁盘可以格式化。
常用查询
# 默认树形视图
lsblk
# 文件系统、标签、UUID 与挂载点
lsblk -f
# 显示完整设备路径
lsblk -p
# 只看顶层设备,不显示分区/映射关系
lsblk -d
# 显示字节数,便于脚本计算
lsblk -b
# 查看丢弃/TRIM 能力
lsblk -D
-m 表示显示设备节点的属主、属组和权限,不是“以 MB 显示”。如需精确容量,使用 -b;给人阅读时默认的人类可读格式通常更合适。
明确指定输出列
默认列可能随 util-linux 版本变化,脚本中应固定 --output:
lsblk -o NAME,PATH,TYPE,SIZE,FSTYPE,FSVER,LABEL,UUID,MOUNTPOINTS,MODEL,SERIAL
常用列含义:
| 列 | 说明 |
|---|---|
NAME / PATH |
设备名 / 完整路径 |
TYPE |
disk、part、lvm、crypt、raid 等 |
SIZE |
设备容量,不等于可用空间 |
FSTYPE / FSVER |
文件系统类型与版本 |
UUID / PARTUUID |
文件系统与分区标识 |
MOUNTPOINTS |
设备的全部挂载点,可能是多行 |
ROTA |
是否旋转介质;虚拟化或阵列环境可能不准确 |
MODEL / SERIAL |
型号和序列号,取决于设备是否提供 |
可用列以本机版本为准:
lsblk --list-columns
JSON 与脚本处理
lsblk --json --bytes -o NAME,PATH,TYPE,SIZE,FSTYPE,UUID,MOUNTPOINTS
需要解析父子关系时把 NAME 或其他 tree 列放入输出,且不要解析对齐后的纯文本。脚本还应处理字段为空、多挂载点以及设备在命令执行期间插拔的情况。
典型排障场景
新磁盘是否被识别
sudo udevadm settle
lsblk -o NAME,PATH,TYPE,SIZE,MODEL,SERIAL
如果设备刚添加,先等待 udev 完成事件处理。仍不显示时再查看内核日志、控制器和虚拟化平台。
找到某个挂载点对应的设备
findmnt /data
lsblk -f
核对文件系统标识
lsblk -f 的信息来自 udev 缓存;需要权威的文件系统元数据时结合 blkid:
sudo blkid /dev/sdb1
容易误解的地方
SIZE是块设备容量,不是文件系统剩余空间;剩余空间看df -hT。- 同一设备可有多个挂载点,应优先使用
MOUNTPOINTS。 RM=1只表示内核认为设备可移除,不代表数据可以安全拔出。ROTA=0不一定就是物理 SSD,虚拟磁盘可能由宿主机伪装。- 修改磁盘前至少同时核对容量、型号、序列号、现有文件系统和业务挂载点。