在两台Mac之间克隆磁盘的最佳方法是什么?


25

在两台Mac之间克隆磁盘的最佳方法是什么?我每两年左右询问一次,每次得到相同答案时都会询问。他们说,“使用抄袭克隆 ”。但是不幸的事实是CCC是磁盘之间的文件级副本。当我迁移到我的新Mac上时,请确保所有文件都存在,但是到处都是怪癖(包括文件日期不同等)。

因此,现在真的,又来了:如何按字节逐个克隆磁盘?

Answers:


44

您可以使用dd命令对驱动器进行完美的克隆。这是OS X附带的命令行工具。为了使克隆完美,您需要确保未积极使用源和目标。

为准备克隆,我建议您创建一个可以从中引导的辅助引导盘。制作副本时,克隆源应为离线卷,而不是正在使用中。否则,您将冒着复制磁盘上不完整状态的风险。

将计算机引导到辅助引导磁盘后,登录并启动终端或iTerm窗口。

运行diskutil以获取可用驱动器的列表。其中之一将是您要克隆的目标驱动器。另一个将是您的源驱动器。例如:

> diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *320.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            319.2 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3       
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk1
   1:                        EFI                         209.7 MB   disk1s1
   2:                  Apple_HFS Backup                  499.8 GB   disk1s2
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk2
   1:                        EFI                         209.7 MB   disk2s1
   2:                  Apple_HFS Clone                   499.8 GB   disk2s2

假设这Macintosh HDClone我们dd操作的源头和目标。使用以下命令启动克隆:

> sudo dd if=/dev/rdisk0 of=/dev/rdisk2 bs=1m conv=noerror,sync

dd完成您可能会看到这样的错误:

dd: /dev/rdisk2: short write on character device
dd: /dev/rdisk2: Input/output error
3726+1 records in
3726+1 records out
500107862016 bytes transferred in 14584.393113 secs (34290619 bytes/sec)

最后一条错误消息实际上还可以。最后写入的块是一小段,因为没有完整的1MB块要复制。别担心。

现在,您已经获得了Macintosh HD驱动器的逐位完美克隆。使用Macintosh HD驱动器重新引导系统并享受克隆乐趣!


4
rdisk#绕过4KB OS缓冲区。更多信息。我建议您选择较小的bs,因为超过1m实际上会使速度变慢。(至少通过USB。我无法确定它是外部USB驱动器还是直接SATA连接。)
Nick ODell 2012年

2
可能值得尝试一下bs设置。通过将大小从bs = 1m减小到bs = 65536,我获得了吞吐量的显着提高(几乎翻了一番)。
延斯·韦加尔

1
@JensWegar我想知道是否有一种方法可以知道给dd定传输的最佳块大小,而不必求助于信任互联网搜索或进行错误检测?
伊恩·C(

2
@IanC。我在某处读到,HDD的块大小可以用作指示dd的理想大小的指标。另一方面,另一位消息人士说,没有找出最佳尺寸的防弹方法。因此,不能在那里提供任何真正的建议。但是,实验并不需要太长时间。理想值可能是2的因数,所以我将从4096开始,然后是8192、16384,依此类推。您会以这种方式很快找到峰值。
延斯·韦格

1
@ user3.1415927您可以使用status=progress选项dd来查看进度和传输速率。然后,您可以中止CRTL+C并尝试使用其他值bs
-Wlad

14

苹果公司定制的命令行实用程序用于克隆磁盘asr

它针对OS X的特定需求量身定制,以执行逐个文件以及基于块的映像,并处理分区大小的差异,允许网络流(甚至多播流)以及本地连接的磁盘之间进行复制。与dd有所不同,它了解Apple最新的Core Storage卷管理,并且是图形磁盘实用程序调用的用于将数据从一个分区或卷移动到另一个分区或卷的程序。

您可以在asr手册页上阅读更多内容。


2
请注意,asr该工具与“磁盘工具”的“还原”选项卡使用的工具相同(请参阅我的答案)。命令行界面具有GUI界面忽略的其他选项,例如在HFS +(不区分大小写)和HFSX(区分大小写)格式之间进行转换,以及将副本放入Core Storage卷组中。但是对于不习惯命令行的人来说,使用它可能会更困难。
戈登·戴维森

错误的链接.......
Traderhut游戏'18

不确定是否要使用archive.org或新链接。web.archive.org/web/20150923065146/https://developer.apple.com/…谢谢@TraderhutGames
bmike

仅供参考:我使用dd和块大小为64K的数据写入速度为122 MB /秒,我将其杀死以切换到asr,执行--verbose restore --source / Volumes / X / -target / Volumes / Y-擦除,我必须说给我留下深刻的印象。--verbose在统计方面没给我显示任何内容(DD有Ctrl / T选项可以显示进度)-也许我需要在最后进行--verbose……仍然给我留下深刻的印象。我使用DD读取和写入的速度为134 MB /秒,而asr的速度为25MB /秒。因此,而不是复制需要4个小时的时间...我在看21个小时!是的,我不知道它是否有更高的工作机会,但是
Traderhut Games

但是我可以先用dd进行测试,然后如果失败,则要花一天的时间使用asr将2TB磁盘中的2TB复制到另一个磁盘上
Traderhut Games

8

磁盘实用程序可以使用“还原”选项卡进行卷对卷克隆。在两个Mac OS Extended卷之间,这将进行块复制,即,它只是复制卷结构,因此所有文件都完全相同(直到文件ID号)。本质上是一样的事情dd,不同的是Disk Utility可以在目标与源大小不完全相同的情况下扩展/收缩卷,而且速度要快得多(由于某些原因,dd在OS X上非常慢)。

编辑:看到@Ian关于使用/ dev / rdiskN与/ dev / diskN的速度的注释后,我运行了一些快速和肮脏的基准测试,在两个4GB闪存驱动器之间进行复制:

dd using /dev/diskN: 2737 seconds
dd using /dev/rdiskN: 907 seconds
Disk Util, full volume: 840 seconds to copy + 213 seconds to verify
Disk Util, empty volume: 4 seconds to copy + 1 second to verify

因此,看起来rdisk建议使dd的运行速度与Disk Utility差不多。真正的区别是“磁盘工具”会验证其数据(速度较慢,但​​也许更安全),并跳过空白空间(如果磁盘几乎未满,则会更快)。就像我在上面说的那样,DU可以在复制时调整大小。



8

来自ddvia的详细输出pv

在此处输入图片说明

复制即使是小磁盘也可能花费很长时间,并且静音可能令人沮丧。如果安装pv(管道查看器),则可以使用它来监视任何流的进度。

如果您正在使用自制软件(应该这样做),安装起来pv很简单:

brew install pv

然后确定要复制的磁盘。

diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *251.0 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage SSD                     250.1 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3

/dev/disk1 (internal, virtual):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            SSD                    +249.8 GB   disk1
                                 Logical Volume on disk0s2
                                 2CFBB247-D59D-474F-8467-2B1BDB275524
                                 Unencrypted

/dev/disk2 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.6 GB    disk2
   1:             Windows_FAT_32 boot                    43.0 MB    disk2s1
   2:                      Linux                         15.5 GB    disk2s2

/dev/disk3 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.6 GB    disk3
   1:             Windows_FAT_32 NO NAME                 15.6 GB    disk3s1

在这种情况下,/dev/disk2是内部读取器中Raspberry Pi的Micro SD卡,以及/dev/disk3USB加密狗中的新MicroSD。

复制它的命令与普通dd命令非常相似,除了我们要利用以下事实of:(输出文件)默认为STDOUT,if(输入文件)默认为STDIN。这使您可以在两者之间使用UNIX管道

# I'm going to define variables to make your copy-paste easier
SRC=/dev/rdisk2
DST=/dev/rdisk3

# This is the command you want
sudo dd bs=1m if=$SRC | pv | sudo dd bs=1m of=$DST

# Notice how similar this is to doing a simple
sudo dd bs=1m if=$SRC |      sudo dd bs=1m of=$DST

# ...which is functionally identical to
sudo dd bs=1m if=$SRC                      of=$DST

# (except 2 processes vs. 1)

实际输出如下所示:

dd bs=1m if=/dev/zero count=16000 | pv | dd bs=1m of=/dev/null
16GiB 0:00:06 [2.46GiB/s] [       <=>                                          ]

2
或者,您可以在等待DD完成时按Ctrl-T,它将显示已完成的操作以及执行的速度。.负载:2.25 cmd:dd 50443运行1.50u 55.87s 899897 + 0记录在899896 + 0中记录出以473.978101秒(124426812字节/秒)传输的58975584256字节
Traderhut Games

4

Carbon复制克隆程序很好,但是随后在我的Mac Pro上,它不再制作可启动克隆,我尝试了3次,每个克隆都无法启动,与以前不同。所以我换了SuperDuper!那个克隆启动正常


1
他的回答包括一个解释:Carbon Copy退出了工作,解释了这是他改行的原因,他改行的内容以及该行之有效的方法。简洁明了。三个竖起大拇指!我不想读很长的书来获得“尝试SuperDuper!-可行'-当我仅此需要时。
Traderhut游戏

0

好的老式怎么样dd?它可以逐点复制驱动器。有很多关于如何执行此操作的指南,例如本指南本指南


2
关于“与众不同”的答案不仅需要链接。可以包含链接,但请在答案中进行总结或摘录。这个想法是使答案独立存在。
nohillside

-3

克隆Mac驱动器有两种类型。基于文件级别和块级别的克隆。众所周知,抄袭克隆器只能创建基于文件级的克隆,而其最大的竞争对手Superduper之一只能创建卷和分区的克隆,而不能创建整个磁盘。因此,我建议选择一种新兴的Mac克隆软件,该软件是Stellar Drive Clone,能够同时进行文件级和块级克隆。

它可以一点一点地创建整个驱动器的精确副本,也可以在任何外部驱动器,卷和网络驱动器上创建特定的卷。它可以在其免费的演示版本功能中在文件夹上创建驱动器的克隆,并从该文件夹还原备份。它可以在Mac上创建Recovery HD的克隆并支持窗口文件格式,MBR,ExFAT,FAT32等。


1
撰写本文时,您的答案不只是产品功能列表,而且也没有任何关于上述工具如何解决OP所具有问题的解释。您能否通过更详细地描述必要的步骤来使您的答案更有用(也许还可以解释与其他答案中所描述的方法相比,该方法具有哪些优势)?
nohillside
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.