DIY融合驱动器:将恢复HD添加到CoreStorage卷组

在10.8版本中,使用下面的方法创建了一个“DIY Fusion Drive”之后,我现在想知道如何将RecoveryHD分区添加到内部驱动器上。 以下是我创建逻辑卷组跨越两个物理卷(128G固态硬盘/750G硬盘)的步骤:
(make a clone / backup of all your data first)
diskutil list (take note of the disk## of the two drives. In my case: disk0/disk1)
diskutil corestorage create fusion_volume_group disk0 disk1
diskutil corestorage list (take note of the Logical Volume Group UUID)
diskutil corestorage createVolume <UUID> jhfs+ FusionHD 749g
restore the clone onto the FusionHD

这个方法很奏效,但是我的RecoveryHD现在消失了。我想把它重新添加回去(它在我克隆的原始硬盘的外部驱动器上)

现在的分区布局如下:

$ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *120.0 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:          Apple_CoreStorage                         119.7 GB   disk0s2
   3:                 Apple_Boot Boot OS X               134.2 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *750.2 GB   disk1
   1:                        EFI                         209.7 MB   disk1s1
   2:          Apple_CoreStorage                         749.3 GB   disk1s2
   3:                 Apple_Boot Boot OS X               650.0 MB   disk1s3
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS FusionHD               *744.5 GB   disk2
有人知道如何使用diskUtil命令添加恢复分区吗?最好是事后操作,因为我现在就在这个阶段。
6个回答

您需要首先对驱动器进行分区,将恢复分区放在其中一个物理驱动器上。它不能是Fusion驱动器的一部分,因为您很可能无法直接引导到核心存储逻辑卷(您需要单独的引导加载程序)。

请注意this Ars Technica article中关于Fusion驱动器的分区结构。

最好的方法可能是从头开始,通过在SSD或HDD上重新安装Mountain Lion,然后仅使用正确的分区再次进行Fusion处理。

完成标准安装后,运行diskutil list来检查您的分区,输出应类似于以下内容:

/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *120.0 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            119.2 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
记录下Macintosh HD分区的标识符(在这种情况下为disk0s2)。 然后按照之前执行的相同步骤进行操作,但更改diskutil corestorage create fusion_volume_group命令,以指定disk0s2(或者在您的情况下等效的标识符),以及您没有安装OS X的驱动器的标识符。生成的命令应类似于diskutil corestorage create fusion_volume_group disk0s2 disk1但请确保标识符正确。关键是我们只想将卷组创建为Macintosh HD分区,而不是整个驱动器(以防EFI和恢复分区被清除)。然后按照之前的步骤继续进行操作。

你知道执行该操作的diskutil命令是什么吗? - Jess Bowers
我添加了一些额外的信息应该可以运行,但是我没有一个实际测试它的设置。目前,关于 Fusion Drive 的资料相当匮乏,我们只是根据一些人通过试错方法得出的结果进行工作。请务必在这里发布你得到的任何结果。 - robmathers
我认为你关于指定disk0s2而不是disk0是正确的。今天我无法验证这一点,因为周末是我“拆解并重建我的机器”的时间。现在我必须工作!我会尽快尝试测试这个。 - Jess Bowers
我刚刚在全新的空白CS卷(120GB SSD + 640GB HDD)上安装了10.8.2版本,想看看ML安装程序是否会添加一个新的恢复分区 - 结果没有。所以上面的说明应该是正确的,下次测试部署时会尝试。 - da4
成功!2008年末的MacBook Pro,光驱槽中有第二个硬盘:我用256GB的固态硬盘替换了主要的320GB硬盘。在@robmather的指导下:我将Mountain Lion安装在固态硬盘上;从外部驱动器启动MBP;研究diskutil list的输出以获取SSD上“Macintosh HD”的磁盘标识符。然后使用diskutil的corestorage命令创建融合卷。从恢复卷启动,安装ML并迁移整个原始磁盘到我的新的560GB融合卷。一切都正常工作,甚至包括在VMWare上的Ubuntu。我还订购了一个速度较慢/便宜的1TB硬盘;很快,我的4年旧的MBP将配备8GB内存、1.25TB硬盘和固态硬盘! - Bruce Van Allen

好的,所以我已经解决了问题,而不需要重新格式化或重新安装。希望大多数人不会陷入这种情况。请参考@robmathers的答案,了解如何避免在第一次删除恢复分区。

警告以下命令属于较低级别,可能导致数据丢失。请采取适当的预防措施(备份、克隆等)。

但是对于那些已经丢失恢复分区的人来说,以下是我所做的:

  1. 备份所有数据/克隆您的硬盘
  2. 创建一个可启动的USB(或使用现有的硬盘)并安装10.8
  3. 启动到该替代驱动器(这样您就不会修改当前挂载的硬盘)
  4. 卸载Fusion HD
  5. 打开终端,切换到超级用户并按照以下说明操作:

列出当前配置,并记录下要修改的驱动器。您的确切大小和GUID将与我的不同。 重要的是使用您自己的数字而不是我的数字

diskutil corestorage list
请注意将恢复文件添加到的物理驱动器的UUID。
diskutil list
请注意当前启动磁盘上恢复分区的确切字节大小(对于您来说,disk2s3可能会有所不同)。
diskutil info disk2s3
调整要添加恢复分区的驱动器的物理卷大小。要确定大小,请查看USB上现有的恢复分区。在我的情况下,它略小于1GB。对于以下命令,pvUUID是您要将恢复添加到的驱动器的UUID,大小比当前大小小1GB。
diskutil coreStorage resizeDisk <pvUUID> <size> JHFS+ Recovery 784220160B
注意:在接下来的步骤中,您可能需要多次卸载卷。OSX倾向于积极重新挂载卷。 将新的“恢复”分区从jHFS+重新分区为Apple_Boot。首先,记录下分区的确切起始位置和大小。
gpt show disk0

     start       size  index  contents
        0          1         PMBR
        1          1         Pri GPT header
        2         32         Pri GPT table
       34          6
       40     409600      1  GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
   409640  246725744      2  GPT part - 48465300-0000-11AA-AA11-00306543ECAC
247135384     262144
**247397528    1269528       3  GPT part - 48465300-0000-11AA-AA11-00306543ECAC**
248667056    1402591
250069647         32         Sec GPT table
250069679          1         Sec GPT header 
现在移除分区,然后使用不同的UUID重新添加它(UUID决定了分区的类型)。
gpt remove -b 247397528 -s 1269528 -t 48465300-0000-11AA-AA11-00306543ECAC disk0
gpt add -b 247397528 -s 1269528 -t 426F6F74-0000-11AA-AA11-00306543ECAC disk0
现在将整个恢复分区从原先的复制到这个新的分区。
dd if=/dev/disk2s3 of=/dev/disk0s3
非常感谢以下网站提供的参考资料。在开始之前,如果你不理解其中任何一步,请先阅读相关内容。

http://blog.fosketts.net/2011/08/05/undocumented-corestorage-commands/

http://www.dmitry-dulepov.com/2011/09/how-to-create-mac-os-x-lion-recovery.html


更新:自11/12以来,这个设置一直完美运行。 - Jess Bowers


1在Ask Different上的回答需要不仅仅是一个链接。可以包含链接,但请在回答中进行总结或摘录。目的是使回答能够独立存在。 - Daniel

Jess Bowers发表了一个非常好的解决方案,但对我来说,只在这一个上运作良好:
diskutil coreStorage resizeDisk <pvUUID> <size> JHFS+ Recovery 784220160B

输出结果如下:

Error: -69720: There is not enough free space in the Core Storage Logical Volume Group for this operation
解决方案是首先调整逻辑卷的大小。对于以下命令,“lvUUID”是逻辑卷的UUID,“size”等于“逻辑卷当前大小”减去“恢复分区的大小”(或者如果您按照Jess Bowers的解决方案逐字进行,则为“当前大小减少1GB”):
diskutil coreStorage resizeVolume <lvUUID> <size>
刚刚在那之后,resizeDisk...和他的解决方案的其余部分都非常顺利地运行了。 附注:我刚注册所以不能直接评论,抱歉。

尝试从Time Machine备份中恢复Mac Mini

我有一台2012年的Mac Mini,配备了一个大约120GB + 1TB的融合硬盘。

在尝试安装Ubuntu双启动时,我把它搞砸了,并且由于“创建恢复磁盘时出错”,无法从我的Time Machine备份中恢复。

为了修复这个问题,我从磁盘中删除了所有类型的卷,并重新开始,留下5GB的空间用于创建恢复分区。

既然我现在知道表格最终是什么样子的(我会在备份恢复后明天发布),我相信我也可以通过调整大小来完成这个操作。

危险

如果您的磁盘上有数据,所有这些命令都非常危险。

我正在使用我自己会使用的实际命令,这些命令也是其他已经安装了工厂融合硬盘的人需要使用的实际命令。

除非您之所以尝试添加恢复驱动器的原因是因为您的驱动器已经彻底混乱,否则我不建议按照这些步骤进行操作。

然而,除了这些帖子中的其他说明之外,它们可能作为一个方便的参考。

检查卷

先看看有什么,然后做出适当的判断。
# See all physical partitions
diskutil list

# See all core storage volumes
diskutil cs list

删除所有卷

然后删除需要删除的内容:

# Delete a Logical Volume
diskutil cs deleteVolume <lvUUID>

# Delete a Physical Volume
diskutil cs deleteDisk <pvUUID>

# Delete a Logical Volume Group (everything)
diskutil cs delete <lvgUUID>

如有需要,请从头重建分区表:

# Re-partition and format the HDD
# `R` means Remainder
# `5G` means ~4.7GiB
diskutil partitionDisk disk0 2 GPT \
    JHFS+ Macintosh\ HD R \
    JHFS+ Recovery\ HD 5G

# Re-partition and format the SSD
# the remainder, `R`, is 100% of the usable disk space
diskutil partitionDisk disk1 1 GPT \
    JHFS+ Macintosh\ HD R

创建核心存储

这将是您所熟悉和喜爱的"Macintosh HD"

# Create a logical volume group named "Macintosh HD"
diskutil cs create Macintosh\ HD disk0s2 disk1

# Create a volume (of the same name) using 100% of the group
diskutil cs createVolume <lvgUUID> jhfs+ Macintosh\ HD 100%
注意:在这个阶段,您可能希望重新启动以确保卷的顺序正确。

卸载所有内容

diskutil unmount "Macintosh HD"
diskutil unmount "Recovery HD"
diskutil unmountDisk /dev/disk0
diskutil unmountDisk /dev/disk1

释放空间

之前创建 "恢复 HD" 的目的 - 假设您想从 Time Machine 备份中恢复 - 只是为了在磁盘的末尾保留额外的空间,以防止其被吸收到任何其他卷中。

现在是时候释放它,以便恢复过程可以重新创建它。

首先再次检查存在的分区。数字应该与 diskutil 的输出匹配,但如果不匹配,请重新启动或相信 gpt 而不是 diskutil

size 不以字节而是以扇区列出,扇区可能是 4KiB。通过比例而不是确切大小来区分哪个是哪个可能更好。

gpt -r show /dev/disk0
现在删除与"Recovery HD"对应的分区。重新启动后,我的磁盘从 disk0s3 变成了 disk0s4
gpt remove -i 4
之后,我不再遇到无法创建恢复分区的错误。明天我会知道 TM 恢复是否真的起作用。我不确定它是否有效,因为在备份驱动器上听不到太多硬盘活动声音。 :-/ 资源 注意:调整核心存储大小 很多我看过的资料都只展示了如何调整和创建新卷,但实际上你可以在不创建新卷的情况下进行调整。
# First resize the logical volume
diskutil coreStorage resizeVolume <lvUUID> 1T

# Next resize the physical volume
diskutil coreStorage resizeDisk <pvUUID> 997G

# Tada! You have free space!
注意:设置恢复HD的类型 我无法成功创建一个空白恢复卷。然而,如果你有BaseSystem.dmg并且能够恢复它,你可能想将卷的类型设置为隐藏恢复分区。
# Unmount to be able to make changes
diskutil unmount /dev/disk0s3

# Change the type from Apple_HFS to Apple_Boot
asr adjust -target /dev/disk0s3 -settype Apple_Boot

这是一个视频,概述了整个过程,并附带一些基准测试:http://www.youtube.com/watch?v=I_odnNpv-FQ 以下是您需要的命令顺序: diskutil list diskutil cs create Fusion diskx diskx 注意:您可以将Fusion替换为您想要命名逻辑卷组的任何名称 diskutil cs list diskutil coreStorage createVolume YOUR_DEVICE_ID_HERE jhfs+ "Macintosh Fusion" 100% 注意:您可以将"Macintosh Fusion"替换为您想要命名驱动器的任何名称。如果您想在名称中使用空格,请记得使用""引号,否则不需要。 安装完成后,打开终端并关闭索引: sudo mdutil -i off 如果您想恢复到两个独立驱动器,再次启动安装程序,打开终端并键入: diskutil cs delete YOUR_DEVICE_ID 然后,您可以使用终端或磁盘工具按照您的喜好进行格式化。

不清楚你在这里做什么来创建恢复HD。你能编辑掉无关的内容,保持主题简洁明了吗? - bmike