blkid 是最可靠的方式,它直接读取文件系统超级块,不依赖挂载状态、不看 udev 缓存,只要分区已格式化就能拿到真实 uuid 和 label;其他命令存在字段缺失、设备遗漏或显示异常等问题。

blkid 是最可靠的方式,它直接读取文件系统超级块,不依赖挂载状态、不看 udev 缓存,只要分区已格式化就能拿到真实 UUID 和 LABEL。其他命令要么缺字段,要么漏设备,容易误判。
用 blkid 查全部设备的 UUID 和 LABEL
这是首选操作,尤其当你不确定哪些分区已格式化或是否挂载时:
- 运行
sudo blkid—— 输出每行一个设备,含UUID=、TYPE=、LABEL=(如果存在),格式规整,可直接复制进/etc/fstab - 只看 UUID 列:
sudo blkid -s UUID;只看 LABEL:sudo blkid -s LABEL - 提取纯字符串(脚本友好):
sudo blkid -s UUID -o value /dev/sdb1输出就是a1b2c3d4-5678-90ef-ghij-klmnopqrst,无引号无空格 - 刚格式化或改过标签后没立刻显示?加
-p强制重读:sudo blkid -p /dev/sdc1
注意:blkid 对未格式化的裸分区(比如 fdisk 分完还没 mkfs)不会输出任何内容——这不是 bug,是它在告诉你“这里没有文件系统”。
为什么 lsblk -f 有时看不到 UUID 或 LABEL
lsblk -f 看起来方便,但它不是主动探测,而是依赖内核通过 sysfs 暴露的信息,有明显盲区:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 未挂载且没设
LABEL的 ext4 分区:UUID列可能为空(即使实际存在) - swap 分区:
LABEL永远为空,UUID不显示(但blkid会显示) - NTFS/FAT 分区:
UUID显示为大写十六进制串(如963C46D73C46B253),不是标准 8-4-4-4-12 格式;LABEL可能被截断或含乱码 - 刚创建的分区没触发 udev 事件:
lsblk -f可能完全不列出该设备,而blkid仍能扫到
从 /dev/disk/by-uuid/ 和 /dev/disk/by-label/ 反查设备
这两个目录是符号链接集合,适合“已知值,找设备”,不能用来确认 UUID 是否有效:
-
ls -l /dev/disk/by-uuid/—— 每个文件名就是 UUID,指向真实设备路径(如a1b2c3d4-... -> ../../nvme0n1p1) -
ls -l /dev/disk/by-label/—— 同理,文件名是LABEL,但仅对设过标签的分区存在 - 链接存在 ≠ 设备可用:目标设备节点可能已被拔出、损坏,或权限不足导致无法访问
- 刚改完
LABEL(用e2label或xfs_admin)后,链接不会立刻更新;需等 udev 重载,或手动触发:sudo udevadm trigger --subsystem-match=block
真正容易被忽略的是:UUID 是文件系统的属性,不是分区的固有标识——换言之,重格式化就会变,而设备路径(如 /dev/sdb1)才是物理层面的固定位置。










