blkid是查UUID和LABEL的唯一可靠命令,它绕过挂载状态与udev缓存,直接读取文件系统superblock;lsblk -f依赖内核识别,对未格式化、刚改标签或swap分区易漏字段。

blkid 是查 UUID 和 LABEL 的唯一可靠入口
别用 lsblk -f 当主力——它依赖 udev 缓存和挂载状态,未格式化、刚改完标签、或 swap 分区都可能漏字段。真正能绕过挂载、不看 udev、直接读 superblock 的只有 blkid。
- 查全部:
sudo blkid,输出带引号的完整元数据,含UUID、TYPE、LABEL(如果存在) - 只取 UUID 字符串(脚本友好):
sudo blkid -s UUID -o value /dev/sdb1 - 只取 LABEL:
sudo blkid -s LABEL -o value /dev/sdb1 - 刚格式化或改过标签后看不到新值?加
-p强制重读:sudo blkid -p /dev/sdc1
修改 LABEL 后必须验证是否生效
改完不验证等于没改。不同文件系统用不同工具设 LABEL,且改完后 blkid 不一定立刻反映——因为内核缓存或 udev 没刷新。
- ext2/3/4:
sudo e2label /dev/sdb1 "DATA",然后立即跑sudo blkid /dev/sdb1看 LABEL 是否更新 - XFS:
sudo xfs_admin -L "BACKUP" /dev/sdb1,注意:必须卸载后操作,否则报错Device or resource busy - FAT/NTFS:
sudo fatlabel /dev/sdb1 "BOOT"或sudo ntfslabel /dev/sdb1 "WIN" - 改完立刻验证:
sudo blkid -p /dev/sdb1(-p 绕过缓存),再确认/dev/disk/by-label/下链接是否生成
/dev/disk/by-uuid 和 /dev/disk/by-label 不是实时视图
这两个目录是 udev 动态生成的符号链接,不是“数据库”,它们只反映上次 udev 扫描时的状态。链接存在 ≠ UUID/LABEL 有效,链接缺失也不代表没设置成功。
- 查看映射:
ls -l /dev/disk/by-uuid/或ls -l /dev/disk/by-label/ - 某 UUID 链接指向
../../sdd4,但/dev/sdd4实际不存在?说明设备已拔出或未被内核识别 - 刚设完 LABEL 却不见链接?执行
sudo udevadm trigger --subsystem-match=block强制重触发 - swap 分区永远不会有
/dev/disk/by-label/链接——swap 不支持 LABEL,这是设计如此,不是你操作错了
别把分区 UUID 和系统 UUID 混成一回事
搜“Linux 查 UUID”却跑 blkid,结果看到一堆 /dev/sda1 的 UUID——那是文件系统的 ID,跟机器本身无关。你要的是哪一层的唯一性,决定了该用哪个命令。
- 要配
/etc/fstab或 grub?用blkid查分区 UUID - 要做主机注册、license 绑定、集群节点识别?看
/sys/class/dmi/id/product_uuid(主板固件 UUID)或/etc/machine-id(systemd 逻辑 ID) - 克隆虚拟机后所有机器
/etc/machine-id都一样?必须重置:sudo systemd-machine-id-setup - 容器里跑
dmidecode失败?退到cat /sys/class/dmi/id/product_uuid 2>/dev/null,但得接受虚拟机可能返回全零
真正容易被忽略的是:UUID 是文件系统的属性,不是分区的固有属性;LABEL 是用户写入的字符串,不是设备物理特征——改了就能变,别当成防篡改标识。


















