当前位置:首页>Linux>每天学一个Linux命令系列(进阶篇10):lsblk/blkid - 磁盘长什么样?UUID是多少?这两个命令全搞定

每天学一个Linux命令系列(进阶篇10):lsblk/blkid - 磁盘长什么样?UUID是多少?这两个命令全搞定

  • 2026-09-02 19:33:32
每天学一个Linux命令系列(进阶篇10):lsblk/blkid - 磁盘长什么样?UUID是多少?这两个命令全搞定
运
运维少年 · 科技观察

为什么需要lsblk和blkid

很多刚开始接触Linux服务器的朋友,要查看磁盘信息时第一反应是 fdisk -l。fdisk确实能看到磁盘信息,但它的输出格式相对老旧,而且不会直观展示磁盘之间的父子关系(比如哪个分区在哪个磁盘上)。

lsblk(list block devices,列出块设备)就是为此设计的。它用树状结构展示磁盘、分区以及它们之间的从属关系,看一眼就知道你有多块硬盘、每块分了几个区、挂载在哪里。而 blkid(block device ID)则专门用来查看块设备的UUID(通用唯一标识符)和文件系统的LABEL(标签)。

我个人的经验是,lsblk和blkid是磁盘管理中最互补的一对命令。lsblk展示拓扑结构,blkid展示身份标识。配合使用,几分钟就能摸清一台陌生服务器的磁盘布局。

lsblk基本用法

查看磁盘拓扑结构

# 查看所有块设备的树状视图
lsblk

输出示例:

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 465.8G  0 disk
├─sda1        8:1    0   512M  0 part /boot/efi
├─sda2        8:2    0 200.4G  0 part /
└─sda3        8:3    0 264.9G  0 part /home
nvme0n1     259:0    0 238.5G  0 disk
└─nvme0n1p1 259:1    0 238.5G  0 part /data

从这个输出可以清晰看到:系统有两块磁盘,一块是 sda(传统的SATA/SCSI磁盘),容量465.8GB,分了三个区;另一块是 nvme0n1(NVMe固态硬盘),容量238.5GB,只有一个分区。每个分区挂载在哪里也是一目了然。

各列的含义:

  • ·NAME:设备名称
  • ·MAJ:MIN:设备主次编号
  • ·RM:是否可移动设备(1表示是可移动的,如U盘)
  • ·SIZE:容量大小
  • ·RO:是否只读
  • ·TYPE:设备类型(disk=磁盘,part=分区,rom=光驱)
  • ·MOUNTPOINT:挂载点

查看文件系统和UUID

这是lsblk最实用的参数之一,结合了文件系统类型、UUID等功能。

# 查看文件系统类型和UUID
lsblk -f

输出示例:

NAME        FSTYPE FSVER LABEL  UUID                                 FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1      vfat   FAT32        1234-ABCD                             499.8M     2% /boot/efi
├─sda2      ext4   1.0           a1b2c3d4-e5f6-7890-abcd-ef1234567890 120.5G    40% /
└─sda3      ext4   1.0           b2c3d4e5-f6a7-8901-bcde-f12345678901 200.3G    24% /home
nvme0n1
└─nvme0n1p1 ext4   1.0   data     c3d4e5f6-a7b8-9012-cdef-123456789012 180.2G    24% /data

这里的 FSTYPE 列显示了文件系统类型(如 ext4、vfat、xfs),UUID 列显示了每个分区的唯一标识,LABEL 列显示了卷标(如果设置过的话)。data 这个卷标就是手动设置的,方便识别用途。

其他实用参数

# 显示设备大小以易读格式(MB/GB),默认已经是这样
lsblk --output NAME,SIZE,TYPE,MOUNTPOINT

# 显示所有列信息,包括磁盘型号、厂商等
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,MODEL,VENDOR

# 只列出磁盘设备,不显示分区
lsblk -d

-o 参数可以自定义输出列。如果你只需要设备名和挂载点来确定磁盘使用情况,就可以只输出这两列,让结果更干净。

blkid查看UUID和LABEL

blkid 是专门用来查看和管理块设备身份标识的。它的核心作用就是告诉你每个分区的UUID、文件系统类型和卷标。

# 查看所有块设备的UUID和LABEL
sudo blkid

输出示例:

/dev/sda1: UUID="1234-ABCD" TYPE="vfat" PARTUUID="abcd1234-01"
/dev/sda2: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4" PARTUUID="abcd1234-02"
/dev/sda3: UUID="b2c3d4e5-f6a7-8901-bcde-f12345678901" TYPE="ext4" PARTUUID="abcd1234-03"
/dev/nvme0n1p1: UUID="c3d4e5f6-a7b8-9012-cdef-123456789012" TYPE="ext4" LABEL="data" PARTUUID="ef567890-01"

观察输出可以看到,UUID 是文件系统级别的,PARTUUID 是分区表级别的(GPT分区表自带的标识)。两者用途不同,但在 /etc/fstab 里都可以用。

查看指定设备的UUID

# 只查看指定分区的UUID
sudo blkid /dev/sda2

# 只显示UUID值,不显示其他信息
sudo blkid -s UUID /dev/sda2

# 只显示UUID值(去掉键名,方便脚本使用)
sudo blkid /dev/sda2 -o value -s UUID

最后一种写法在脚本中很常用,因为输出的值可以直接赋值给变量。

# 把UUID赋值给脚本变量
DISK_UUID=$(sudo blkid /dev/sda2 -o value -s UUID)
echo "系统盘UUID为: $DISK_UUID"

查看设备的文件系统LABEL

# 查看指定设备的标签
sudo blkid /dev/nvme0n1p1 -o value -s LABEL

# 也可以从 lsblk 看到
lsblk -f /dev/nvme0n1p1

卷标(LABEL)是文件系统创建时可以设置的名称,比如把数据盘设置为 data、backup、logs 等,方便识别用途。

修改文件系统LABEL

既然提到了LABEL,顺便说一下怎么设置和修改它。

# 修改 ext4 文件系统的卷标
sudo e2label /dev/nvme0n1p1 data

# 或者使用 tune2fs 命令
sudo tune2fs -L data /dev/nvme0n1p1

注意,设置卷标要确保设备当前没有被挂载,或者以只读方式挂载也可以。被正常读写挂载的分区直接改卷标可能会失败。

为什么UUID比设备名更可靠

在Linux中,设备名如 /dev/sda 是根据内核探测顺序动态分配的。这意味着你加了一块新硬盘或者换了一个SATA接口,设备名就可能发生变化。比如原本的系统盘是 /dev/sda,加了一块新硬盘后变成了 /dev/sdb,但新硬盘被识别成了 /dev/sda。系统从错误的磁盘上启动,后果很严重。

UUID 是文件系统创建时生成的唯一标识,只要文件系统不重新格式化,UUID就不会变。所以在 /etc/fstab(文件系统表,系统启动时自动挂载的依据)中使用UUID而不是设备名,可以避免上述问题。

# 查看当前系统使用的 fstab,看看是不是用UUID挂载的
cat /etc/fstab

好的 fstab 应该是这样的:

UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 / ext4 defaults 0 1
UUID=b2c3d4e5-f6a7-8901-bcde-f12345678901 /home ext4 defaults 0 2

而不是这样的:

/dev/sda2 / ext4 defaults 0 1
/dev/sda3 /home ext4 defaults 0 2

第一种写法用UUID,即使盘符漂移也不影响启动。第二种写法用设备名,换个接口就可能出问题。

实际排障案例

有一次接手一台旧服务器,发现 /data 目录挂载不上。跑 df -h 看不到 /data,但 lsblk 能看到一块独立的磁盘和设备。

# 第一步:查看磁盘拓扑
lsblk
# 发现 sdb 磁盘存在但没有分区挂载

# 第二步:查看是否有文件系统
sudo blkid /dev/sdb1
# 发现该分区确实有 ext4 文件系统

# 第三步:检查 /etc/fstab
cat /etc/fstab
# 发现之前的人用 /dev/sdb1 写的挂载,但系统重启后盘符变成了 /dev/sdc

# 第四步:用 blkid 获取正确 UUID 后修改 fstab
sudo blkid /dev/sdb1 -o value -s UUID
# 拿到 UUID 后修改 fstab,把 /dev/sdb1 替换成 UUID

问题就这么解决了。这就是 lsblk 和 blkid 配合使用最为常见的场景。

安全提醒

第一,blkid 命令本身是只读的,不会对系统造成损害。但 e2label 和 tune2fs -L 会修改文件系统的元数据。操作前确认设备名写对了,比如 /dev/sda1 和 /dev/sdb1 只差一个字母,搞错了后果很严重。

第二,修改 /etc/fstab 文件之前一定要备份。写错了fstab可能导致系统启动时无法挂载根文件系统,直接进入紧急模式(emergency mode),需要从救援盘修复。

# 修改 fstab 之前备份
sudo cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d)

第三,不要在已挂载的文件系统上执行 mke2fs 或 mkfs 之类格式化操作。格式化前一定要 df -h 确认当前挂载的是哪个设备。

第四,对U盘、SD卡等可移动设备操作时,要特别小心。很多人曾经把U盘的设备名写错成系统盘,导致系统盘被格式化,数据全部丢失。操作前用 lsblk 确认设备名和容量是核对身份的第一步。

总结

lsblk 和 blkid 是磁盘管理中最高频使用的两个命令。lsblk 帮你快速看到磁盘的"骨架",blkid 则告诉你每个部件的"身份证号"。配合使用,可以在几分钟内全面掌握一台服务器的磁盘布局和文件系统信息。

记住了,写 fstab 永远用UUID,不要用设备名。这一条经验就能帮你避免很多灾难性的启动故障。

相关阅读

  • ·man lsblk:完整的参数和输出列定义
  • ·man blkid:了解支持的所有标识类型
  • ·man fstab:下一篇文章会详细讲解

E N D

运维少年 · 科技观察

最新文章

随机文章