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/FAT16 | 0x27 | 39 |
| FAT32 | 0x43 | 67 |
如何判断 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 类型 |
|---|---|---|---|---|
mlabel | mtools | ⭐ 简单 | 否 | ✅ 是 |
dd 手动写入 | coreutils | ⭐⭐⭐ 高级 | 否 | ❌ 需手动判断 |
推荐
优先使用
mlabel,安全简便且自动处理 FAT 类型差异。使用dd手动修改时务必确认分区的 FAT 类型以选择正确的偏移量。