diskutil list disk2
输出,其中几乎所有的可用空间都已分配给了分区。/dev/disk2 (disk image):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme +1.0 TB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_HFS tbd 749.9 GB disk2s2
3: Apple_APFS Container disk3 249.8 GB disk2s3
209.7 MB + 749.9 GB + 249.8 GB = 1.000 TB
。如果输入以下命令,那么 disk2s1
和 disk2s2
将被转换为空闲空间。diskutil erasevolume free none disk2s1
diskutil erasevolume free none disk2s2
diskutil list disk2
的输出结果如下所示。/dev/disk2 (disk image):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme +1.0 TB disk2
1: Apple_APFS Container disk3 249.8 GB disk2s3
diskutil apfs resizeContainer disk2s3 0
Started APFS operation
Error: -69743: The new size must be different than the existing size
disk2s3
分区的确切位置和大小。diskutil info disk2s3 | grep -e Offset -e Size
Partition Offset: 750209736704 Bytes (1465253392 512-Byte-Device-Blocks)
Disk Size: 249.8 GB (249790263296 Bytes) (exactly 487871608 512-Byte-Units)
Device Block Size: 512 Bytes
disk2s3
分区的结束位置。750,209,736,704 bytes 249,790,263,296 bytes = 1,000,000,000,000 bytes = 1.000 TB
可以看到,在disk2s3
分区之后几乎没有可感知的空闲空间,这就是为什么出现了错误消息。
可以通过输入以下命令来确定磁盘映像的确切大小
diskutil info disk2 | grep Size
Disk Size: 1.0 TB (1000000020480 Bytes) (exactly 1953125040 512-Byte-Units)
Device Block Size: 512 Bytes
disk2s3
分区结束后存在20480字节的空间。然而,并不是所有的空间都是可用的。其中一部分空间被GUID分区表(GPT)的备份副本占用。gpt -r show /dev/disk2
start size index contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
34 1465253358
1465253392 487871608 1 GPT part - 7C3457EF-0000-11AA-AA11-00306543ECAC
1953125000 7
1953125007 32 Sec GPT table
1953125039 1 Sec GPT header
disk2s3
分区之后实际上有7个扇区的空闲空间。由于扇区大小(设备块大小)为512字节,因此空闲空间计算为3584字节。这比diskutil apfs resizeContainer disk2s3 0
命令所需的4096字节分配块大小要小。diskutil info disk3s1 | grep Allocation
Allocation Block Size: 4096 Bytes
gpt -r show
或类似的命令来确认。如果他们删除了EFI 和 另一个较早的分区,你应该看到disk0s3作为剩下的分区(与你的测试一样),而不是disk0s2。 - lx07disk0s3
是 GPT 中的第三个分区。虽然在我的例子开始时是正确的,但是从 gpt -r show /dev/disk2
命令的输出可以看出,在例子结束时,disk0s3
是 GPT 中的第一个分区。你也不能总是假设 GPT 中的分区按升序排列。不过,如果 diskutil
命令改变了 GPT,结果将会是按升序排列的分区。 - David Andersondisk0s2
而不是disk0s3
的一种方式。换句话说,在输入命令diskutil erasevolume free none disk0s1
之前,楼主重启了Mac,然后才发表了这个问题。顺便说一下,你不需要禁用SIP并使用gpt
命令来获取分区表。你可以使用diskutil
命令或下载一个脚本来获取该表。 - David Andersondiskutil
命令能够输出分区偏移信息,那么脚本将会起作用。我知道这在High Sierra和更新版本的macOS上发生,但我不确定从哪个版本的macOS(OS X)开始。如果diskutil命令无法产生所需的输出,脚本将会生成错误消息。这就是为什么man页面显示了High Sierra和更新版本的macOS的原因。 - David Anderson
sudo gpt -r show disk0
的结果编辑到你的问题中? - lx07sudo gpt -r show disk0
来查看你的启动磁盘。这是值得做的,因为它将确认你的分区在磁盘上的位置。 - lx07