答案1
答案2
最近我不得不使用 dd 进行恢复和映像工作。大约 10 年前,我曾大量使用它来克隆驱动器和备份分区。我必须说,它的使用与直接和简单相去甚远。对于 HDD,您需要确切了解驱动器在最低级别的结构。为此,您需要其他可以信任的程序(fdisk、sfdisk、cfdisk 等)。信任只来自对已知对象的实验和检查结果——而不是口口相传。我同意 muru 关于错误 dd 命令的最初评论,但应该说更多。if=/dev/sda 从设备的最开始(字节地址 0)开始读取,而 of=/dev/sdb1 写入设备 b 的第一个分区。结果是您的 sda-MBR 与您的操作系统等一起驻留在 sdb-part1,并且如果它大于 sdb1,我不知道当它到达 sdb1 末尾时会发生什么。
我猜 sda 是启动设备,而您希望 sdb 也成为您的启动设备,但也许您只希望 sdb1 成为备份克隆。您的问题对此很模糊。如果分区大小完全相同,您可能能够将分区复制到分区,但操作系统可能具有不匹配的分区文件系统元数据,因此无法“查看”它。如果您只是想要一个克隆用于备份,那么您的命令可能没问题,但存在到达分区末尾并覆盖下一个分区的问题,以及您的操作系统是否会反对 sdb1 上的文件系统破坏(仍然从 sda1 启动(?))。原则上,这可能有效,但最好只将 sda 写入 sdb,而忘记从 sdb 启动,它只是一个用于读取的克隆。如果您有 extFAT 或某些接受 500GB 文件大小的系统,您可能可以写入文件,但我怀疑您这样做。
还有许多其他问题。如果您想传输到 sdb 并从中启动,您必须知道要复制的字节和扇区并将其包含在命令中 - 确保您的输出驱动器具有必要的大小,再次,/dev/sda 到 /dev/sdb 应该可以工作,除了我遇到的一些问题。也就是说,如果 dd 遇到在较旧的二手驱动器上常见的读取错误,它应该怎么做?您可以将 dd 设置为忽略它们,但它会写入什么?根据我的经验,它什么都不写,因此 512 字节(正常的传统块,但您的磁盘可能不同;较新的驱动器可能使用 4096 字节块)被从写入中取出,并且所有进一步的字节都被“移到”它们应该在的位置的左侧。这种情况发生在每个读取错误上,也许您已选择忽略,因为读取错误会停止 dd,重新启动非常困难。简而言之,可以使用 dd 进行克隆,但应该在带有错误恢复循环的 bash 脚本中完成,该循环用空值填充未读块,命令应指定准确的块数,并且您应该确切知道所涉及驱动器的低级格式。最后,对于严肃的克隆来说,最好使用专用的开源 c 可执行文件,它可以执行 dd 和 sfdisk 所做的工作,但更专业。但是,我承认 dd 很有用。它就像你腰带上的一把博伊刀——令人印象深刻且功能强大,但用处有限。
此外,操作系统可以检查硬盘上可用空间和其他位置存储的 UUID,如果不匹配,则可以拒绝启动。这是操作系统竞争力的黑魔法领域之一。官方软件知道这些事情。)
与 10 年前不同,GPT 表现在也很重要,甚至是必不可少的。而且 EFI 启动分区也使事情变得复杂。凭借我对低级磁盘格式化的了解,我甚至不会浪费时间尝试克隆整个磁盘。磁盘的某些部分可能对非常特殊的问题有用。忽略 LVM 及其重要性,分区可能很有用,但只能用于读回原始驱动器(没有操作系统混合、启动更改等)。要传输可启动的 500GB 驱动器以制作 1TB 可启动系统,假设操作系统不反对使用不同的驱动器(硬件签名?),那么我建议成功实验是将 1TB 驱动器上的低级格式化与 500GB 驱动器完全一样——我的意思是完全一样!您必须使用十六进制编辑器检查 MBR 和 GPT 表。然后将分区逐字节 dd 到新驱动器。然后,启动 1TB 驱动器(假设成功)并在新的 500GB 额外空间中创建另一个分区,或者扩展分区和实时文件系统(如果您拥有并信任此类软件)。很难找到这个领域的信任,因为这些东西很难处理,如果出错,后果将不堪设想。最好购买一个声誉良好且经过 SHA256SUM 处理的新系统或软件,以便检查其完整性。数字系统本质上是易变且无常的,因此如果您需要的比现有的东西更多,最好习惯变化。
答案3
我有:
- 向 ubuntu 虚拟机 (虚拟盒设置) 添加了第二个更大的虚拟磁盘
- 使用“sudo dd if=/dev/sda of=/dev/sdb”将第一个复制到第二个磁盘
- 删除了 sdb 上的交换分区(gparted)
- 扩大的 sdb1 (gparted)
- 在 sdb 上重新创建交换分区(gparted)
- 停止虚拟机
- 删除了旧的虚拟驱动器(虚拟盒设置)
- 用新复制的更大的驱动器(虚拟盒设置)替换它
如果它与 virtualbox 一起工作,它甚至可以与真实硬件一起工作......
答案4
我已经开始使用克隆
ddrescue -f -r3 /dev/sd_OLD /dev/sd_NEW mapfile
注意:在克隆之前,请务必仔细检查两个驱动器的序列号
hdparm -I /dev/sd_OLD|grep Num
然后,当旧数据在新驱动器上时,我将扩展分区以填充新的可用空间fdisk
(resize2fs
如unix.stackexchange.com)
不要跳过,mapfile
因为这样如果 ddrescue 被中断,您就可以重新启动它(并且只占用几百个字节)。