在 CentOS 系统管理中,UUID(Universally Unique Identifier,通用唯一识别码)扮演着至关重要的角色,它是一个128位的数字,用于唯一标识系统中的各种对象,最常见的是文件系统和分区,与 /dev/sda1
这类设备名称相比,UUID 的最大优势在于其稳定性和唯一性,设备名称可能会在添加或移除硬盘后发生变化,而 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。
命令格式:
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
实现稳定挂载
假设您有一块数据硬盘 /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 -f
和 blkid
在查询文件系统 UUID 时,我应该优先选择哪一个?
A2: 这取决于您的具体需求。
- 日常快速查看和确认:优先推荐
lsblk -f
,它的输出以树状结构呈现,包含了挂载点等关键信息,非常直观,适合人眼阅读和快速定位问题。 - 编写脚本或需要更详细信息时:
blkid
是更好的选择,它的输出是标准的key="value"
格式,便于grep
,awk
,sed
等工具进行解析。blkid
还能提供PARTUUID
(分区表 UUID),这在配置 GRUB 引导器等场景中是必需的,而lsblk
默认不显示此信息。
lsblk -f
更偏向于“看”,而 blkid
更偏向于“用”,作为系统管理员,熟练掌握这两个命令会让你在不同场景下都能游刃有余。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复