您能使用 ddrescue 将 Mac OS X 启动卷直接克隆到另一个更大的卷吗?

您能使用 ddrescue 将 Mac OS X 启动卷直接克隆到另一个更大的卷吗?

ddrescue您能否使用或甚至将 Mac OS X 启动卷(特别是“Mac OS Extended, Journaled”又名 JHFS+ 卷)直接克隆到另一个更大的卷dd,并使目标卷最终成为完美运行的可启动卷?

过去,我曾经ddrescue对即将损坏的硬盘驱动器的 Mac OS X 启动卷进行原始 .dmg 备份,然后通过磁盘实用程序将该 .dmg 文件“恢复”到另一个卷,但在这种情况下,我没有多余的硬盘空间来存储中间 .dmg 文件,因此我需要调用ddrescue以将即将损坏的卷直接克隆到新卷。但我担心直接使用 ddrescue 执行此操作,而不是使用磁盘实用程序进行恢复部分,会导致设置不正确,因此生成的卷将无法启动。

我必须使用 ddrescue,因为我又要处理一个故障硬盘。SMART Utility 表示,在 500GB 的硬盘中只有一个待处理的坏扇区,所以我觉得那个坏扇区上没有任何关键数据的几率相当高。我担心的是,将一个卷逐块克隆到稍大一点的卷上是否可能无法以某种方式正确设置目标卷。

有人曾经在 Mac OS X 上做过这个并且可以保证它有效吗?

更新:必须发布我自己的答案(“否”或“不是我尝试的方式”),但如果其他人可以提供成功执行此操作的说明,我很乐意接受不同的答案。

答案1

因此答案似乎是“否”,或者至少是“不是我尝试的方式”。生成的卷已安装一次,但磁盘实用程序的“修复磁盘”表示文件系统结构有错误(可能是 B 树大小不正确?),磁盘实用程序无法修复。我无法查看 Disk Warrior 或其他工具是否可以修复它。故障的源驱动器没有这些问题,所以可能是我的基于 ddrescue 的复制过程搞砸了它。

我的一个朋友说他使用 在 Mac 上成功克隆了整个驱动器(包括分区表和所有内容)dd,因此通过这种方式可能可以克隆整个设备,而不仅仅是单个 JHFS+ 卷。

可能导致失败的另一个原因是我没有花时间使目标分区的扇区/块数与源分区完全相同(当然目标更大)。

答案2

重新使用这个来提供当前的解决方案。

Intel 和 Silicon 上的现代 MacOS 都可以使用 Apple“ASR”实用程序来完全克隆其驱动器。请参阅:https://discussions.apple.com/docs/DOC-250005828

诀窍在于确保根据您要执行的操作为命令正确地选择正确的 APFS 卷。

要将启动驱动器完全克隆到新格式化的 APFS 外部驱动器:

  1. 在由内部物理磁盘合成的 APFS 容器方案中的虚拟磁盘上识别并安装内部“Macintosh HD”APFS 卷。有时,使用以下命令分别列出按物理或虚拟过滤的磁盘会有所帮助:diskutil list physical && diskutil list virtual

  2. 使用以下命令,使用其磁盘标识符(例如 disk1s5)从内部虚拟磁盘挂载“Macintosh HD”卷:diskutil mount disk1s5

  3. 使用刚刚安装的磁盘标识符通过以下命令找到系统磁盘快照的 GUID:diskutil apfs listsnapshots disk1s5; 你想要的 GUID 是以 +-- 开头的行上的 GUID

  4. 使用以下命令在外部物理驱动器卷上找到 APFS 容器磁盘的磁盘标识符(例如 disk2s2):diskutil list external physical | grep Container;

  5. 使用适当的恢复参数(包括源卷和目标卷以及快照 GUID)执行 ASR 命令。这会将您的系统恢复到外部驱动器 APFS 容器中。

完成此操作后,最好重命名克隆卷,以便轻松将其与内部驱动器的卷名区分开来。新的系统卷也必须“被祝福”才能启动。我们可以同时做这两件事。

如果使用 Apple Silicon,可能还需要其他步骤。请参阅上面链接的文章。

    $ diskutil list
/dev/disk0 (internal, physical):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *1.0 TB     disk0
       1:                        EFI ⁨EFI⁩                     209.7 MB   disk0s1
       2:                 Apple_APFS ⁨Container disk1⁩         873.0 GB   disk0s2
       3:       Microsoft Basic Data ⁨BOOTCAMP⁩                127.3 GB   disk0s3
    
    /dev/disk1 (synthesized):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      APFS Container Scheme -                      +873.0 GB   disk1
                                     Physical Store disk0s2
       1:                APFS Volume ⁨Macintosh HD - Data⁩     373.6 GB   disk1s1
       2:                APFS Volume ⁨Preboot⁩                 675.8 MB   disk1s2
       3:                APFS Volume ⁨Recovery⁩                2.2 GB     disk1s3
       4:                APFS Volume ⁨VM⁩                      1.1 MB     disk1s4
       5:                APFS Volume ⁨Macintosh HD⁩            15.4 GB    disk1s5
       6:              APFS Snapshot ⁨com.apple.os.update-...⁩ 15.4 GB    disk1s5s1
    
    /dev/disk2 (external, physical):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *960.2 GB   disk2
       1:                        EFI ⁨EFI⁩                     209.7 MB   disk2s1
       2:                 Apple_APFS ⁨Container disk3⁩         960.0 GB   disk2s2
    
    /dev/disk3 (synthesized):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      APFS Container Scheme -                      +960.0 GB   disk3
                                     Physical Store disk2s2
       1:                APFS Volume ⁨Clone MacOS - Data⁩      367.6 GB   disk3s1
       2:                APFS Volume ⁨Clone MacOS⁩             15.4 GB    disk3s2
       3:                APFS Volume ⁨Preboot⁩                 629.0 MB   disk3s3
       4:                APFS Volume ⁨Recovery⁩                1.1 GB     disk3s4

$ diskutil mount disk1s5
$ diskutil apfs listsnapshots disk1s5
Snapshot for disk1s5 (1 found)
|
+-- 173CBA59-B437-43E0-9904-B28B2F714F0B
    Name:        com.apple.os.update-CB12C14C05552C076D856AD12B102E53CCB8AB4E163547432B0577BE3AE6B5E9
    XID:         21541437 (Will root to (boot from) this snapshot)
    Purgeable:   No


$ time sudo asr restore --no-personalization --erase \
                 --source /dev/disk1s5        \
                 --target /dev/disk2s2        \
                 --toSnapshot 173CBA59-B437-43E0-9904-B28B2F714F0B 


    Validating target...done
    Validating source...done
    Erase contents of /dev/disk3 ()? [ny]: y
    Replicating ....10....20....30....40....50....60....70....80....90....100
    Replicating ....10....20....30....40....50....60....70....80....90....100
    Restored target device is /dev/disk3s2.
Restore completed successfully.

$ diskutil list virtual
/dev/disk1 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +873.0 GB   disk1
                                 Physical Store disk0s2
   1:                APFS Volume ⁨Macintosh HD - Data⁩     371.0 GB   disk1s1
   2:                APFS Volume ⁨Preboot⁩                 675.8 MB   disk1s2
   3:                APFS Volume ⁨Recovery⁩                2.2 GB     disk1s3
   4:                APFS Volume ⁨VM⁩                      1.1 MB     disk1s4
   5:                APFS Volume ⁨Macintosh HD⁩            15.4 GB    disk1s5
   6:              APFS Snapshot ⁨com.apple.os.update-...⁩ 15.4 GB    disk1s5s1

/dev/disk3 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +4.0 TB     disk3
                                 Physical Store disk2s2
   1:                APFS Volume ⁨Macintosh HD - Data⁩     367.5 GB   disk3s1
   2:                APFS Volume ⁨Macintosh HD⁩            15.4 GB    disk3s2
   3:                APFS Volume ⁨Preboot⁩                 629.0 MB   disk3s3
   4:                APFS Volume ⁨Recovery⁩                1.1 GB     disk3s4
$ diskutil mount disk3s1
$ diskutil renameVolume disk3s1 "Clone MacOS - Data"
$ diskutil mount disk3s2
$ diskutil renameVolume disk3s2 "Clone MacOS"
$ sudo bless -mount "/Volumes/Clone MacOS" -setBoot
$ diskutil eject /dev/disk3
$ diskutil list external
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *960.2 GB   disk2
   1:                        EFI ⁨EFI⁩                     209.7 MB   disk2s1
   2:                 Apple_APFS ⁨Container disk3⁩         960.0 GB   disk2s2

/dev/disk3 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +960.0 GB   disk3
                                 Physical Store disk2s2
   1:                APFS Volume ⁨Clone MacOS - Data⁩      367.6 GB   disk3s1
   2:                APFS Volume ⁨Clone MacOS⁩             15.4 GB    disk3s2
   3:                APFS Volume ⁨Preboot⁩                 629.0 MB   disk3s3
   4:                APFS Volume ⁨Recovery⁩                1.1 GB     disk3s4

完成后,使用正确的组合键(通常是 OPTION)重新启动以选择启动驱动器,然后选择克隆。

启动后,登录并等待系统完全启动所有桌面服务等...某些控制面板首选项可能尚未起作用。

完全登录并启动所有程序后,再次重新启动。之后,一切都应该正常工作。在存档之前,请先测试您的克隆。这对于在允许此类胡闹的旧 Mac 上更换内置驱动器也非常有用。:-)

如果您想刷新克隆而不每次都完全覆盖它,ASR 命令目标需要稍微改变一下。不要选择物理外部磁盘卷上的 APFS 容器分区作为目标,而是选择合成虚拟外部磁盘上“克隆 MacOS”分区的磁盘标识符。例如,在我的示例中为 disk3s2。

我还没有弄清楚的一件事是如何将现有的 BootCamp 分区克隆到克隆的外部驱动器的物理磁盘。

这可能需要启动克隆并使用完全相同大小的磁盘卷设置重复 bootcamp 设置,然后使用 dd 覆盖新分区 - 或恢复 Windows 备份...不确定,而且还没有找到很好的参考。

相关内容