lsblk 是什么
lsblk 读取 sysfs 与 udev 的信息,以树形结构列出块设备之间的层级关系:物理磁盘下面挂着哪些分区,分区之上是否叠加了 LVM 逻辑卷、RAID 或加密层,每一层对应哪个挂载点。它最大的价值在于展示结构,因此「新盘加了但没挂上」「分区建了但内核没识别」「LVM 卷没激活」这类问题,看一屏就能判断卡在哪一层,而不用在多个命令之间来回拼凑。
基本信息
| 适用平台 | Linux(util-linux 的 lsblk);容器与精简镜像里可能未安装 |
|---|---|
| 命令语法 | lsblk [选项] [设备...] |
| 常用选项 | -f 显示文件系统类型、标签与 UUID、-p 输出 /dev 完整路径、-o 自定义列、-d 只列磁盘不展开分区、-l 用列表代替树形、-J JSON 输出、-e 排除指定设备 |
| 常用列 | NAME、SIZE、TYPE、MOUNTPOINT、FSTYPE、UUID、ROTA 是否旋转盘、MODEL |
| 权限要求 | 查询普通用户即可;部分设备信息在没有权限时显示为空 |
典型使用场景
- 新盘接入:确认磁盘与分区是否被内核识别、容量是否符合预期
- 挂载排查:MOUNTPOINT 列为空说明未挂载,避免把数据写进被遮蔽的目录
- LVM 问题:确认卷组与逻辑卷是否激活、层级关系是否完整
- 写 fstab:用 -f 拿到 UUID 与文件系统类型,直接填进配置文件
- 磁盘类型确认:ROTA 为 1 表示机械盘,0 表示固态或虚拟盘
- 脚本化检查:-J 输出配合 jq 做挂载点巡检,比解析文本输出稳定
常用示例
常用示例
lsblk
lsblk -f
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,UUID
lsblk -d -o NAME,SIZE,ROTA,MODEL # 只看物理盘与是否机械盘
lsblk -p /dev/sdb # 限制到指定设备,输出完整路径
lsblk -J | jq -r '.blockdevices[] | "\(.name) \(.size) \(.mountpoint)"'
partprobe /dev/sdb # 分区表变化后让内核重新读取
blkid /dev/sdb1 # 查看 UUID 与文件系统类型常用列读法
| 列 | 含义 | 关注点 |
|---|---|---|
| NAME | 设备名,树形缩进表示层级 | 加 -p 可拿到完整 /dev 路径 |
| TYPE | disk 磁盘、part 分区、lvm 逻辑卷、raid 阵列、crypt 加密层、rom 只读设备 | 用来判断设备处于哪一层 |
| FSTYPE | 文件系统类型(-f 或 -o 指定时显示) | 为空说明尚未格式化 |
| MOUNTPOINT | 当前挂载点 | 为空即未挂载,写数据前必须确认 |
| UUID | 文件系统唯一标识 | 写 fstab 首选它而非设备名 |
| ROTA | 1 表示旋转机械盘,0 表示固态或虚拟盘 | 用于判断性能预期 |
lsblk 读的是内核与 udev 的当前状态,所以分区表刚被修改但内核尚未刷新时看不到新分区。此时执行 partprobe 设备名 或 partx -u 设备名 触发重新读取,再查一次即可,不必重启机器。
lsblk 与 df 关注点不同:lsblk 说明设备结构与挂载位置,df 说明挂载后的容量与使用率。新盘上线的流程通常是 lsblk 确认识别、分区、格式化、挂载、df 核对容量,最后写入 fstab 持久化。
容器里执行 lsblk 通常看到的是宿主机的块设备,容器自身可用的存储受挂载与存储驱动限制。判断容器能否写某个目录,应以 findmnt 与 df 的结果为准,而不是 lsblk 的设备清单。
查看 LVM 与加密层时注意设备名的来源:逻辑卷在内核里显示为 dm-0 这样的名字,可读名称来自 /dev/mapper 下的符号链接,用 lsblk -p 或 ls -l /dev/mapper 可以把两者对上。如果某个 dm 设备没有挂载点,通常是卷未激活或尚未挂载,而不是设备损坏。
写挂载配置前用 lsblk -f 取文件系统类型、UUID 与当前挂载点,一条命令就能凑齐需要的信息;脚本里解析用 -J 输出 JSON,或 --output 明确指定列,比直接切默认文本稳得多。