dd
在 Linux 笔记本电脑上,我错误地在命令中输入了错误的主硬盘名称sudo dd if=/path/to/clonezilla-iso-file of=/dev/sda status=progress
(clonezilla ISO 文件为 306 MB)。
[这是我的原始帖子遵循@PonJar 和@oldfred 的建议,以及其他在线建议。
当我重新启动笔记本电脑时,出现“未找到可启动设备“。即使尝试重新安装 Ubuntu,我也收到“此计算机目前未检测到操作系统“唯一的选择是在安装操作系统的同时擦除磁盘上的所有数据。
我知道(但愿如此)被覆盖的磁盘部分无法恢复。但我还是希望至少可以访问(检索或提取)仍然存在的任何数据。
我到目前为止尝试过的:
使用 Ubuntu 20.04 可启动 USB,我选择了“尝试 Ubuntu“选项。通过终端,我无法访问任何‘旧’数据(目录下没有任何内容home
)。
我尝试了一下sudo gdisk -l /dev/sda
,得到了以下输出:
GPT fdisk (gdisk) version 1.0.5
Caution: invalid main GPT header, but valid backup; regenerating main header from backup!
Warning: Invalid CRC on main header data; loaded backup partition table.
Warning! Main and backup partition tables differ! Use the 'c' and 'e' options on the recovery & transformation menu to examine the two tables.
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!
Main header: ERROR
Backup header: OK
Main partition table: ERROR
Backup partition table: OK
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: damaged
Found valid MBR and corrupt GPT. Which do you want to use? (Using the GPT MAY permit recover of GPT data.)
1 - MBR
2 - GPT
3 - Create blank GPT
Your answer:
在那里,我进入2
并得到了这个:
Disk /dev/sda: 1953525168 sectors, 931.5 GiB
Model: TOSHIBA MQ04ABF1
Sector size (logical/physical): 512/4096 bytes
Disk identified (GUID): B8CE21AF-F666-9ADA-9B95B7FFACFD
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 2048-sector boundaries
Total free space is 3437 sectors (1.5 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 1050623 512.0 MiB EF00 EFI System Partition
2 1050624 1953523711 931.0 GiB 8300
然后我尝试sudo parted -l
并得到了这个:
Model: ATA TOSHIBA MQ04ABF1 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File System Flags
1 32.8kB 321MB 321MB Primary boot, hidden
Warning: The driver descriptor says the physical block size is 2048 bytes, but Linux says it is 512 bytes.
Ignore/Cancel?
这里,不确定我该如何(以及是否)继续。
最后,根据其他在线博客的建议,我尝试访问 BIOS 并在“安全”选项卡下,尝试选择“选择作为受信任的 UEFI 文件进行执行”,但我的硬盘没有列出(我只有 1 个硬盘,没有列出任何内容)。
还有什么我可以尝试的吗?是否可以从其他设备将我的硬盘作为外部磁盘访问?任何帮助都将非常有用,因为我迫切需要恢复我的数据。
答案1
我认为您实际上并没有修复分区表。当您在 gdisk -l 后按 2 时,您会看到磁盘将如何使用备份分区表。根据 gdisk 手册页,有一个恢复菜单,您可以在其中使用备份并修复分区。关键摘录如下:
第二个 gdisk 菜单是恢复和转换菜单,它提供对数据恢复选项和与分区方案之间的分区转换相关的功能的访问(例如,将 BSD 磁盘标签转换为 GPT 分区或创建混合 MBR)。为了方便起见,此菜单上的几个选项与主菜单上的功能相同。此菜单上的选项包括:
b
从备份重建 GPT 标头。您可以使用此选项使用备份 GPT 标头重建主 GPT 标头。如果您的主 GPT 标头已损坏或被破坏(例如,由于粗心使用 dd),则它可能很有用。
使用 gdisk 主菜单中的 r 进入恢复菜单。祝你好运!
答案2
前 300 MB 左右以外的数据仍然可以恢复,但您必须非常小心地进行操作。特别是,您需要尽量减少写入此磁盘的数据,并将所有可恢复的数据保存在其他地方以供以后重新安装。幸运的是,您在磁盘开头有一个大于 300 MB 的 EFI 分区,因此主操作系统分区可能未受影响且 100% 可恢复。在这种情况下,您可能只需要重新格式化 EFI 分区并重新安装引导加载程序。
首先,正如 @Ponjar 所讨论的,您需要修复分区表。您运行的命令仅显示找到的现有分区表。忽略 MBR 分区表。它来自您写入磁盘开头的 ISO 映像,并且不正确。相反,您需要恢复第一个命令检测到的 GPT 分区表的副本。幸运的是,GPT 在磁盘末尾存储了整个分区表的备份副本,并且 gdisk 能够成功读取它。您需要按照与此类似的过程来恢复备份 GPT:
gdisk shell 现在将打开。输入“r”选择恢复选项。从恢复选项中,输入“b”从辅助(备份)恢复 GPT 标头,然后输入“c”从辅助(备份)恢复 GPT 分区表。然后选择“v”,然后选择“w”进行验证,并写入磁盘。
# sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): r
Recovery/transformation command (? for help): b
Recovery/transformation command (? for help): c
Warning! This will probably do weird things if you've converted an MBR to
GPT form and haven't yet saved the GPT! Proceed? (Y/N): Y
Recovery/transformation command (? for help): v
No problems found. 3437 free sectors (1.7 MiB) available in 2
segments, the largest of which is 2014 (1007.0 KiB) in size.
Recovery/transformation command (? for help): w
恢复分区表后,您将需要恢复主操作系统文件系统。如果 dd 确实从未到达此分区,那么可能就没什么可做的了。尝试将其安装到恢复映像上:
sudo mount -r /dev/sda2 /mnt
我建议在检查数据时使用 -r 进行只读挂载。如果挂载成功,并且您看到所有数据都存在,则可能适合重复使用而无需重新安装。如果一切完好无损,您可能只需重新安装 EFI 系统分区即可修复启动。这将需要从头开始重新格式化:
sudo mkfs -t fat -F 32 /dev/sda1
您还需要使您的根文件系统可读写:
sudo mount -o remount,rw /mnt
然后关注本指南在 EFI 系统分区上重新安装 GRUB:
sudo mount /dev/sda1 /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
grub-install /dev/sda
update-grub
但是,如果您发现无法挂载根文件系统,则可能会丢失少量数据,并且需要恢复根文件系统上的超级块。根据您在问题中提到的分区表和文件大小,情况应该不是这样,但如果是这样,此过程应该有助于找到超级块。mkfs -n
在根文件系统上运行以发现备份超级块可能位于何处。
sudo mkfs -t ext4 -n /dev/sda2
前几个超级块可能会被覆盖,但后面的超级块应该完好无损。根据显示的超级块,您可以尝试使用以下命令安装一个:
sudo mount -o sb=131072 -r /dev/sda2 /mnt
假设 131072 是 mkfs 建议的超级块之一,并且尚未被覆盖。如果 /mnt 下的数据看起来合理,并且您能够找到一些文件,则可以尝试使用以下命令修复文件系统:
sudo fsck -t ext4 -b 131072 /dev/sda2
然而,当您使用备用超级块时,您可能需要备份所有可以保存的数据,然后进行完整的重新安装。