有一台 iMac 配备了单硬盘,并启用了全盘 FileVault 加密。一些技术水平可疑的“系统管理员”在没有 FileVault 密码或必要知识的情况下尝试访问数据,导致磁盘无效。
从他给出的稀少且零散的解释来看,可能他使用一些十六进制编辑器弄乱了磁盘结构,然而众所周知,使用此类工具会弄乱 CRC32 校验和,甚至维基百科明确指出. 据说这就是发生的事情。
所以我们现在得到的是一个没有任何分区的磁盘:
imac:/ a$ sudo gpt -r show /dev/disk1
start size index contents
0 1953525135
1953525135 32 Sec GPT table
1953525167 1 Sec GPT header
所以只剩下的是次要的 GPT 表和标题。
gdisk
明确指出主 GPT 已损坏并建议从备份中恢复,但恢复的分区结构看起来很奇怪:
imac:/ a$ sudo gdisk /dev/disk1
GPT fdisk (gdisk) version 1.0.1
Caution: invalid main GPT header, but valid backup; regenerating main header
from backup!
Caution! After loading partitions, the CRC doesn't check out!
Warning! Main partition table CRC mismatch! Loaded backup partition table
instead of main partition table!
Warning! One or more CRCs don't match. You should repair the disk!
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: damaged
Found invalid MBR and corrupt GPT. What do you want to do? (Using the
GPT MAY permit recovery of GPT data.)
1 - Use current GPT
2 - Create blank GPT
Your answer: 1
Command (? for help): p
Disk /dev/disk1: 1953525168 sectors, 931.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): D5FB3C42-0E3D-4DC5-B4A9-7C97E8704CF5
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 8-sector boundaries
Total free space is 1953262957 sectors (931.4 GiB)
Number Start (sector) End (sector) Size Code Name
1 34 262177 128.0 MiB 0C01 Microsoft reserved ...
Command (? for help):
输出如下fdisk
:
imac:/ a$ fdisk /dev/disk1
Disk: /dev/disk1 geometry: 121601/255/63 [1953525168 sectors]
Signature: 0x2A74
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: ED 813 202 27 - 321 220 54 [ 783900958 - 3581756343] <Unknown ID>
2: 7C 724 235 26 - 550 178 18 [1238663544 - 3274878647] <Unknown ID>
3: F6 189 250 53 - 993 151 48 [2185613635 - 893877749] <Unknown ID>
4: 2E 201 236 53 - 683 56 37 [ 23839636 - 1903113077] <Unknown ID>
通过快速搜索testdisk
发现了两个主分区,第一个分区是 类型MS Data
,之前也被 检测到gdisk
,但似乎是第二个,这可能很有趣,因为它是 类型Mac HFS
,并且其大小约为 650 MB,表明它缺少 Recovery HD。所以现在我需要找到受 FileVault 保护的主要数据分区的边界:
Partition Start End Size in sectors
P MS Data 1699755823 1702272435 2516613 [ M-:?->M-'` P^C ]
P Mac HFS 1952255592 1953525127 1269536
testdisk
的更深层次的搜索,不幸的是没有发现任何大的分区:
问题是甚至可以从辅助 GPT 表/头恢复分区结构?我认为如果这些存在,它们可能会有一些用处。我还能尝试什么检索主数据分区的位置?
答案1
好吧,从标题来看,我自己的原始问题的直接答案非常简单,它实际上在问题正文中已经回答了:是的,可以从辅助 GPT 表/头数据恢复驱动器分区,它完成后会gdisk
自动建议在启动后执行恢复过程,但就我而言,恢复的卷结构是垃圾。
我还可以回答有关主数据分区位置的下一个问题。是的,在了解 OS X 在安装过程中创建卷的方式后,可以计算出它的位置。因此,可以恢复丢失的卷,前提是它是使用默认设置创建的(默认 OS X 安装,没有额外的数据分区)。这就是我所做的。
为了了解 OS X 准备启动盘的模式,我将 Yosemite(幸好 El Capitan 没有对此进行任何更改)安装到某个备用的 320 GB 驱动器上。有了这些信息,我设法使用以下简单命令恢复了有问题的磁盘上的 FileVault 分区:
sudo gpt destroy /dev/disk2
sudo gpt create -f /dev/disk2
sudo gpt add -b 409640 -i 2 -s 1951845952 -t 53746F72-6167-11AA-AA11-00306543ECAC /dev/disk2
第一个命令毁掉了我那有缺陷的、无用的 GPT。第二个命令创建了一个新的。第三个命令标记了一个卷。不是重新创建,而只是标记有一个给定类型的卷恰好跨越这些扇区。顺便说一下,在这种情况下,一个扇区是 512 字节。
我怎么知道409640 -b开始和1951845952 -s大小?好吧,扇区 409640 是数据分区 2 的标准开始,它跨越EFI
分区之后,OS X 始终在磁盘的开头创建分区,因此可以肯定。EFI
始终以 409640 扇区结束。并且1,951,845,952扇区大小就是我的磁盘扇区总大小(1,953,525,168)减去Recovery HD
大小(1,269,536) 减40磁盘末尾的扇区阈值减去409,640第二个数据分区之前的扇区。结果正是1,951,845,952。能被 8 整除,这意味着我是对的。
神秘的53746F72-6167-11AA-AA11-00306543ECAC是GPT 分区类型 GUID,这会将此卷标记为 FileVault 分区。不是常规的 HFS+。我用-我ndex 为 2,因此它是第二个,但我认为这个参数并不重要,因为我不会恢复其他两个分区(EFI
和Recovery HD
)。老实说,在我调查期间,我曾尝试恢复Recovery HD
,只是为了检查它是否存在,并且它确实存在,可安装,安全无虞。这次我忽略了它,因为EFI
和Recovery HD
对我都没有任何用处,我不打算从这个驱动器启动,我只想挽救一些数据。
恢复 FileVault 卷的边界后,我立即收到了 FileVault 密码请求,我很乐意提供。这意味着我计算的边界是正确的。为了证明这一点,我甚至尝试了不同的边界,但这次没有任何密码请求。
然而,在 FileVault 卷成功解锁后,我得到了一个著名的
消息框,这意味着,即使我找回了 FileVault 分区,也并不意味着它是完整的。它是可以解锁的,但不知何故损坏了。
因此,现在我要看看我是否有机会修复这个 FileVault 卷或挽救数据。后续问题是这里。