我在驱动器的 APFS 容器上运行了“磁盘实用程序急救”。其中一个卷(称为“VM”)发出以下警告:
warning: Overallocation Detected on Main device: (26707978+1) bitmap address (3bc0d)
我还运行了diskutil verifyVolume /dev/disk1s4
,其中disk1s4
是与“VM”卷对应的标识符。这没有返回警告。考虑到这一点,并且知道 VM 卷的用途,我认为这种情况不是问题,而是verifyVolume
在整个容器上运行的结果。
也就是说,由于 VM 卷用于在卷之间进行交换,因此它可能在验证容器的过程中使用,这就是它返回过度分配警告的原因。但这只是我的猜测。
这一个线程说重新格式化驱动器是他们的解决方案。但是,我昨天刚刚重新格式化了我的驱动器,不得不等待 12 个小时(我计时)才能从 Time Machine 恢复所有 700 多 GB。该线程有许多其他系统文件问题,所以我希望我的情况不必诉诸从头开始这样激烈的措施。
我很欣赏您的见解。
PS:如果你想知道 VM 卷的用途,这里是一个链接。
PPS:我宁愿在 SO 中发布此内容,因为该网站对关键字搜索“分配”的点击率更高。但我却被发到了这里。
答案1
因此我做了一些实验,看来问题可能确实只是尝试验证 APFS 容器而不是它的某个卷的结果,至少当您检查的是系统卷时。
在典型设置中,您的输出diskutil
可能看起来像这样:
/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 1000.0 GB disk0s2
/dev/disk1 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +1000.0 GB disk1
Physical Store disk0s2
1: APFS Volume macOS 74.9 GB disk1s1
2: APFS Volume Preboot 44.6 MB disk1s2
3: APFS Volume Recovery 506.8 MB disk1s3
4: APFS Volume VM 20.5 KB disk1s4
在这种情况下,验证容器(diskutil verifyVolume disk0s2
)似乎是应该工作,但即使在新格式化的磁盘上,它也会导致奇怪的错误,这些错误在再次检查时不会发生,或者从恢复或另一个启动磁盘检查时不会发生。
然而有趣的是,在处理第二个(非系统)APFS 驱动器时,验证容器本身似乎没问题,例如如果布局如下所示:
/dev/disk0 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *4.0 TB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_APFS Container disk3 4.0 TB disk2s2
/dev/disk3 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +4.0 TB disk3
Physical Store disk2s2
1: APFS Volume Data 2.67 TB disk3s1
在这种情况下,验证容器与验证其中的唯一卷在功能上是等效的。
我不知道为什么会有差异。不管是什么原因,至少对于检查系统卷来说,最好只检查特定的卷,如下所示:
diskutil verifyDisk disk0
diskutil verifyVolume disk1s1
从理论上讲,APFS 应该比 HFS+ 更能抵御损坏,因为现在所有元数据都应该被校验和。
话虽如此,我的系统卷在 APFS 下出现过问题,但这是由于断电造成的,导致快照处于损坏状态(无法使用tmutil
或删除它diskutil apfs deleteSnapshot
,需要完全擦除才能修复)。我进行检查主要是出于担心,以防这种情况再次发生(新fsck_apfs
版本可能也能修复此类问题,我不确定)。