Linux lsblk 命令详解:块设备信息查看与磁盘管理实战
2026/6/5 15:25:51 网站建设 项目流程

做服务器运维的时候,经常需要搞清楚机器上挂了哪些磁盘、分区情况怎么样、文件系统是什么类型。df -h能看已挂载的磁盘空间,但看不到未挂载的分区和磁盘的物理拓扑关系。这时候lsblk就派上用场了。

lsblk 是什么

lsblk(List Block Devices)是 Linux util-linux 包提供的一个命令,用来列出系统上所有块设备的信息。所谓块设备,就是以固定大小块(通常是 512 字节或 4KB)进行数据读写的存储设备——硬盘、SSD、U 盘、光驱这些都算。

它最大的优势是能以树形结构展示设备和分区的父子关系,让你一眼看清"哪块盘下面有几个分区、分别挂载到哪里"。

基本用法

lsblk

输出类似这样:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 500G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 100G 0 part / └─sda3 8:3 0 399G 0 part /home sdb 8:16 0 2T 0 disk └─sdb1 8:17 0 2T 0 part /data sr0 11:0 1 1024M 0 rom

各列含义:

列名含义
NAME设备名称
MAJ:MIN主设备号:次设备号(内核识别用)
RM是否可移动设备(1=是,0=否)
SIZE设备大小
RO是否只读
TYPE设备类型(disk/part/rom/lvm等)
MOUNTPOINT挂载点

常用参数实战

查看文件系统信息

lsblk-f

-f参数会额外显示文件系统类型(FSTYPE)、UUID、挂载选项和标签:

NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 ext4 boot a1b2c3d4-... /boot ├─sda2 ext4 root e5f6g7h8-... / └─sda3 ext4 home i9j0k1l2-... /home sdb └─sdb1 xfs data m3n4o5p6-... /data

这个在配置/etc/fstab时特别有用——你需要 UUID 来做持久化挂载,而不是设备名(因为设备名可能会变)。

自定义输出列

-o参数可以指定要显示的列,组合非常灵活:

# 只看名称、大小、文件系统类型和挂载点lsblk-oNAME,SIZE,FSTYPE,MOUNTPOINT# 查看设备对应的物理旋转状态(SSD vs HDD)lsblk-oNAME,SIZE,TYPE,ROTA# ROTA=1 表示机械硬盘,ROTA=0 表示 SSD

常用的可用列包括:NAMESIZETYPEFSTYPEMOUNTPOINTUUIDLABELMODELSERIALROTA(旋转)、TRAN(传输协议:sata/nvme/usb)、HOTPLUG(热插拔)、STATE

JSON 格式输出

lsblk-J

输出 JSON 格式,方便脚本解析:

{"blockdevices":[{"name":"sda","maj:min":"8:0","rm":false,"size":"500G","ro":false,"type":"disk","mountpoint":null,"children":[{"name":"sda1","maj:min":"8:1","size":"1G","type":"part","mountpoint":"/boot"}]}]}

这个在写自动化运维脚本时非常实用,配合jq可以精确提取任意字段:

# 获取所有磁盘的大小lsblk-J-d-oNAME,SIZE|jq'.blockdevices[] | {name, size}'# 获取所有未挂载的分区lsblk-J-oNAME,MOUNTPOINT|jq'.blockdevices[].children[] | select(.mountpoint == null) | .name'

列表格式输出

lsblk-l

去掉树形缩进,用纯列表展示。在写脚本需要awk/grep处理时更方便:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 500G 0 disk sda1 8:1 0 1G 0 part /boot sda2 8:2 0 100G 0 part / sda3 8:3 0 399G 0 part /home

只看磁盘不看分区

lsblk-d

-d(–nodeps)参数只显示顶层设备,不显示子设备(分区):

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 500G 0 disk sdb 8:16 0 2T 0 disk sr0 11:0 1 1024M 0 rom

底层原理:lsblk 从哪获取数据

lsblk的数据来源是/sys/block/dev目录下的 sysfs 虚拟文件系统。内核在检测到块设备时,会在 sysfs 中创建对应的目录结构。

# 查看内核识别到的所有块设备ls/sys/block/# 查看某块盘的具体信息cat/sys/block/sda/size# 扇区数量cat/sys/block/sda/queue/rotational# 是否旋转(0=SSD, 1=HDD)cat/sys/block/sda/device/model# 磁盘型号

理解这一点很重要:lsblk不需要 root 权限就能读取大部分信息(因为它读的是 sysfs),但某些详细信息(如 SERIAL)可能需要 root。

实际运维场景

场景一:新服务器磁盘初始化

拿到一台新机器,第一步就是看看有哪些盘:

# 查看所有块设备及其文件系统lsblk-f# 确认哪块盘是 SSD(ROTA=0)lsblk-d-oNAME,SIZE,ROTA,MODEL# 确认未挂载的分区lsblk-oNAME,SIZE,FSTYPE,MOUNTPOINT|grep-v'/'

场景二:排查磁盘空间不足

# 看整体拓扑,确认是否有未挂载的大分区lsblk# 配合 df 确认已用空间df-h# 找出所有 LVM 逻辑卷lsblk-oNAME,SIZE,TYPE|greplvm

场景三:自动化脚本中获取磁盘信息

#!/bin/bash# 获取第一块非系统盘的设备名DISK=$(lsblk-d-n-oNAME,SIZE,TYPE|\grep'disk'|\awk'NR>1 {print $1; exit}')echo"找到数据盘: /dev/$DISK"

-n参数去掉表头,-o指定列,这样脚本处理起来干净利落。

lsblk 与其他命令的配合

命令用途与 lsblk 的关系
df -h查看已挂载分区的空间使用lsblk 看物理拓扑,df 看使用率
fdisk -l查看分区表详情fdisk 更底层,lsblk 更直观
blkid查看块设备 UUID 和类型lsblk -f 包含了 blkid 的信息
parted -lGPT 分区表操作parted 可修改,lsblk 只读
smartctl磁盘健康状态检测lsblk 看结构,smartctl 看健康

小结

lsblk是 Linux 系统管理中一个"小而美"的命令——它不修改任何东西,只负责把块设备信息清晰地展示出来。日常运维中,lsblk -f基本能覆盖 80% 的磁盘查看需求,lsblk -J则是自动化脚本的好帮手。

更多 Linux 命令参考,可以使用 JsonKit Linux 命令参考 工具在线查询。


相关工具:Linux fdisk 磁盘分区工具 | Linux mount 文件系统挂载

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询