Linux lsblk 命令详解:块设备信息查看与磁盘管理实战

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

lsblk 是什么

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

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

基本用法

bash 复制代码
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 挂载点

常用参数实战

查看文件系统信息

bash 复制代码
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 参数可以指定要显示的列,组合非常灵活:

bash 复制代码
# 只看名称、大小、文件系统类型和挂载点
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT

# 查看设备对应的物理旋转状态(SSD vs HDD)
lsblk -o NAME,SIZE,TYPE,ROTA

# ROTA=1 表示机械硬盘,ROTA=0 表示 SSD

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

JSON 格式输出

bash 复制代码
lsblk -J

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

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 可以精确提取任意字段:

bash 复制代码
# 获取所有磁盘的大小
lsblk -J -d -o NAME,SIZE | jq '.blockdevices[] | {name, size}'

# 获取所有未挂载的分区
lsblk -J -o NAME,MOUNTPOINT | jq '.blockdevices[].children[] | select(.mountpoint == null) | .name'

列表格式输出

bash 复制代码
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

只看磁盘不看分区

bash 复制代码
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 中创建对应的目录结构。

bash 复制代码
# 查看内核识别到的所有块设备
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。

实际运维场景

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

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

bash 复制代码
# 查看所有块设备及其文件系统
lsblk -f

# 确认哪块盘是 SSD(ROTA=0)
lsblk -d -o NAME,SIZE,ROTA,MODEL

# 确认未挂载的分区
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v '/'

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

bash 复制代码
# 看整体拓扑,确认是否有未挂载的大分区
lsblk

# 配合 df 确认已用空间
df -h

# 找出所有 LVM 逻辑卷
lsblk -o NAME,SIZE,TYPE | grep lvm

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

bash 复制代码
#!/bin/bash
# 获取第一块非系统盘的设备名
DISK=$(lsblk -d -n -o NAME,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 -l GPT 分区表操作 parted 可修改,lsblk 只读
smartctl 磁盘健康状态检测 lsblk 看结构,smartctl 看健康

小结

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

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


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

相关推荐
泰和英杰16 小时前
2026 华为数字能源 + 机房工程实操标准:故障排查、机房建设、设备选型标准化技术方案
运维·服务器·网络
mounter62516 小时前
探索未来 AI 算力网络的基石:从传统 RoCE 走向 SRv6 驱动的弹性弹性网络(解析 Netdev 0x1A 创新实践)
linux·网络·人工智能·linux kernel·kernel·rdma·rocev2
x_x-F16 小时前
深入浅出 Linux 网络核心:sk_buff 的内存与指针流转
linux·运维·网络
腾渊信息科技公司1 天前
工业数据运维痛点根治方案:基于AI Agent的产线自动化台账系统落地
运维·人工智能·自动化·个人开发·ai编程
Dxy12393102161 天前
Proxy Protocol v2 详解
运维
踏月的造梦星球1 天前
DMDPC 学习:架构、部署、运维与调优
运维·数据库·学习·架构
潘正翔1 天前
docker核心概念
linux·运维·服务器·docker·容器·centos·运维开发
weigangwin1 天前
agent-workspace-linux 不是远程桌面:Linux AI 工作区的隔离边界验收
linux·xvfb·mcp·桌面隔离·权限边界·bubblewrap·agent-workspace
renhongxia11 天前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
Dovis(誓平步青云)1 天前
远程办公软件文件传输实测:6 款工具的速度、稳定性和办公体验对比
linux·运维·服务器·后端·生成对抗网络