背景:主机操作系统是AzureOracleLinux7.8实例,其OS磁盘通过/dev/sda条目挂载。/dev/sda2 (/)是btrfs。我有另一个Azure Oracle Linux7.8实例被破坏了,所以我想附加它的磁盘进行调试。一旦连接到我的主机操作系统,因为附加的磁盘来自同一个Oracle Linux 7.8映像,它的UUID与我的主机相同,它似乎会给挂载造成一些混乱/损坏。下面是Azure完成图像附加后lsblk的输出:
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您可以看到它认为根/是通过/dev/sdc2挂载的,但是这个磁盘(/dev/sdc)实际上仅仅是附加的。我只能假设UUID冲突导致了这种情况(可能是其他原因吗?),但是现在我不能安装真正的/附加的/dev/sdc2来调试磁盘,因为系统认为它已经安装了。
在我附加磁盘时,是否有防止这种情况发生的方法?
发布于 2020-10-05 12:35:34
您可以在挂载磁盘之前用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应该足够了。稍后,您可以使用相同的方法(代替uuidgen)还原原始uuid。
在你尝试这个之前做个备份。
发布于 2020-10-08 21:36:32
我认为这是不可能的。如果系统中可以看到多个具有重复UUIDs的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冲突)。
https://unix.stackexchange.com/questions/612486
复制相似问题