FAT 文件系统的 UUID 实际上是其 Volume Serial Number(卷序列号),是一个 8 位十六进制数(如 ABCD-1234)。

查看当前 UUID

# 方法一:blkid
sudo blkid /dev/sda1

# 方法二:lsblk
lsblk -f /dev/sda1

输出示例:

/dev/sda1: SEC_TYPE="msdos" UUID="3AAB-A5AC" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI" PARTUUID="aaa92e36-581d-4fd0-8168-37af4f56f3b6"

FAT12/16 与 FAT32 的卷序列号偏移差异

关键区别

FAT12/FAT16 和 FAT32 的卷序列号存储在引导扇区的不同偏移位置,操作前必须先确认 FAT 类型。

FAT 类型卷序列号偏移(十六进制)偏移(十进制)
FAT12/FAT160x2739
FAT320x4367

如何判断 FAT 类型

# blkid 查看 SEC_TYPE
sudo blkid /dev/sda1
# 若显示 SEC_TYPE="msdos" 且文件系统标识为 "FAT16",则为 FAT16

# 或直接查看引导扇区中的文件系统标识字符串
# FAT16 标识在偏移 0x36,长度 8 字节
sudo xxd -s 0x36 -l 8 /dev/sda1

# FAT32 标识在偏移 0x52,长度 8 字节
sudo xxd -s 0x52 -l 8 /dev/sda1

修改 UUID

方法一:使用 mlabel(推荐)

mlabel 来自 mtools 包,可以在线修改,自动识别 FAT 类型,无需关心偏移量:

# 安装 mtools
sudo apt install mtools        # Debian/Ubuntu
sudo dnf install mtools        # Fedora/RHEL

# 设置新的序列号(格式:XXXXXXXX,共 8 位十六进制)
sudo mlabel -N AABB1234 -i /dev/sda1 ::

# 随机生成一个新的序列号
sudo mlabel -n -i /dev/sda1 ::

参数说明

  • -N AABB1234:指定新的 32 位序列号(8 位十六进制)
  • -n:生成随机新序列号
  • -i /dev/sda1:指定目标设备
  • :::表示根目录

方法二:使用 dd 手动修改

操作前务必备份引导扇区

FAT16 分区(偏移 0x27 / 十进制 39)

# 1. 备份引导扇区
sudo dd if=/dev/sda1 of=~/efi_bootsect_backup.bin bs=512 count=1

# 2. 查看当前序列号
sudo xxd -s 0x27 -l 4 /dev/sda1

# 3. 写入新序列号
#    例如设为 AABB-1234 → 小端序为 34 12 BB AA
echo -ne '\x34\x12\xBB\xAA' | sudo dd of=/dev/sda1 bs=1 seek=39 conv=notrunc

FAT32 分区(偏移 0x43 / 十进制 67)

# 1. 备份引导扇区
sudo dd if=/dev/sda1 of=~/efi_bootsect_backup.bin bs=512 count=1

# 2. 查看当前序列号
sudo xxd -s 0x43 -l 4 /dev/sda1

# 3. 写入新序列号
#    例如设为 AABB-1234 → 小端序为 34 12 BB AA
echo -ne '\x34\x12\xBB\xAA' | sudo dd of=/dev/sda1 bs=1 seek=67 conv=notrunc

小端序说明

FAT 卷序列号以**小端序(Little-Endian)**存储。UUID AABB-1234 对应 32 位值 0xAABB1234,写入磁盘时字节顺序为 34 12 BB AA。

修改后的关键步骤

修改 EFI 分区 UUID 后,必须同步更新以下配置,否则系统可能无法启动。

1. 更新 /etc/fstab

# 查看新 UUID
sudo blkid /dev/sda1

# 编辑 fstab,替换旧 UUID
sudo vi /etc/fstab

将:

UUID=3AAB-A5AC  /boot/efi  vfat  umask=0077  0  1

改为新的 UUID 值:

UUID=AABB-1234  /boot/efi  vfat  umask=0077  0  1

2. 更新 GRUB(如使用 GRUB 引导)

sudo update-grub
# 或
sudo grub-mkconfig -o /boot/grub/grub.cfg

3. 更新 initramfs

sudo update-initramfs -u        # Debian/Ubuntu
sudo dracut --regenerate-all    # Fedora/RHEL

4. 验证

# 确认新 UUID 已生效
sudo blkid /dev/sda1

# 测试 fstab 挂载是否正常
sudo umount /boot/efi
sudo mount -a

方法对比

方法工具难度是否需卸载自动识别 FAT 类型
mlabelmtools⭐ 简单否✅ 是
dd 手动写入coreutils⭐⭐⭐ 高级否❌ 需手动判断

推荐

优先使用 mlabel,安全简便且自动处理 FAT 类型差异。使用 dd 手动修改时务必确认分区的 FAT 类型以选择正确的偏移量。