如何使用 Linux dd 命令克隆磁盘如何使用 Linux dd 命令克隆磁盘如何使用 Linux dd 命令克隆磁盘如何使用 Linux dd 命令克隆磁盘
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何使用 Linux dd 命令克隆磁盘

在此页

  1. 第一步 - 缩小分区
  2. 第二步 - 克隆磁盘
    1. 示例一 - 克隆 MBR 磁盘(Windows 操作系统安装在第二个分区上)
    2. 示例二 - 克隆 GPT 磁盘(Windows 操作系统安装在第四个分区上)

    在本教程中,我们将参考 Linux dd 命令的一个实际示例,系统管理员可以使用该命令将 Windows 操作系统或 Linux 操作系统从以 MBR 或 GPT 布局样式分区的较大 HDD 迁移或克隆到较小的 SSD。在本指南中,我们以安装在具有多个分区的硬盘上的 Windows 系统为例。如果 HDD 以 MBR 方案分区并且包含具有多个逻辑分区的扩展分区或分区乱序,则此方法会变得非常复杂。如果是这种情况,我建议您不要使用此方法。在这种情况下,使用 ddrescure 更安全,它可以克隆整个磁盘布局(分区表和每个分区内的已用块),而无需实际转移空白空间。 DDrescure 可以通过从 Ubuntu 主存储库安装 gddrescue 包来获得。

    第一步 - 缩小分区

    您可以使用 Parted Magic 等实时 Linux 发行版将 Linux 或 Windows 分区(缩小)调整为最小大小。您还可以使用 Microsoft Windows diskmgmt.msc 实用程序来缩小 NTFS 分区。通过缩小分区的可用空间,dd 复制未使用的磁盘块所需的时间(在分区很大的情况下)将大大减少。如果一个大分区只有一小部分已用空间,建议缩小文件系统,因为 dd 实用程序还将复制过程中未使用的空间(dd 还将复制 100GB 或 1TB 分区的所有空闲块,其中有少于已用空间的 10%)。

    第二步 - 克隆磁盘

    将分区大小调整为最小后,将第二个磁盘或 SSD 物理插入机器的 SATA/SCSI 控制器,并使用 Live Linux 发行版启动机器。将实时 Linux 发行版加载到 RAM 后,打开 Linux 控制台并运行 fdisk -l /dev/sda(假设 /dev/sda 是您的 Windows 安装盘或 Windows 环境中的 C: 驱动器)并记下最后一个\End\ 扇区(44898303,如下例所示):

    示例一 - 克隆 MBR 磁盘(Windows 操作系统安装在第二个分区上)

    在此测试设置中,磁盘是颠倒的,因此 /dev/sdb 代表 Windows 安装磁盘,而 /dev/sda 代表空 SSD。

    然后以 root 权限运行以下命令,以便将 Windows 安装磁盘从 HDD (/dev/sdb) 克隆到 SSD (/dev/sda)。 Ubuntu 中默认不安装 pv 实用程序。您可以通过运行以下命令来安装它:

    sudo apt install pv

    然后通过发出以下命令启动克隆过程:

    sudo dd if=/dev/sdb bs=512 count=44898303 conv=sync,noerror | pv -s 21G |sudo dd of=/dev/sda

    注意:目标磁盘必须至少是从源磁盘到 Windows 分区的所有分区占用的总空间大小,包括 Windows 分区。

    解释上面例子中使用的命令

    dd - dd 代表“复制和转换”。有人可能会说它代表 Data Destroyer(如果您误导命令,可能会发生一些严重的损坏)或 Data Duplicate 或 Data Description。使用适合您需要的任何描述!

    if - 源磁盘(在/输入文件中)

    bs - 来自 fdisk 输出的扇区大小值(块大小或一次要读/写的字节数)

    count - 来自 fdisk 输出的最后一个“结束”扇区增加一个整数 (+1) - 在它停止之前应该复制多少个 512 大小的块。在这里,它应该传输 44099584 个大小为 512 字节的扇区。

    conv=sync,noerror - 同步 I/O 并且在源磁盘上遇到块错误时不停止

    | - Linux 管道(Linux 或 FIFO 中的进程间通信通道)

    pv -s 21GB - 监控克隆进度 - 应该通过管道传输大约 21GB

    of - 实际写入管道数据的目标磁盘(输出/输出文件)

    如果您想使用比标准磁盘块大小 (512) 更大的块大小进行操作,可以说是标准块大小 (2048) 的四倍,为了加快速度,您可以做一些简单的数学运算并乘以除以磁盘的标准块大小 (512x4) 四,然后将最后一个分区的块总数 +1 除以四。

    另一个例子

    在此示例中,sda2 的“结束”:44898303+1 除以 4。dd 将以 2048 字节的块大小运行。

    sudo dd if=/dev/sda bs=2048 count=44898303 conv=sync,noerror | pv -s 21G |sudo dd of=/dev/sdb

    该过程完成后(根据您的磁盘大小和速度,可能需要十分钟甚至几小时)使用相同的 sfdisk 命令验证目标磁盘并比较两个磁盘的输出。结果应该是相似的。

    示例二 - 克隆 GPT 磁盘(Windows 操作系统安装在第四个分区)

    在这段摘录中,dd 将以高达标准块大小 (4096) 八倍的块大小运行,以便一次传输更多块。 Windows 操作系统位于硬盘的第四个分区。还必须克隆所有前面的 Windows 分区。磁盘将被完全复制直到最后一个 19855359 扇区,它代表 Windows 分区边界的结束。 19855359+1扇区后面的数据代表Windows中的D:分区,所以这个分区我们不感兴趣,我们只想克隆操作系统分区。

    将磁盘的标准块大小 (512x8) 乘以八,然后将最后一个分区的块总数 +1 除以八,如下图所示。代表 Windows 分区的 sda4 的“结束”是 19855359+1 除以 8。dd 以 4096 字节的块大小运行。

    sudo dd if=/dev/sda bs=4096 count=2481920 conv=sync,noerror | pv -s 9G |sudo dd of=/dev/sdb

    在这个例子中,因为我们只复制 Windows 操作系统而不是第四个分区之后的整个磁盘数据,我们需要删除最后一个分区。我们可以通过直接从控制台运行 cgdisk 命令行实用程序来删除它,如下面的屏幕截图所示

    通过发出 fdisk 命令验证两个磁盘上的分区表差异。分区表应该类似,除了 /dev/sda 的第 5 个分区应该从克隆磁盘 (/dev/sdb) 中删除。

    第三步 - 测试克隆磁盘

    最后,关闭机器,拔掉旧硬盘,只用新克隆的磁盘打开电脑。它应该立即在您的操作系统中启动。如果机器拒绝启动,请物理验证主板上的 SATA 连接器并尝试将其反转,或进入 BIOS/UEFI 设置并确保在启动顺序中启用了适当的磁盘。

    尽量不要在插入两个磁盘的情况下启动机器,因为它可能会混淆引导加载程序,使您的机器无法启动操作系统。确认操作系统正常启动后,使用与缩小文件系统相同的工具通过添加未分配的空间来扩展克隆的分区。

    使用此 dd 方法,您可以将任何变体的 Windows 或 Linux 操作系统以及所有自定义设置、已安装的程序和文件从较大的 HDD 传输到较小的 SSD,而无需从头开始安装操作系统和花费大量时间进行自定义它。

©2015-2025 艾丽卡 support@alaica.com