Linux blkid 命令:查询 UUID、文件系统类型与分区标识

blkid 查询块设备内容的文件系统类型、UUID 和标签等识别信息,适合核对挂载配置中的标识。它识别设备上记录的内容,不显示完整的磁盘依赖树,也不能单独证明设备可安全覆盖。

UUID 是 Universally Unique Identifier,即通用唯一标识符,常用于标识文件系统;TYPE 表示识别出的内容类型,LABEL 是已设置的标签。相比 /dev/sdX 设备名,UUID 较少受硬件检测顺序影响,但克隆可能产生重复值,重新创建文件系统也可能改变标识。

基本语法与查询权限

blkid [options] [device]

方括号中的词是说明性占位符,不应原样输入。本文以 util-linux 的 blkid 为范围;实现和选项可能不同,应先用 man blkid 核对本机手册。未指定设备时,可显示识别到的分区或未分区设备;指定设备时,只查询对应对象。

设备概览通常可先通过 lsblk 的设备结构与文件系统查询了解。blkid 在具备权限时可从设备读取内容;普通用户可能获得尚未验证的缓存信息。输出为空、缺少字段或设备未列出,都不能直接推断“没有文件系统”。

查询设备与提取 UUID

查看能够识别的设备。 具备相应管理员授权时:

sudo blkid

这会列出识别到的属性,结果不保证包括所有物理磁盘,也不是挂载状态清单。设备和属性的输出顺序不固定,脚本不应依赖某个设备总在第一行。

查询一个已确认的分区。

sudo blkid /dev/sdb1

/dev/sdb1 仅是示例,应替换为本机已核实的设备路径。先对照主机、设备容量与 lsblk 关系,再读取属性;不要把示例设备名直接用于后续写入或挂载操作。

只提取该设备的 UUID 标签值。

sudo blkid -s UUID -o value /dev/sdb1

-s UUID 选择标签,-o value 省略标签名,只输出其值。对于一个设备且存在该标签时,通常可得到一个值;空输出不能直接当作可用 UUID,更不能据此把空字符串写入配置。

尤其要注意:上游说明 -s 只过滤显示标签,不改变退出状态。因此即使命令返回成功,也仍须检查实际输出是否非空、是否符合预期设备的标识,不能只检查返回码就认为 UUID 已正确提取。

读懂 UUID、TYPE 和 PARTUUID

下面使用另一个示例设备,说明完整属性输出。它不是要求改查或修改系统根分区:

sudo blkid /dev/sda2

以下标识符仅用于演示,不是当前主机实测值,不能复制到实际配置:

/dev/sda2: UUID="11111111-2222-3333-4444-555555555555" TYPE="ext4"

冒号前是设备路径,UUID 后的引号中是内容的标识值,TYPE="ext4" 表示识别到 ext4 文件系统。实际结果还可能有 LABEL、PARTUUID 或其他属性;并非每个设备都会出现每个字段。TYPE 还可能表示交换空间等内容,不应与 lsblk 中 disk、part、lvm 这类设备类型混淆。

UUID 通常标识文件系统等内容;PARTUUID 标识分区表中的分区,两者不是同一个层次。只重新创建文件系统未必改变分区表标识;重建分区或克隆也可能影响其值。应读取实际字段,而不是根据“操作了什么”猜测新的标识。

fstab 的设备标识说明支持用 UUID=、LABEL= 等引用设备,也说明可使用 PARTUUID= 等分区标识。向 /etc/fstab 写入前须结合文件系统类型、目标挂载点和现有设置核对;这里提供的是查询方法,不是可直接粘贴的完整挂载配置。

主要选项与查找方式

选项 用途与条件
-s tag 仅显示指定标签,如 UUID 或 TYPE;不改变退出状态。
-o format 指定输出格式;value 只显示标签值。
-L label 按文件系统标签查找并返回设备路径。
-U UUID 按文件系统 UUID 查找并返回设备路径。
-p 低级探测,绕过缓存;可能显示不同的属性名与额外状态。

例如 sudo blkid -L 'data volume' 中的标签应换为实际值,包含空格时加引号;sudo blkid -U '实际UUID' 中也须替换占位内容。两者用于定位路径,不能证明该标识在所有设备中唯一。若怀疑克隆造成重复,应结合 lsblk 和具体设备查询逐项排查。

旧的 e2fsprogs 实现对 -L 的含义可能不同,应先确认实现;可移植脚本需要按对应手册选择查询方式。不要把 util-linux 的示例直接套到所有同名程序上。

空结果、冲突与安全核对

普通查询可能忽略检测出多个冲突文件系统签名的设备。支持且具备读取权限时,可针对已核实设备使用低级模式,例如 sudo blkid -p /dev/sdb1,但不能把“低级探测”当作修复、检查文件系统完整性或擦除旧签名。

低级模式可能使用 PART_ENTRY_UUID 等属性名,而通常查询显示 PARTUUID;解析时不能假设两种模式的字段名完全相同。util-linux 手册给出的状态包括:0 表示取得可识别信息,2 表示指定标识未找到或无法取得识别信息,4 表示用法等错误,8 表示低级探测发现歧义。应把状态、错误信息和输出内容一起判断。

  1. 先核对目标主机和真实设备路径,区分整盘、分区与逻辑设备。
  2. 对照 lsblk 的容量和依赖关系,以及实际挂载状态,确认识别值属于预期对象。
  3. 怀疑重复 UUID 或缓存陈旧时,核对具体设备和权限;不要仅凭一次按标识查找的结果执行写入。
  4. 修改配置或进行存储操作前,另行确认备份和恢复方式;查询不到信息也不是格式化或擦除签名的依据。

blkid 用于识别内容,不会替你建立备份、验证应用可用性或证明设备闲置。遇到缓存、权限或签名冲突,应先查清原因,再按文件系统与存储方案处理;不要为了让查询结果“干净”而删除数据或标识。

常见问题

blkid 的 UUID 与 PARTUUID 相同吗?

不同。UUID 通常来自文件系统等内容,PARTUUID 来自分区表中的分区标识。两者可能同时存在,也可能只有其中一个;配置时必须使用对应前缀和实际查询到的值。

官方文档

util-linux 上游 blkid 手册说明标签选择、缓存、低级探测、输出格式和退出状态。最新手册可能包含旧版本没有的功能,应以本机支持的选项为准。