在本教程中,我们将参考Linux dd
命令的一个实际示例,系统管理员可以使用该命令将以MBR或GPT布局样式分区的较大HDD的Windows操作系统或Linux操作系统迁移到较小的SSD。 在本节摘录中,我们将使用安装在具有多个分区的硬盘上的Windows系统作为示例。 在HDD以MBR方案分区并且包含具有多个逻辑分区的扩展分区或分区无序的情况下,该方法可能变得相当复杂。 如果是这样,我建议你不要使用这种方法。 在这种情况下,使用ddrescure更安全,它可以克隆整个磁盘布局(分区表和每个分区内的已使用块),而不会实际传输空的空间。 可以通过从Ubuntu主存储库安装gddrescue
包获得DDrescure。
第一步 - 收缩分区
您可以使用实时Linux发行版(如Gparted)或从Ubuntu Desktop Live ISO映像运行gparted GUI实用程序,将Linux或Windows分区(缩小)调整到最小大小。 可以使用操作磁盘分区文件系统大小(ext2,ext4,NTFS,xfs)的其他付费Linux发行版是分区向导或Parted Magic 。 您还可以使用Microsoft Windows diskmgmt.msc
实用程序来缩小NTFS分区。 通过缩小分区的可用空间,在巨大的分区的情况下,dd将复制未使用的磁盘块所需的时间将大大减少。 如果大型分区只占用空间的一小部分,建议缩小文件系统,因为dd
实用程序还将复制进程中未使用的空间(dd还将复制所有空闲块的100GB或1 TB分区,少于使用空间的10%)。
第二步 - 克隆盘
将分区调整到最小值后,将第二个磁盘或SSD物理插入机器SATA / SCSI等控制器,并使用Live Linux发行版启动机器。 一旦Live Linux发行版已经加载到RAM中,打开Linux控制台并运行fdisk -l / dev / sda(
在Windows环境中,/ dev / sda
是您的Windows安装磁盘或C:
驱动器),并记下最后一个“结束“部门(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代表“复制和转换”。 有些人可能会说它代表“数据毁灭者”(如果您误导命令可能会发生严重损害)或数据重复或数据描述。 使用适合您需要的任何描述!
如果
- 源盘(in / input file)
bs
- 从fdisk输出的扇区大小值(块大小或要读/写一次的字节数)
count
- 从fdisk输出的最后一个“End”扇区增加一个整数(+1) - 在停止之前应复制多少个512个大小的块。 在这里,它应该传输大小为512字节的44099584扇区。
conv = sync,noerror
- 同步I / O,如果在源磁盘上遇到块错误,请勿停止
|
- Linux管道(Linux或FIFO中的进程间通信通道)
pv -s 21GB
- 监视克隆进度 - 大约21GB应通过管道传输
的
- 管道数据实际写入的目标磁盘(输出/输出文件)
如果要使用比标准磁盘块大小(512)更大的块大小进行操作,则假定标准块大小(2048)的大小是四倍,为了加快速度,您可以进行一些简单的数学和乘法通过四个盘的标准块大小(512x4),然后将最后一个分区的+1的总数除以四。
例:
在本示例中, sda2
:44898303 + 1除以4. dd
的“End”将以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)的8倍的块大小运行,以便一次传输更多的块。 Windows操作系统驻留在硬盘的第四个分区中。 所有以前的Windows分区也必须被克隆。 磁盘将被完全复制,直到最后一个19855359扇区,代表Windows分区边界的结尾。 19855359 + 1扇区之后的数据表示Windows中的D:
partition,所以这个分区对我们没有兴趣,因为我们只想克隆操作系统分区。
乘以8的标准块大小(512×8),然后将最后一个分区的+1的总数除以8,如下图所示。 代表Windows分区的sda4
的“End”为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 / sdb
)中删除的/ dev / sda中的
第5个分区。
第三步 - 测试克隆盘
最后,关闭机器,拔下旧硬盘,并使用新的克隆磁盘启动计算机电源。 它应该在任何时候在您的操作系统中启动。 如果机器拒绝启动,请物理验证主板上的SATA连接器,并尝试将其反转或转到BIOS / UEFI设置,并确保在启动顺序中启用了相应的磁盘。
尝试不启动机器,两个磁盘插入,因为它可能会混淆引导程序,使您的机器无法启动操作系统。 在您确认操作系统正常启动后,请使用与缩小文件系统相同的工具,通过添加未分配的空间来扩展克隆的分区。
使用这种dd
方法,您可以将所有自定义设置,安装的程序和文件的所有变体的Windows或Linux操作系统从较大的HDD传输到较小的SSD,而无需从头开始安装操作系统的负担,并花费大量时间来自定义。