我有一台运行 OS X 10.4.11 的 MacBook。前段时间,我缩小了主硬盘分区,以便与 Linux 进行双启动,但现在 Macintosh 分区上的空间不足了,我想删除 Linux 分区并将 Macintosh 分区恢复到其原始大小。我已经能够删除 Linux 分区,但似乎无法将可用空间合并回 Macintosh 分区。最初我使用 GParted 来缩小分区,但我无法使用 GParted 来恢复分区,因为 GParted 无法扩大 HFS+ 分区。
有谁知道怎样才能将我的 HFS+ 分区恢复到其原始大小,而不会丢失数据或花钱购买商业产品?
如果我尝试使用diskutil
调整分区大小(从 OS X 安装 DVD 启动时),我会得到以下信息:
# diskutil resizeVolume disk0s2 119690149888B
Started resizing on disk disk0s2 Macintosh HD
Verifying
Resizing encountered error No space left on device (28) on disk
119690149888 字节的值被列为命令输出中的最大大小diskutil resizeVolume disk0s2 limits
。
我找到了其他关于我想做的事情的说明http://wiki.onmac.net/index.php/Triple_Boot_via_BootCamp#Restoring_your_Mac_to_its_original_state,但这需要 Boot Camp,而它不再适用于 OS X 10.4。
(这几乎与问题 50317“调整 HFS 分区大小”的问题相同,但在 Mac OS X 10.4 上,磁盘实用程序应用程序无法非破坏性地调整分区大小。当我尝试重新分区时,它警告所有数据都将丢失。)
答案1
GParted 能否重写分区图(删除 Linux 分区,然后调整剩余的 HFS+分割)而不试图扩大HFS+文件系统? 如果是这样,那么您可能能够使用diskutil
扩大 HFS+ 文件系统来适应新增长分区的边界。
在尝试此操作(或甚至使用任何商业软件)之前,您应该确保您有完整的备份(这样您就可以使用以下方法破坏性地重做分区磁盘工具并从备份中恢复 - 另外还可以获得“免费”碎片整理以解决您的麻烦)。
答案2
dd
TL; DR:使用或将整个分区向左移动gparted
。然后您将能够扩大它。
现在是 2020 年了,diskutil(及其 GUI)在尝试处理调整大小等操作时保持不变。它遵循的一条规则是,它永远不会移动到分区的起始位置。结果:
- 调整大小的最大大小受分区起始位置的限制
- 当你“分割”一个分区时,新的分区总是会被添加后原来的
幸运的是,移动分区的开头并不难:您只需复制数据,而无需了解任何有关文件系统的信息。这正是gparted
处理移动的方式。移动分区的开头并相应地调整分区表后,您就可以正常调整大小。
就我的具体情况而言,我后悔在非常吵闹的 10TB HDD 上转换为 APFS,并尝试恢复到 HFS+。我做了以下操作,主要是使用磁盘实用程序 GUI:
- 将 APFS 分区(“P1”)缩小到我的一堆文件允许的最小 2.23 TB。
- 将其余部分设为 HFS+ 分区(“P2”)并将内容复制到那里。
- 缩小 HFS+ 分区,幸运的是,它只有 2.18 TB。这将创建第三个 HFS+ 分区(“P3”)。
- 通过格式化为 HFS+ 来擦除 APFS 分区 (P1)。
- 由于 P2 恰好小于 P1,所以我可以
dd if=/dev/rdisk3s2 of=/dev/rdisk3s1 bs=$((128 * (1 << 20))
将其复制到 P1 所在的位置。 - 现在一切都回到了 P1,我可以使用分区按钮删除 P2 和 P3。这会自动将 P1 增大到完整的 10TB 大小减去(2.23 TB - 2.18 TB)。这是因为 diskutil 看不到任何分区未使用的空间(我知道这很愚蠢。)
- 启动
sudo gdisk /dev/rdisk3
,n
按 创建新分区,按enter三次保留默认设置,按w
写入分区。 sudo diskutil eject /dev/disk3
,然后再次打开磁盘实用程序应用程序。执行分区操作以删除我们刚刚创建的小分区以回收该空间。
您可能没有我那么幸运,没有足够的空间在磁盘上容纳分区的两个副本,因此 gparted 将成为您的朋友。当然,您可以手动计算扇区数并执行加法dd
,gdisk
但计算对我来说很难。使用 dd 将分区向右移动会更难,因为您需要反向复制。
为什么苹果不提供这样的功能?说苹果不在乎实现一个愚蠢的缓慢功能听起来很容易,但parted
GNU 的人做了同样的事情当他们遇到一些复杂情况时。问题似乎是他们想通过移动来调整大小,而调整大小确实需要 fs 特定的知识。好吧,它是毕竟,先收缩再移动更有效率……