当前位置:首页 > Linux > 正文

linux中如何查看uuid

在 Linux 中,可通过 sudo blkid 命令查看磁盘及分区的 UUID

在Linux系统中,通用唯一标识符(UUID)是用于唯一标识存储设备(如硬盘、分区、逻辑卷等)的重要属性,它广泛应用于自动挂载文件系统、引导加载程序配置、云平台资源管理等场景,本文将系统化讲解如何在Linux中查看各类设备的UUID,涵盖多种实用命令、输出解析、典型应用场景及常见问题解决方案。


核心概念与作用

1 什么是UUID?

  • 定义:UUID(Universally Unique Identifier)是一个128位的全局唯一标识符,遵循RFC 4122标准,在Linux中,它通常以36字符的字符串形式呈现(含连字符),5f9d...
  • 作用:替代传统设备节点路径(如/dev/sda1),解决设备命名不稳定问题(如热插拔后设备名变化)。
  • 典型用途
    • /etc/fstab文件中指定文件系统的持久化挂载点;
    • Kickstart/Anaconda安装程序识别目标磁盘;
    • LVM逻辑卷管理;
    • 分布式存储系统(如Ceph)的设备追踪。

2 与其他标识符的区别

类型 特点 稳定性 适用场景
设备路径 /dev/sda1 低(易变) 临时脚本
标签(LABEL) 用户自定义名称 中(可修改) 人类可读性优先的场景
UUID 系统生成的唯一编码 高(不变) 自动化配置、关键服务
PTUUID Partition Table UUID 极高 GPT分区表关联

主流查看方法详解

1 blkid命令(推荐)

功能:专门用于显示块设备的UUID及其他属性。
语法blkid [选项] <设备路径>
常用选项

  • -o value:仅输出指定属性的值(如blkid -o value -s UUID /dev/sdb2);
  • -p:显示完整设备拓扑路径;
  • -c <缓存时间>:设置缓存有效期(秒)。

示例操作

# 查看所有块设备的UUID
sudo blkid
# 查看特定分区的UUID
sudo blkid /dev/nvme0n1p3

典型输出解析

/dev/sda1: UUID="a8f7c9..." TYPE="ext4" ...
/dev/mapper/myvg-lvm: UUID="b3e2d1..." TYPE="LVM2_member" ...
  • UUID字段即为所需值;
  • TYPE表示文件系统类型;
  • PARTUUID对应GPT分区的唯一编号。

2 lsblk命令(综合信息展示)

功能:列出所有块设备及其层级关系,支持过滤和格式化输出。
语法lsblk [选项] [设备路径]
关键选项

  • -f:显示文件系统信息;
  • -o <字段列表>:自定义输出列(如-o NAME,UUID,FSTYPE);
  • -n:仅显示设备名称。

示例操作

linux中如何查看uuid  第1张

# 查看所有设备的UUID和文件系统类型
lsblk -o NAME,UUID,FSTYPE,MOUNTPOINT
# 结合grep筛选特定设备
lsblk -o NAME,UUID | grep 'sd[a-z]'

输出示例
| NAME | UUID | FSTYPE | MOUNTPOINT |
|————–|———————————–|——–|————|
| /dev/sda1 | a8f7c9… | ext4 | / |
| /dev/sdb1 | d2e8f1… | xfs | /data |
| /dev/nvme0n1p3 | f4a9b2… | swap | [swap] |

3 vol_id命令(跨平台兼容)

背景:由util-linux包提供,专为文件系统设计,适合容器环境。
语法vol_id [选项] <设备或挂载点>
典型用法

# 通过挂载点获取UUID
vol_id --uuid /mnt/mydisk
# 直接指定设备路径
vol_id --uuid /dev/md0

4 直接读取文件系统元数据

风险提示:此方法需直接访问设备原始数据,操作不当可能导致数据损坏!
步骤

  1. 使用dd命令读取超级块前512字节:
    sudo dd if=/dev/sda1 of=superblock.bin bs=512 count=1 status=none
  2. 使用xxdhexdump查看二进制内容,定位UUID字段(具体位置取决于文件系统类型)。
    • ext4/xfs:位于超级块的第36-67字节;
    • Btrfs:存储在超级块尾部。

此方法仅建议高级用户调试时使用,日常维护请优先选择前三种安全方式。


特殊场景处理

1 GPT分区表的Partition UUID vs Device UUID

概念 存储位置 用途 查看命令
Partition UUID GPT头中的特定条目 标识单个分区 gdisk -l /dev/sda
Device UUID 设备本身的标识符 代表整个物理设备 blkid /dev/sda

示例

# 查看GPT分区的详细信息
sudo gdisk -l /dev/sda
# 输出中会显示每个分区的Partition UUID(Partition entry sector)

2 LVM逻辑卷的UUID管理

特点:LVM引入多层抽象,涉及物理卷PV、卷组VG、逻辑卷LV三级UUID。
查看方法

# 查看物理卷UUID
sudo pvs --noheadings -o pv_name,pv_uuid
# 查看逻辑卷UUID
sudo lvs --noheadings -o lv_name,lv_uuid

输出示例
| pv_name | pv_uuid |
|————-|————————————–|
| /dev/sdb | zmNjYW… |
| /dev/sdc | yXoZxw… |

lv_name lv_uuid
mylv Tv7mKq…

实际应用案例

1 修复/etc/fstab挂载失败问题

现象:重启后报错”unable to resolve device”。
解决方案:将设备路径替换为UUID。
操作步骤

  1. 查看目标分区的UUID:sudo blkid /dev/sda1 → 假设得到a8f7c9...
  2. 编辑/etc/fstab,将原条目:
    /dev/sda1 / ext4 defaults 0 1

    修改为:

    UUID=a8f7c9... / ext4 defaults 0 1
  3. 保存后执行sudo mount -a验证。

2 自动化部署中的设备映射

需求:在Kickstart脚本中指定安装目标磁盘。
实现方式:通过UUID而非设备名定位磁盘:

# Anaconda kickstart片段
zerombr yes
clearpart --initlabel --drives=driver disk --all
part /boot --fstype=ext4 --size=500 --ondisk=uuid=a8f7c9...
part pv.01 --size=50G --ondisk=uuid=zmNjYW...
volgroup myvg pv.01
logvol / --fstype=ext4 --name=mylv --vgname=myvg --size=30G --ondisk=uuid=Tv7mKq...

常见问题解答(FAQs)

Q1: 为什么有时候blkid找不到设备的UUID?

原因分析

  1. 未初始化文件系统:新创建的分区若未执行mkfs,则无UUID;
    • 解决方案:对分区进行格式化(如mkfs.ext4 /dev/sda1);
  2. 特殊设备类型:某些RAID阵列或虚拟磁盘可能未生成标准UUID;
  3. 权限不足:非特权用户执行blkid时可能被限制;
    • 解决方案:添加sudo前缀或调整/etc/sudoers权限。

Q2: 能否修改现有设备的UUID?如何操作?

警告:修改UUID会导致依赖该标识的所有配置失效(如/etc/fstab、启动引导项),需谨慎操作!
操作步骤

  1. 备份原有UUID:OLD_UUID=$(sudo blkid /dev/sda1 -s UUID)
  2. 生成新UUID并写入文件系统:
    sudo tune2fs /dev/sda1 -U new-generated-uuid
    # 或使用xfs_admin(针对XFS):sudo xfs_admin -U generate /dev/sda1
  3. 更新所有相关配置:
    • 修改/etc/fstab中的旧UUID;
    • 重建GRUB引导菜单:sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    • 重启系统验证。

归纳与最佳实践

维度 推荐方案 备注
日常查看 blkid + lsblk -o NAME,UUID 组合使用提高准确性
脚本调用 blkid -o value -s UUID 避免解析复杂输出
生产环境配置 始终使用UUID而非设备路径 防止设备重排序导致的故障
数据安全 修改UUID前务必备份关键配置文件 包括/etc/fstab、GRUB配置等

通过掌握上述方法,您可以高效管理Linux系统中的设备标识

0