如何更改文件系统UUID(两个相同的UUID)?


26

我在VMware中有一个fedora客户操作系统。我想扩展/boot分区,因此我向该VM添加了另一个虚拟磁盘,并尝试克隆该磁盘。

之后dd if=/dev/sda1 of=/dev/sdb1blkid报告/ dev / sda1/ dev / sdb1具有相同的UUID / GUID。

奇怪的是,Universe中有两个相同的UUID,如何将其中一个更改为另一个UUID值?


更新2017-01-25

主题已更改,此处的UUID表示文件系统UUID,而不是分区UUID。

由于它是文件系统UUID,因此需要文件系统特定的utils来更改UUID,或使用hexeditor修改磁盘上的原始数据(危险,不建议使用,除非您知道自己在做什么)。


10
一点也不奇怪。当您使用dd克隆分区时,该克隆当然将具有与原始分区相同的UUID。UUID只是分区的元数据,而不是物理磁盘的某些固有属性。
安德鲁·梅迪科

谢谢安德鲁,我以为UUID是创建新分区之前的计算值。现在我知道这只是元数据。

Answers:


28

要生成随机的新UUID,可以使用:

$ uuidgen

实际更改UUID取决于文件系统。

假设外部家族文件系统

# tune2fs -U <output of uuidgen> /dev/sdb1

或者,如果您确信uuidgen可以正常工作:

# tune2fs -U $(uuidgen) /dev/sdb1

假设btrfs文件系统

# btrfstune -U $(uuidgen) /dev/sdb1

UUID存储在超级块中,因此文件系统的逐字节副本将具有相同的UUID。


14
安迪(Andy),甚至不需要uuidgen命令:“ tune2fs -U random / dev / sdb1”应该可以正常工作
grzuy 2012年

如何在FAT上运行它?
CMCDragonkai '16

@CMCDragonkai,请参阅我的回答。
LiuYan刘研

13

使用:

tune2fs -U random /dev/sdb1

如果是ext文件系统,或者

xfs_admin -U generate /dev/sdb1

如果是xfs文件系统。


第二个分区具有相同的UUID的原因是因为dd仅将数据从一个文件复制到另一个(dd if=/dev/sda1 of=/dev/sdb1= cat /dev/sda1 > /dev/sdb1);dd由于不知道分区是什么,也不知道如何生成UUID,因此它只是按原样复制了所有数据,包括UUID,该数据存储在分区开始附近的filysystem超级块中。


顺便说一句,
我还认为UUID(通用唯一IDentifier)是一个奇怪的名字。应该将其称为PGUID(可能是全球唯一标识符),甚至更好的名称是ARLN(一个合理的大数字)。


我已经在/ dev / sda6上备份了一个分区。我收到以下错误:xfs_admin -U generate / dev / sda6错误:文件系统在日志中有重要的元数据更改,需要重播。挂载文件系统以重播日志,并在重新运行xfs_admin之前先将其卸载。如果无法挂载文件系统,请使用xfs_repair -L选项销毁日志并尝试修复。请注意,销毁日志可能会导致损坏-请在执行此操作之前尝试挂载文件系统。
切换

+1是UUID的肮脏脏话……我也可以建议UNUID表示“不幸的是,不是唯一ID”
Foon

好吧,我建议使用全球唯一IDentifier(GUID)-“一般”或“一般”中的“全球”。哦,等等...这实际上不是它的原名吗?...
Quark

11

除了ext2 / ext3 / ex4和xfs,您还可以更改以下文件系统或块设备的UUID。

交换

swaplabel -U $NEW_UUID

软件RAID(md raid)

对于MD RAID,必须首先停止RAID,然后在重新组装时更新UUID。因此,如果将RAID挂载到/,则需要在脱机模式下更新UUID-使用实时CD来完成。

  1. mdadm --stop $RAID_DEVICE
  2. mdadm --assemble $RAID_DEVICE --update=uuid --uuid=$NEW_UUID $MEMBER_DEVICES...

例:

  1. mdadm --stop /dev/md127
  2. mdadm --assemble /dev/md127 --update=uuid --uuid=2A1D2A1D-2A1D-2A1D-2A1D-2A1D2A1D2A1D /dev/sda2 /dev/sdb2

更新了UUID之后,您可能需要更新grub.cfgrd.md.uuid=$NEW_UUIDlinux/linuxefi/linux16命令行中)和/或fstab和/或mdadm.conf和/或update-initramfs(Debian家族)和/或dracut --force(Red Hat家族),以便下次可以成功启动。

卢克斯(cryptsetup)

cryptsetup luksUUID --uuid=$NEW_UUID $LUKS_DEVICE

例:

cryptsetup luksUUID --uuid=e0c0e0c0-e0c0-e0c0-e0c0-e0c0e0c0e0c0 ~/encrypted-LUKS.loop

FAT / NTFS / exFAT

这是另一个故事 当前没有实用程序来修改这些文件系统的文件系统UUID(请参阅reichhart的答案 -该mlabel工具),但是我们可以修改磁盘上的原始数据来执行此操作。

警告,修改磁盘上的原始数据很危险,如果不小心操作可能会丢失数据。

以下是使用修改磁盘上原始数据的详细步骤hexedit

  1. blkid,将文件系统的UUID写下到纸上,或者记住它。FAT / exFAT的UUID字符串看起来像1122-3344,NTFS的UUID字符串看起来像1122334455667788
  2. 使用hexedit打开分区设备

    hexedit <partition device such as /dev/sda1>

  3. /,以相反的顺序输入UUID(如果已blkid报告1234-ABCD,则搜索CDAB3412)以搜索磁盘上的UUID数据。
  4. 找到UUID后,对其进行更改,请按F2保存并退出。
  5. blkid 验证UUID。
  6. 修改UUID后,您可能需要更新grub.cfg和/或fstab以便下次成功启动。
  7. 执行fsck <partition device such as /dev/sda1>并看到“引导扇区与其备份之间存在差异”消息。为了解决该问题,请选择“ 1)将原件复制到备份”,然后如果询问“是否执行更改?(y / n)”,请按y

那么hfs / hfs +或hfsplus呢?
Wlad

1
你可以只使用mkfs.exfat -i 01234567 /dev/partitionname其中的mkfs.exfat命令是由软件包安装的exFAT-utils的上Fedora Linux系统。也许您应该将其添加到答案中,因为hexedit变体非常危险!
erik

@erik感谢您的提示,但我们正在寻找一种在现有文件系统或块设备上将旧UUID更新为新UUID的方法。
刘岩刘研

嘿@LiuYan刘研对于NTFS有ntfslabel工具。askubuntu.com/questions/642591/...
aaditya1234

6

对于XFS,请使用: xfs_admin -U <uuid> <device>

使用xfs_admin -u <device>,以查看一个UUID(注意小写选项视图,相对于上壳体选项集)。关于U&L的另一篇文章指出了blkid用于查看系统上所有或某些UUID 的命令。


2

VFAT的部分答案

对于ext *和xfs文件系统,已经有了很好的答案。但是对于VFAT,我强烈建议使用 mtools软件包的mlabel使用十六进制编辑器很危险。

使用类似这样的东西来创建一个新的UUID:

echo 'drive d: file="/dev/sdb3" exclusive' >>/etc/mtools.conf
mlabel -n d:

如果您不介意手动检查独占访问权限(如此处所述的所有其他命令一样),则可以将其作为单个命令执行,例如mlabel -n -i /dev/sdb3 ::
telcoM

2

BTRFS

sudo btrfstune -u /dev/sdaX

sudo btrfstune -U 0de6bd81-7013-49a8-bdc5-d832ed209d2c /dev/sdaX

btrfsck建议运行,因为更改BTRFS中的UUID不是原子操作。



0

要更改dd命令,导致磁盘分区UUID / s重复,请使用-GParted。

在GParted用户界面中,选择驱动器,选择分区,然后卸载分区。从“分区文件夹”中选择“新UUID”,重复直到所有dd驱动器重复的分区uuid被标记为要替换。对于可引导磁盘,请勿替换UEFI分区uuid。

查看选定的驱动器号和分区-一切正常吗?...

单击GParted用户界面上的“应用所有操作”图标。
对于可启动磁盘,请编辑/ etc / fstab文件UUID = string / s,并安装一个或多个挂载点:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.