如何恢复误删除的LUKS分区表?
如何恢复误删除的LUKS分区表?
别慌!既然你已经通过hexdump确认LUKS头还完好,甚至能通过loop设备解密读取所有文件,那重建分区表的操作其实很稳妥,下面一步步来:
先确认关键信息
你之前用losetup -o 0x00100000成功挂载,这个偏移量对应的是2048个扇区(因为每个扇区默认是512字节,0x100000 ÷ 512 = 2048),这就是原LUKS分区的起始位置,这个数值是我们重建的核心。
接下来需要确认磁盘的总大小,确保新分区能覆盖整个原LUKS区域:
# 查看磁盘总扇区数(也可以用fdisk -l /dev/sda查看) sudo blockdev --getsize /dev/sda
选择对应工具重建分区表
根据你原来的分区表类型(MBR或GPT),选择对应的工具操作:
情况1:原分区表是MBR(msdos)
用fdisk工具操作:
- 启动fdisk:
sudo fdisk /dev/sda - 创建新分区:
- 输入
n,选择创建主分区(输入p) - 分区号默认
1,直接回车 - 起始扇区输入
2048(就是我们之前确定的起始位置) - 结束扇区直接回车,自动使用剩余全部空间
- 输入
- 修改分区类型为Linux兼容格式:
- 输入
t,然后输入83(这是Linux文件系统的类型码,LUKS分区用这个完全没问题)
- 输入
- 保存分区表并退出:
- 输入
w,确认后fdisk会自动更新分区表
- 输入
情况2:原分区表是GPT
用gdisk工具操作(如果没装可以先安装gdisk包):
- 启动gdisk:
sudo gdisk /dev/sda - 创建新分区:
- 输入
n,分区号默认1回车 - 起始扇区输入
2048 - 结束扇区直接回车用剩余空间
- 分区类型代码输入
8300(这是GPT格式下Linux文件系统的标准代码,适配LUKS)
- 输入
- 保存分区表:
- 输入
w,确认提示后完成操作
- 输入
验证恢复效果
操作完成后,就可以像正常LUKS分区一样解密挂载了:
# 解密分区 sudo cryptsetup luksOpen /dev/sda1 luksrecover # 挂载(假设挂载点是/mnt/recover) sudo mount /dev/mapper/luksrecover /mnt/recover
之后你就能像之前一样访问所有文件了,也可以用cryptsetup luksDump /dev/sda1确认LUKS头被正确识别。
⚠️ 重要提醒:操作前最好先给整个磁盘做个镜像备份,比如用dd命令:
sudo dd if=/dev/sda of=/path/to/safe/location/backup.img bs=4M
万一操作失误,还能从镜像恢复。
备注:内容来源于stack exchange,提问作者Florian Ludewig
相关产品推荐
相关产品推荐

