如何防止附加具有与主机相同 UUID 的 btrfs 分区的磁盘损坏挂载列表?

如何防止附加具有与主机相同 UUID 的 btrfs 分区的磁盘损坏挂载列表?

背景:主机操作系统是 Azure Oracle Linux 7.8 实例,其操作系统磁盘通过/dev/sda条目挂载。 /dev/sda2/) 是btrfs。我有另一个 Azure Oracle Linux 7.8 实例已损坏,因此我想附加其磁盘进行调试。连接到我的主机操作系统后,因为附加的磁盘来自同一个 Oracle Linux 7.8 映像,所以它的 UUID 与我的主机相同,并且它似乎会在安装时造成一些混乱/损坏。以下是lsblkAzure 完成附加图像后的输出:

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb       8:16   0    4G  0 disk
└─sdb1    8:17   0    4G  0 part /mnt
sr0      11:0    1  628K  0 rom
fd0       2:0    1    4K  0 disk
sdc       8:32   0   50G  0 disk
├─sdc15   8:47   0  495M  0 part
├─sdc2    8:34   0   49G  0 part /      <--- isn't really sdc2, its mounted from sda2
├─sdc14   8:46   0    4M  0 part
└─sdc1    8:33   0  500M  0 part
sda       8:0    0  100G  0 disk
├─sda2    8:2    0   99G  0 part
├─sda14   8:14   0    4M  0 part
├─sda15   8:15   0  495M  0 part /boot/efi
└─sda1    8:1    0  500M  0 part /boot

您可以看到它认为 root/是通过 挂载的/dev/sdc2,但该磁盘 ( /dev/sdc) 实际上只是刚刚附加。我只能假设 UUID 冲突导致了这种情况(可能是其他原因吗?),但现在我无法安装真实/附加的磁盘/dev/sdc2来调试该磁盘,因为系统认为它已经安装了。

在附加磁盘时是否有办法防止这种情况发生?

答案1

btrfstune您可以在挂载磁盘(或先卸载磁盘)之前更改 btrfs UUID 。

# first show the existing UUID (and keep for later)
sudo blkid /dev/sdc2

# change to a new UUID
sudo btrfstune -M $(uuidgen) /dev/sdc2

另请参阅-U,但-M应该足够了。您稍后可以使用相同的方法恢复原始 uuid(代替 uuidgen)。

在尝试此操作之前请先进行备份。

答案2

我认为这是不可能的。如果系统中存在多个具有重复 UUID 的 BTRFS 文件系统,则无法在没有数据损坏风险的情况下使用它们 -https://btrfs.wiki.kernel.org/index.php/Gotchas

您需要先隐藏一个设备,例如从 SCSI 中删除 echo 1 > /sys/block/sde/device/delete,更改另一个设备上的 UUID,然后恢复第一个设备,echo "- - -" > /sys/class/scsi_host/host0/scan 但您无法执行此操作,因为您已将 BTRFS 挂载为根文件系统。我认为你必须连接到不同的机器(避免 UUID 冲突)。

相关内容