CentOS系统下查询UUID的正确方法是什么?

在 CentOS 系统管理中,UUID(Universally Unique Identifier,通用唯一识别码)扮演着至关重要的角色,它是一个128位的数字,用于唯一标识系统中的各种对象,最常见的是文件系统和分区,与 /dev/sda1 这类设备名称相比,UUID 的最大优势在于其稳定性和唯一性,设备名称可能会在添加或移除硬盘后发生变化,而 UUID 则保持不变,这使得它在配置文件系统挂载、系统脚本和自动化任务时极为可靠,本文将详细介绍在 CentOS 环境下查询不同类型 UUID 的多种方法,并探讨其实际应用场景。

CentOS系统下查询UUID的正确方法是什么?


查询文件系统和分区的 UUID

这是最常见的需求,通常用于配置 /etc/fstab 文件以确保磁盘分区能够被正确且稳定地挂载,以下是几种主流且高效的方法。

使用 lsblk 命令

lsblk(list block devices)是一个现代且用户友好的命令,能够以树状结构清晰地展示块设备、分区及其挂载点等信息,结合 -f--fs 选项,它可以同时显示文件系统的 UUID。

命令格式:

lsblk -f

示例输出:

NAME   FSTYPE   LABEL       UUID                                 MOUNTPOINT
sda
├─sda1 xfs                  a1b2c3d4-e5f6-7890-abcd-ef1234567890 /boot
└─sda2 LVM2_member          f6e5d4c3-b2a1-0987-dcba-5432109876fed 
  ├─cl-root xfs              g7h8i9j0-k1l2-3456-mnop-qrstuvwxyz1234 /
  └─cl-swap swap             h8i9j0k1-l2m3-4567-nopq-rstuvwxyz1234 [SWAP]
sdb
└─sdb1 ext4      data_disk   i9j0k1l2-m3n4-5678-opqr-stuvwxyz123456 /mnt/data

优点:

  • 信息全面: 一目了然地展示了设备名称、文件系统类型、UUID 和挂载点。
  • 结构清晰: 树状结构直观地显示了分区与父磁盘的关系。
  • 无需 root 权限: 普通用户即可执行,方便日常查询。

使用 blkid 命令

blkid(block id)是一个经典的命令行工具,专门用于查询块设备的属性,包括 UUID、文件系统类型和 PARTUUID(分区 UUID)。

命令格式:

sudo blkid

(在某些系统配置下,可能需要 sudo 权限才能读取所有设备信息)

示例输出:

/dev/sda1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="xfs" PARTUUID="..."
/dev/sda2: UUID="f6e5d4c3-b2a1-0987-dcba-5432109876fed" TYPE="LVM2_member" PARTUUID="..."
/dev/mapper/cl-root: UUID="g7h8i9j0-k1l2-3456-mnop-qrstuvwxyz1234" TYPE="xfs"
/dev/mapper/cl-swap: UUID="h8i9j0k1-l2m3-4567-nopq-rstuvwxyz1234" TYPE="swap"
/dev/sdb1: UUID="i9j0k1l2-m3n4-5678-opqr-stuvwxyz123456" TYPE="ext4" PARTLABEL="primary" PARTUUID="..."

你也可以指定单个设备进行查询:

sudo blkid /dev/sdb1

优点:

  • 专业且详细: 提供了包括 PARTUUID 在内的底层信息,对于引导加载程序(如 GRUB)配置非常有用。
  • 脚本友好: 其输出格式(设备: 属性="值")易于在 shell 脚本中进行解析和处理。

使用 findmnt 命令

findmnt 命令用于查找已挂载的文件系统,通过自定义输出列,可以专门查看已挂载分区的 UUID。

命令格式:

CentOS系统下查询UUID的正确方法是什么?

findmnt -o UUID,SOURCE,TARGET

示例输出:

UUID                                   SOURCE                     TARGET
                                       /dev/sda1                  /boot
g7h8i9j0-k1l2-3456-mnop-qrstuvwxyz1234 /dev/mapper/cl-root         /
h8i9j0k1-l2m3-4567-nopq-rstuvwxyz1234 /dev/mapper/cl-swap         [SWAP]
i9j0k1l2-m3n4-5678-opqr-stuvwxyz123456 /dev/sdb1                  /mnt/data

优点:

  • 聚焦挂载点: 只显示已挂载的设备,信息更集中。
  • 格式化输出: 输出为整齐的表格形式,易于阅读。

查看 /dev/disk/by-uuid/ 目录

Linux 系统的 udev 设备管理器会自动在 /dev/disk/by-uuid/ 目录下创建一系列符号链接,这些链接的名称就是对应文件系统的 UUID,它们指向实际的设备文件。

命令格式:

ls -l /dev/disk/by-uuid/

示例输出:

total 0
lrwxrwxrwx. 1 root root 10 Dec 15 10:30 a1b2c3d4-e5f6-7890-abcd-ef1234567890 -> ../../sda1
lrwxrwxrwx. 1 root root 10 Dec 15 10:30 g7h8i9j0-k1l2-3456-mnop-qrstuvwxyz1234 -> ../../dm-0
lrwxrwxrwx. 1 root root 10 Dec 15 10:30 h8i9j0k1-l2m3-4567-nopq-rstuvwxyz1234 -> ../../dm-1
lrwxrwxrwx. 1 root root 10 Dec 15 10:30 i9j0k1l2-m3n4-5678-opqr-stuvwxyz123456 -> ../../sdb1

优点:

  • 直观映射: 非常直观地展示了 UUID 与实际设备文件之间的对应关系。
  • 系统原生: 无需安装额外工具,是系统自带的功能。

查询系统产品 UUID

除了文件系统的 UUID,有时我们还需要获取整个机器的唯一标识符,这通常被称为系统 UUID 或产品 UUID,它存储在主板的 DMI(Desktop Management Interface)信息中,对于虚拟化平台、许可证管理和资产追踪非常有用。

命令格式:

sudo dmidecode -s system-uuid

示例输出:

03000200-0400-0500-0006-000700080009

注意:

  • 此命令必须使用 sudo 或 root 权限执行。
  • 在虚拟机中,这个 UUID 通常由虚拟化平台(如 VMware, VirtualBox)生成和管理。
  • 在物理机上,它由主板制造商提供。

方法对比与选择

为了方便您快速选择合适的方法,下表小编总结了上述几种工具的特点:

方法 命令 主要用途 优点 注意事项
lsblk lsblk -f 快速查看所有块设备的文件系统 UUID 和挂载点 信息全面、结构清晰、无需 root 无法查看系统产品 UUID
blkid sudo blkid 查询任意块设备的详细属性,包括 UUID 和 PARTUUID 信息详细、脚本友好、功能专一 可能需要 root 权限
findmnt findmnt -o UUID,... 查看已挂载文件系统的 UUID 聚焦挂载点、输出格式化 无法查看未挂载的设备
/dev/disk/by-uuid/ ls -l /dev/disk/by-uuid/ 直观查看 UUID 与设备的符号链接映射 系统原生、非常直观 仅显示文件系统 UUID
dmidecode sudo dmidecode -s system-uuid 获取整机/主板的产品 UUID 唯一标识机器本身 必须使用 root 权限

实际应用场景

掌握 UUID 的查询方法后,其核心价值在于实际应用。

配置 /etc/fstab 实现稳定挂载

CentOS系统下查询UUID的正确方法是什么?

假设您有一块数据硬盘 /dev/sdb1,您希望它在系统启动时自动挂载到 /mnt/data,如果直接使用设备名,/etc/fstab 的条目可能如下:

/dev/sdb1   /mnt/data   ext4   defaults   0 2

这种写法的风险在于,如果未来添加了新的硬盘,/dev/sdb1 可能会变成 /dev/sdc1,导致挂载失败。

使用 UUID 则可以完美解决这个问题,首先通过 lsblk -f 查询到其 UUID 为 i9j0k1l2-m3n4-5678-opqr-stuvwxyz123456,然后修改 /etc/fstab

UUID=i9j0k1l2-m3n4-5678-opqr-stuvwxyz123456   /mnt/data   ext4   defaults   0 2

这样,无论设备名如何变化,系统都能准确地找到并挂载对应的分区。

系统监控与自动化脚本

在编写自动化运维脚本时,有时需要对特定机器执行操作,使用主机名可能不够可靠(主机名可以更改),而系统 UUID 则提供了一个更底层的、稳定的标识,脚本可以通过 dmidecode -s system-uuid 获取机器的唯一 ID,然后根据这个 ID 执行相应的逻辑判断或配置分发。


相关问答 (FAQs)

Q1: 如果我发现两个不同的分区拥有相同的 UUID,该怎么办?
A1: 这种情况非常罕见,通常发生在不正确地克隆硬盘或虚拟机磁盘时,系统可能会因此感到困惑,导致挂载问题,解决方法是为其中一个分区生成一个新的、随机的 UUID,对于 ext4 文件系统,可以使用 tune2fs 命令:

# 卸载需要修改的分区
sudo umount /dev/sdXn
# 为其生成一个新的随机 UUID
sudo tune2fs -U random /dev/sdXn

对于 xfs 文件系统,可以使用 xfs_admin

sudo umount /dev/sdXn
sudo xfs_admin -U generate /dev/sdXn

执行完毕后,重新挂载分区,其 UUID 就已经更新了,请务必确认您修改的是正确的分区,以免造成数据丢失。

Q2: lsblk -fblkid 在查询文件系统 UUID 时,我应该优先选择哪一个?
A2: 这取决于您的具体需求。

  • 日常快速查看和确认:优先推荐 lsblk -f,它的输出以树状结构呈现,包含了挂载点等关键信息,非常直观,适合人眼阅读和快速定位问题。
  • 编写脚本或需要更详细信息时blkid 是更好的选择,它的输出是标准的 key="value" 格式,便于 grep, awk, sed 等工具进行解析。blkid 还能提供 PARTUUID(分区表 UUID),这在配置 GRUB 引导器等场景中是必需的,而 lsblk 默认不显示此信息。

lsblk -f 更偏向于“看”,而 blkid 更偏向于“用”,作为系统管理员,熟练掌握这两个命令会让你在不同场景下都能游刃有余。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-10 14:04
下一篇 2025-10-10 14:07

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信