我使用 Clonezilla 将硬盘克隆到 SSD。两个驱动器大小相同,并且该过程似乎成功完成。
我可以从 SSD 启动 Windows 10,没有任何明显问题,但另一个磁盘(原始源驱动器)处于脱机状态。计算机管理的存储部分显示脱机磁盘的以下工具提示:
Offline (The disk is offline because it has a signature collision with another disk that is online)
我对此进行了一些阅读,看起来这个磁盘签名是存储在磁盘的“主引导记录”中的内容,并且也被 Windows 在其“引导配置数据库”中引用,而 Clonezilla 完成的磁盘的精确复制也复制了磁盘签名。
考虑到 SSD 的磁盘签名已被旧磁盘的签名所取代,那么 SSD 还可以吗? 研究表明这应该没问题,而且确实需要更改目标 SSD 的驱动器签名才能从克隆的 Windows 安装启动,但由于我缺乏这方面的知识,所以我不确定这个假设是否正确。
另外,以防我想从旧磁盘启动,但仍在 Windows 中看到 SSD(反之亦然),更新旧硬盘或新 SSD 的磁盘签名的最佳方法是什么(这样我就可以从任一驱动器启动,并且无论我选择从哪一个驱动器启动,都能够看到两个驱动器)?
我确实尝试对此进行了一些研究,并看了一篇文章(https://blogs.technet.microsoft.com/markrussinovich/2011/11/06/fixing-disk-signature-collisions/) 有关此问题的信息,但文章中(讨论恢复磁盘签名的地方)并未明确他们是否在谈论以某种方式神奇地将目标驱动器的原始磁盘签名恢复到克隆过程中被替换之前的状态,或者他们是否在谈论使用 Windows 生成新的磁盘签名(通过使其联机),然后使用 BCDEdit 更新旧磁盘上的 Windows BCD。
答案1
您应该能够使用 Windows 附带的 diskpart 命令行实用程序修复冲突的磁盘签名。它允许您查看和更改磁盘签名。
以管理员身份打开命令提示符 (cmd.exe)。输入:
diskpart
并在每条命令后按 ENTER;
提示符更改为 DISKPART>
list disk
以获取所有已安装的物理磁盘的列表。
现在,输入select disk xy
,例如select disk 1
。
选择磁盘后,输入:
uniqueid disk
以显示磁盘的签名。
要了解更多信息,请输入 helpuniqueid disk
要更改签名,请输入:(
uniqueid disk ID=NEWSIGNATURE
我建议将(十六进制)id 增加或减少 1,[1-9A-F])
最后,输入exit
,然后重新启动。
警告:请自行承担风险。
答案2
正如@Interminable 在另一个答案的评论中所说,对我来说,解决方案就是右键单击离线磁盘并选择“在线”。
答案3
当我将小型 SSD 克隆到更快、更大的 NVMe 驱动器时,我刚刚遇到了这个问题。
事实证明,Clonezilla 启动盘拥有修复该问题所需的所有工具。
解决方案 1 - 彻底清除源驱动器
如果您不需要刚刚克隆的源驱动器的任何先前内容,最简单的选择可能是完全丢弃其内容。
下面的示例假设您的旧磁盘是/dev/sdb
如果您的磁盘是 SSD:
sudo blkdiscard -f /dev/sdb
(如果您想安全地删除它,请使用该-s
选项(如果受支持)。否则请使用该-z
选项。)
如果您的磁盘不是 SSD:
sudo cat /dev/zero > /dev/sdb
解决方案 2 - 更改磁盘标识符
如果您的旧磁盘是/dev/sdb
,您可以运行此命令为其提供新的 UUID 磁盘标识符:
printf '%s\n' p x i $(uuidgen) r w | sudo fdisk /dev/sdb
这会将预定义的输入发送到fdisk
命令以执行以下步骤:
p
:打印分区表x
:额外功能(仅限专家)i
:更改磁盘 GUID$(uuidgen)
:生成并输入 UUIDr
:返回主菜单w
:将表写入磁盘并退出
如何确认问题
使用此命令:
lsblk -o NAME,SIZE,TYPE,PTUUID,PARTUUID
显示的内容如下:
NAME SIZE TYPE PTUUID PARTUUID
sda 238.5G disk ec9ce18e-d541-11ed-afa1-0242ac120002
├─ sda1 16M part ec9ce18e-d541-11ed-afa1-0242ac120002 13875f5e-70f7-4d69-a95f-5690529d791f
└─ sda2 238.4G part ec9ce18e-d541-11ed-afa1-0242ac120002 e962c6c7-5806-4a87-919e-f4cce86a7e9d
sdb 465.7G disk ec9ce18e-d541-11ed-afa1-0242ac120002
├─ sdb1 16M part ec9ce18e-d541-11ed-afa1-0242ac120002 13875f5e-70f7-4d69-a95f-5690529d791f
└─ sdb2 465.6G part ec9ce18e-d541-11ed-afa1-0242ac120002 e962c6c7-5806-4a87-919e-f4cce86a7e9d
(sudo fdisk -x
也可以)
在此示例中,sda
和sdb
具有相同的磁盘标识符(即分区表 UUID)。每个驱动器上的两个分区也分别具有相同的分区 UUID。
如果 2 个磁盘具有相同的磁盘标识符,则可能会混淆 BIOS/UEFI 启动过程,因为它可能不知道哪个磁盘是哪个。
这个答案对所涉及的各种类型的 id/UUID 进行了很好的概述。
答案4
diskpart 有两个不同的命令。set id 和 uniqueid,如果您克隆一个磁盘,您希望这两个 id 相同,因为这意味着您要通过从系统中物理移除一个磁盘来替换它。我认为您只需移除两个磁盘之一的 SATA 电缆连接,因为您应该能够从连接到正确 SATA 端口的磁盘启动。diskpart 还使用详细命令显示您正在使用的磁盘的路由。值得一提的是。如果您正在寻找相同的,这可能是不可能的,因为磁盘本身可能具有只读存储器,其中嵌入了序列号。亲爱的沃森,这一切都很有营养。