我在 MacOS 10.14.6 上运行 MacPro 5,1,使用 500gb 三星 SSD 作为启动/主机驱动器。我最近用完了 500gb 固态硬盘上的空间,所以我指定了一个相同的 1tb 固态硬盘。
对我来说,全新安装不是一个选择,因此我使用 clonezilla 对新驱动器进行块复制(使用新手设置,全部为默认设置)。复制完成后,我从新的 1TB 驱动器启动,磁盘实用程序显示物理磁盘的完整 1TB,但 APFS 容器和卷的大小仍为 500GB,完全否定了我的升级 =(
这就是奇怪的地方。几个月前我曾尝试过这个,所以我不记得我做了什么或在哪里找到相关文档,但不知何故,我设法将容器大小调整为 1TB,但 APFS 卷大小从未改变,因为我仍然没有可用的磁盘空间(500GB)。如果有帮助的话,我觉得我隐约记得使用 GParted 的一个功能来实现这一点,但除此之外我什么都不记得了。
我该如何解决这个问题?就上下文而言,我的启动驱动器是 disk2,APFS 容器的物理存储位于 disk2s2。我尝试执行,resizeContainer disk2s2 0
希望它能以某种方式意识到不匹配并修复 APFS 卷大小,但没有成功。我还尝试过,resizeContainer disk2s2 500g
目的是将容器缩小到 500gb,然后resizeContainer disk2s2 0
再次重试,并正确回收驱动器上未使用的 500gb。我将展示这两个的输出以及diskutil list
,diskutil apfs list
(缩写,我有很多其他驱动器哈哈),以及我在磁盘工具中看到的内容。
任何见解都非常感谢,因为我对此一头雾水。谢谢!
$ diskutil list
/dev/disk2 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_APFS Container disk3 1000.0 GB disk2s2
/dev/disk3 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +499.9 GB disk3
Physical Store disk2s2
1: APFS Volume JBax Mac Pro 484.6 GB disk3s1
2: APFS Volume Preboot 44.5 MB disk3s2
3: APFS Volume Recovery 1.0 GB disk3s3
4: APFS Volume VM 3.2 GB disk3s4
$ diskutil apfs list
APFS Container (1 found)
|
+-- Container disk3 C2500AD1-3713-42B3-847F-663C77A85C86
====================================================
APFS Container Reference: disk3
Size (Capacity Ceiling): 499898105856 B (499.9 GB)
Capacity In Use By Volumes: 489041268736 B (489.0 GB) (97.8% used)
Capacity Not Allocated: 10856837120 B (10.9 GB) (2.2% free)
|
+-< Physical Store disk2s2 D63FD546-5CC2-4EB7-B5E7-8DA660BA026B
| -----------------------------------------------------------
| APFS Physical Store Disk: disk2s2
| Size: 999995133440 B (1000.0 GB)
|
+-> Volume disk3s1 66E7E184-D546-4493-854D-92632DF1A94D
| ---------------------------------------------------
| APFS Volume Disk (Role): disk3s1 (No specific role)
| Name: JBax Mac Pro (Case-insensitive)
| Mount Point: /
| Capacity Consumed: 484590370816 B (484.6 GB)
| FileVault: No
|
+-> Volume disk3s2 42F434F9-B33D-423F-99C1-F7B04B2EE0C1
| ---------------------------------------------------
| APFS Volume Disk (Role): disk3s2 (Preboot)
| Name: Preboot (Case-insensitive)
| Mount Point: Not Mounted
| Capacity Consumed: 44486656 B (44.5 MB)
| FileVault: No
|
+-> Volume disk3s3 26827351-189E-4ECB-983F-738A825FAD80
| ---------------------------------------------------
| APFS Volume Disk (Role): disk3s3 (Recovery)
| Name: Recovery (Case-insensitive)
| Mount Point: /Volumes/Recovery 1
| Capacity Consumed: 1023565824 B (1.0 GB)
| FileVault: No
|
+-> Volume disk3s4 C571DD11-615E-43CF-BFC0-7FBEC0321EA7
---------------------------------------------------
APFS Volume Disk (Role): disk3s4 (VM)
Name: VM (Case-insensitive)
Mount Point: /private/var/vm
Capacity Consumed: 3221385216 B (3.2 GB)
FileVault: No
磁盘工具的截图: 1. 磁盘工具-物理驱动器 2. 磁盘工具-容器
现在,当我们尝试操纵容器的大小时,会发生以下情况:
$ sudo diskutil apfs resizeContainer disk2s2 0
Password:
Started APFS operation
Error: -69519: The target disk is too small for this operation, or a gap is required in your partition map which is missing or too small, which is often caused by an attempt to grow a partition beyond the beginning of another partition or beyond the end of partition map usable space
这是我尝试的第二种方法,尝试缩小然后回收:
$ sudo diskutil apfs resizeContainer disk2s2 500g
Started APFS operation
Aligning shrink delta to 499,995,135,488 bytes and targeting a new physical store size of 499,999,997,952 bytes
Determined the minimum size for the targeted physical store of this APFS Container to be 499,898,105,856 bytes
Error: -69605: There is not enough free space in the APFS Container for this operation
答案1
我认为您在 Mojave 的 macOS Recovery 中需要输入的命令如下所示。我建议您查看示例,然后确认 409640 和 1953115495 的值是否正确。此外,disk2
启动到 macOS Recovery 时驱动器的标识符可能不正确。
gpt -f remove -b 409640 disk2
gpt -f add -b 409640 -s 1953115495 -t apfs disk2
diskutil apfs resizecontainer disk2s2 0
一个例子
目标是将 APFS 容器扩展到尽可能大的尺寸,在本例中就是包含 APFS 分区的当前大小。
以下是完成目标所采取的步骤。
重新启动 Mojave 的 macOS Recovery。
打开终端窗口。输入下面给出的命令来确认版本是 Mojave。
sw_vers
下面给出了示例输出。
ProductName: Mac OS X ProductVersion: 10.14.6 BuildVersion: 18G103
输入以下命令以获取所需的标识符。
diskutil list internal
以下示例输出显示
disk0s2
是 1.1 TB APFS 分区的标识符。一个 500.0 GB 的 APFS 容器(标识符为)disk1
位于此分区的开头。该容器当前有 4 个 APFS 卷,标识符disk1s1
为disk1s4
。/dev/disk0 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *1.1 TB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_APFS Container disk1 1.1 TB disk0s2 /dev/disk1 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +500.0 GB disk1 Physical Store disk0s2 1: APFS Volume Example Mac 19.0 GB disk1s1 2: APFS Volume Preboot 45.4 MB disk1s2 3: APFS Volume Recovery 510.4 MB disk1s3 4: APFS Volume VM 20.5 KB disk1s4
输入下面给出的命令来确定驱动器的扇区大小和分区的起始扇区
disk0s2
。Device Block Size
是驱动器的扇区大小(以字节为单位)。 以字节为单位Partition Offset
除以驱动器的扇区大小(以字节为单位)等于分区的起始扇区disk0s2
。diskutil info disk0s2 | grep -e Offset -e "Block Size"
下面的输出显示驱动器的扇区大小为 512 字节,409640 是分区的起始扇区
disk0s2
。Partition Offset: 209735680 Bytes (409640 512-Byte-Device-Blocks) Device Block Size: 512 Bytes
注意:如果
Device Block Size
为 4096 字节,则Partition Offset
需要将 512 字节设备块中的除以 8 才能确定分区的起始扇区disk0s2
。输入下面给出的命令来确定
disk1
容器的扇区大小。在此示例中,disk1s1
指定了卷。实际上,容器中任何卷的标识符disk1
都可以替代。Disk Size
以字节为单位除以驱动器的扇区大小(以字节为单位)等于容器的扇区大小disk1
。diskutil info disk1s1 | grep "Disk Size"
下面的输出显示
disk1
容器大小为 976562496 个扇区。Disk Size: 500.0 GB (499999997952 Bytes) (exactly 976562496 512-Byte-Units)
注意:如果
Device Block Size
上一步中的是 4096 字节,则Disk Size
需要将 512 字节设备块中的除以 8 才能确定disk1
容器的扇区大小。disk1
确定容器扇区大小的替代方法当容器中没有卷时,此替代方法很有用。输入下面给出的命令来确定
Size (Capacity Ceiling)
字节数,这也是容器的大小(以字节为单位)disk1
。diskutil apfs list disk1 | grep Ceiling
下面的示例输出显示
disk1
容器的大小为 499999997952 字节/每扇区 512 字节 = 976562496 个扇区。Size (Capacity Ceiling): 499999997952 B (500.0 GB)
输入以下两个命令将分区的大小更改
disk0s2
为容器的大小disk1
。第一个命令如下所示。此命令disk0s2
从驱动器的 GUID 分区表 (GPT) 中删除分区disk0
。的值是步骤 4 中确定的分区409640
的起始扇区。disk0s2
gpt -f remove -b 409640 disk0
下面给出了示例输出。
disk0s2 removed
注意:上面显示的可能与命令生成的
disk0s2
不同。from表示的切片 2 ,而from表示 2 是 的 GUID 分区表 (GPT) 中条目的索引。换句话说,切片编号不必与 GPT 表条目的索引匹配。在此示例中,两者匹配,通常情况如此。disk0s2
diskutil
disk0s2
diskutil
disk0
disk0s2
gpt
disk0
在此示例中,即使 的GPT 中不再存在包含的分区,
disk1s1
和卷仍保持挂载状态。第二条命令如下所示。此命令将分区重新添加到驱动器的 GPT 中。 的值是在步骤 4 中确定的分区的起始扇区。的值是在步骤 5 中确定的容器的扇区大小。disk1s3
disk0s2
disk0
disk0s2
disk0
409640
disk0s2
976562496
disk1
gpt -f add -b 409640 -s 976562496 -t apfs disk0
下面给出了示例输出。
disk0s2 added
注意:以上两个
gpt
命令输出的索引可能不同。在此示例中,两个索引匹配,通常情况如此。输入以下命令确认
disk0s2
分区现在disk1
与容器的大小匹配。diskutil list internal
下面的示例输出显示
disk0s2
分区和disk1
容器的大小均为 500.0 GB。/dev/disk0 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *1.1 TB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_APFS Container disk1 500.0 GB disk0s2 /dev/disk1 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +500.0 GB disk1 Physical Store disk0s2 1: APFS Volume Example Mac 19.0 GB disk1s1 2: APFS Volume Preboot 45.4 MB disk1s2 3: APFS Volume Recovery 510.4 MB disk1s3 4: APFS Volume VM 20.5 KB disk1s4
输入下面给出的命令,将
disk0s2
分区和disk1
容器扩展到最大可能的大小。要使此命令起作用,更改必须足够大,在本例中确实如此。diskutil apfs resizecontainer disk0s2 0
示例输出如下所示。
Started APFS operation Aligning grow delta to 573,532,069,888 bytes and targeting a new physical store size of 1,073,532,067,840 bytes Determined the maximum size for the targeted physical store of this APFS Container to be 1,073,531,039,744 bytes Resizing APFS Container designated by APFS Container Reference disk1 The specific APFS Physical Store being resized is disk0s2 Verifying storage system Using live mode Performing fsck_apfs -n -x -l -S /dev/disk0s2 Checking the container superblock Checking the EFI jumpstart record Checking the space manager Checking the space manager free queue trees Checking the object map Checking volume Checking the APFS volume superblock The volume Example Mac was formatted by diskmanagementd (945.275.7) and last modified by apfs_kext (945.275.7) Checking the object map Checking the snapshot metadata tree Checking the snapshot metadata Checking the extent ref tree Checking the fsroot tree Checking volume Checking the APFS volume superblock The volume Preboot was formatted by diskmanagementd (945.275.7) and last modified by apfs_kext (945.275.7) Checking the object map Checking the snapshot metadata tree Checking the snapshot metadata Checking the extent ref tree Checking the fsroot tree Checking volume Checking the APFS volume superblock The volume Recovery was formatted by diskmanagementd (945.275.7) and last modified by apfs_kext (945.275.7) Checking the object map Checking the snapshot metadata tree Checking the snapshot metadata Checking the extent ref tree Checking the fsroot tree Checking volume Checking the APFS volume superblock The volume VM was formatted by apfs.util (945.275.7) and last modified by apfs_kext (945.275.7) Checking the object map Checking the snapshot metadata tree Checking the snapshot metadata Checking the extent ref tree Checking the fsroot tree Verifying allocated space The volume /dev/disk0s2 appears to be OK Storage system check exit code is 0 Growing APFS Physical Store disk0s2 from 499,999,997,952 to 1,073,532,067,840 bytes Modifying partition map Growing APFS data structures Finished APFS operation
输入以下命令确认
disk0s2
分区和disk1
容器现在大小均为 1.1 TB。diskutil list internal
下面给出了示例输出。
/dev/disk0 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *1.1 TB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_APFS Container disk1 1.1 TB disk0s2 /dev/disk1 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +1.1 TB disk1 Physical Store disk0s2 1: APFS Volume Example Mac 19.0 GB disk1s1 2: APFS Volume Preboot 45.4 MB disk1s2 3: APFS Volume Recovery 510.4 MB disk1s3 4: APFS Volume VM 20.5 KB disk1s4
重新启动回到 macOS。
答案2
APFS 卷会自动调整大小。容器显示 1000GB,即整个驱动器,大致如此;卷应显示当前使用的空间。您之前用完了空间,这看起来差不多。
这是我的……[同样的 Mac Pro,同样的操作系统,磁盘安装在 PCI 卡上,这让它认为它是外部的]
/dev/disk6 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk6
1: EFI EFI 209.7 MB disk6s1
2: Apple_APFS Container disk7 998.2 GB disk6s2
3: Apple_HFS eDrive 25.6 GB disk6s3
/dev/disk7 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +998.2 GB disk7
Physical Store disk6s2
1: APFS Volume KickMeHard 401.8 GB disk7s1
2: APFS Volume Preboot 21.2 MB disk7s2
3: APFS Volume VM 20.5 KB disk7s3
4: APFS Volume Recovery 507.6 MB disk7s4