linux lsblk 命令 作者:马育民 • 2025-12-01 17:40 • 阅读:10002 # 介绍 `lsblk`(List Block Devices)是 Linux 系统中用于**列出所有块设备信息**的核心命令,块设备指存储数据的硬件设备(如:**硬盘**、U盘、**分区**、逻辑卷、RAID 等),其输出直观展示设备的层级关系、大小、类型等关键信息,是系统运维、存储管理的必备工具。 # 替代 fdisk 部分功能替代传统的 `fdisk` 命令。该命令可以快速查看系统中所有块设备的拓扑结构(如:硬盘包含哪些分区、分区是否被挂载)、设备名称、大小、类型、挂载点等信息 ### 与 `fdisk -l` 的区别? - `lsblk`:侧重设备拓扑结构、挂载点、文件系统信息,输出易读; - `fdisk -l`:侧重分区表详情(如 MBR/GPT 分区类型、分区起止扇区),适合分区操作时使用; - 建议:日常查看存储用 `lsblk`,分区操作时结合 `fdisk -l`。 # 基本语法 ```bash lsblk [选项] [设备名] ``` - 无选项无参数:默认列出所有块设备(排除内存盘 `loop` 设备); - 设备名(可选):指定单个设备(如 `/dev/sda`),仅查看该设备信息。 ### 常见选项详解 `lsblk` 支持丰富的选项,用于过滤和展示关键信息,常用选项如下: | 选项 | 英文说明 | 中文功能描述 | 示例 | |------|----------|--------------|------| | `-a` | all | 显示所有块设备(包含内存盘 `loop`、光驱 `rom` 等默认隐藏设备) | `lsblk -a` | | `-b` | bytes | 以字节(Bytes)为单位显示设备大小(默认是易读单位如 GB/MB) | `lsblk -b` | | `-d` | noheadings | 仅显示设备本身,不显示其分区/子设备(如只看硬盘,不看分区) | `lsblk -d` | | `-f` | filesystem | 显示文件系统类型、UUID、挂载点(核心选项,运维常用) | `lsblk -f` | | `-i` | inverse | 反向显示设备层级(从子设备到父设备,如先显示分区再显示硬盘) | `lsblk -i` | | `-l` | list | 以列表形式显示(而非默认的树状结构),适合脚本解析 | `lsblk -l` | | `-m` | permissions | 显示设备的权限信息(所有者、组、权限位,如 `root:disk`) | `lsblk -m` | | `-n` | noheadings | 不显示表头(列名),适合脚本中提取数据 | `lsblk -n -o NAME,SIZE` | | `-o` | output | 自定义显示列(按需选择字段,避免冗余) | `lsblk -o NAME,SIZE,TYPE,MOUNTPOINT` | | `-p` | paths | 显示设备的完整路径(如 `/dev/sda1` 而非 `sda1`) | `lsblk -p` | | `-t` | topology | 显示设备拓扑信息(如扇区大小、物理扇区、IO 调度器) | `lsblk -t` | | `-x` | sort | 按指定列排序(如按大小 `SIZE`、名称 `NAME` 排序) | `lsblk -x SIZE` | ### 常用组合选项 - 查看关键信息(名称、大小、类型、挂载点):`lsblk -o NAME,SIZE,TYPE,MOUNTPOINT` - 查看文件系统+权限+完整路径:`lsblk -f -m -p` - 脚本提取 UUID(无表头+列表形式):`lsblk -n -l -o NAME,UUID` # lsblk 输出结果详解 `lsblk` 默认以**树状结构**输出,清晰展示设备的父子关系(如硬盘 → 分区 → 逻辑卷) 执行下面命令: ``` lsblk ``` 输出结果如下: ```bash NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465.8G 0 disk ├─sda1 8:1 0 512M 0 part /boot ├─sda2 8:2 0 16G 0 part [SWAP] └─sda3 8:3 0 449.3G 0 part / sr0 11:0 1 1024M 0 rom nvme0n1 259:0 0 931.5G 0 disk └─nvme0n1p1 259:1 0 931.5G 0 part /data ``` ### 解释 - sda:有一个 sata 硬盘,465.8G,该硬盘分为3个分区(相当于windows 3个盘符) - sda1分区:挂载到 `/boot` 目录(相当于windows的 C 盘),512M - sda2:分区,交换分区,16G - sda3:挂载到 `/` 目录,449.3G - sr0:一个光驱 - nvme0n1:一个 NVMe 硬盘,即:固态硬盘,931.5G,只有一个分区: - nvme0n1p1:挂载到 `/data` 目录 ### 列含义解释 | 列名 | 英文全称 | 中文含义 | 示例说明 | |------|----------|----------|----------| | `NAME` | Name | 设备名称 | `sda`(SATA 硬盘)、`nvme0n1`(NVMe 硬盘)、`sda1`(sda 的第一个分区) | | `MAJ:MIN` | Major:Minor | 主设备号:次设备号 | 内核识别设备的标识(如 `8:0` 代表 sda 硬盘,`8:1` 代表 sda1 分区) | | `RM` | Removable | 是否可移动设备 | `0`(不可移动,如本地硬盘)、`1`(可移动,如 U 盘、光驱) | | `SIZE` | Size | 设备容量 | 默认以易读单位显示(GB/MB/KB),如 `465.8G`、`512M` | | `RO` | Read Only | 是否只读 | `0`(可读写)、`1`(只读,如光驱、光盘) | | `TYPE` | Type | 设备类型 | `disk`(物理硬盘)、`part`(分区)、`rom`(光驱)、`loop`(内存盘)、`lvm`(逻辑卷)、`raid`(RAID 设备) | | `MOUNTPOINT` | Mount Point | 挂载点 | 设备挂载的目录(如 `/` 根分区、`/boot` 引导分区、`[SWAP]` 交换分区、空值表示未挂载) | # lsblk -f 选项输出示例(文件系统信息) ```bash NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 xfs 7a9b-cdef-1234-5678-90ab-cdef01234567 /boot ├─sda2 swap 89ab-cdef-1234-5678-90ab-cdef01234567 [SWAP] └─sda3 xfs a1b2-cdef-1234-5678-90ab-cdef01234567 / nvme0n1 └─nvme0n1p1 ext4 c3d4-cdef-1234-5678-90ab-cdef01234567 /data ``` 新增列说明: - `FSTYPE`:文件系统类型(如 `xfs`、`ext4`、`swap`); - `LABEL`:设备标签(自定义名称,可为空); - `UUID`:设备唯一标识符(挂载时推荐用 UUID,避免设备名变动导致挂载失败)。 # 案例 ### 查看系统所有存储设备(快速排查) ```bash lsblk ``` - 用途:快速了解服务器有哪些硬盘、分区,哪些已挂载,是否有未使用的存储设备。 ### 查看 U 盘是否被识别(外接设备排查) ```bash lsblk -a # 显示所有设备,包含 U 盘 ``` - 识别特征:`RM=1`(可移动)、`TYPE=disk`(硬盘),子设备为 `part`(分区),如 `sdb`(U 盘)→ `sdb1`(U 盘分区)。 ### 查看未挂载的分区(磁盘扩容/挂载准备) ```bash lsblk -o NAME,SIZE,TYPE,MOUNTPOINT | grep -E 'part|MOUNTPOINT' ``` - 筛选出所有分区,查看 `MOUNTPOINT` 为空的分区(未挂载),可用于扩容或新挂载。 # 总结 `lsblk` 是 Linux 存储管理的“瑞士军刀”,核心优势是**输出直观、信息全面、选项灵活**: - 新手:用 `lsblk` 快速了解系统存储布局; - 运维:用 `lsblk -f` 查看 UUID 用于永久挂载,用组合选项提取数据用于脚本; - 排障:用 `lsblk -a` 排查外接设备识别问题,用 `lsblk -o` 自定义字段定位存储异常。 原文出处:http://www.malaoshi.top/show_1GW2KOsRvGAP.html