在 Ubuntu 20.04.4 LTS amd64 上。
我将一个 GPT 分区(使用 GParted 格式化,带有单个 LUKS 分区,同时连接到 USB 3.0 机箱)交换到内部 SATA 连接。将其移入机箱并连接到 SATA 连接后,gdisk 显示:
MBR: protective
BSD: not present
APM: not present
GPT: present
磁盘看起来就像只是可用空间。
我依稀记得以前见过这种情况,但我并不经常移动存储,也不记得如何解决这个问题或避免将来出现同样的问题。
答案1
外壳及其通信方式的某些问题似乎导致了扇区通信和/或分区表解释方式不匹配。
值得庆幸的是,LUKS 头仍然存在并且可以找到。 在我的情况下,这很有帮助,因为 LUKS 分区占据了其头之外的整个磁盘,因此,对于具有多个分区的磁盘,以下解决方案本身无济于事。
$ sudo hexdump -C /dev/sdb | grep ' 4c 55 4b 53 ba be'
00100000 4c 55 4b 53 ba be 00 02 00 00 00 00 00 00 40 00 |LUKS..........@.|
^C
Ctrl+C打破。
如果您找到一个像我上面那样的标题(在此示例中为“00100000”),并且末尾带有 LUKS,请将该十六进制转换为十进制,然后除以 512 即可找到扇区。
$ perl -le 'print hex("00100000");'
1048576
$ perl -le 'print (( 1048576 / 512 ));'
2048
然后,使用 gdisk:
- 创建一个新的 GPT 分区表。
- 创建一个新的 LUKS 分区,从该扇区(本例中为 2048)开始,到磁盘末尾结束。在我的例子中,分区类型为 8309(“8309 Linux LUKS”)。
不幸的是,如果 LUKS 分区没有在磁盘末尾结束,则没有特定的方法来确定它在哪里结束,您需要采取另一种恢复方式。
不过,上面概述的内容足以恢复单个 LUKS 分区且不会丢失数据。
参考: