我有一块 2TB 的“单个 ext4 格式分区”硬盘。最近,在同一台机器上使用 Windows 7 时,我损坏了上述分区。事情是这样的,当我试图恢复外部 USB 驱动器时,我打开了标准的 Windows 磁盘管理工具,它提示我是否要将磁盘 1 设为“活动”。当时我没有意识到“磁盘 1”不是我的 USB 磁盘,而是 ext4 内部磁盘。单击“确定”后,Windows 在磁盘上创建了一个 100MB 的“系统保留分区”,其余部分保持不变。
当我重新登录 Linux 时,该分区未挂载。我删除了 Windows 创建的 100MB NTFS“系统保留分区”,并尝试运行 Testdisk。Testdisk 看到了我旧的 ext4 分区,但最后却显示“无法恢复分区”之类的信息。
是否可以恢复我的分区和目录结构 + 数据?问题是我的所有程序(C/C++)和工作目录以及一些实验数据都保存在那里,即没有特定标题的文件,如 jpg 或 pdf。有没有办法恢复这些数据?例如,我可以恢复分区的一部分,比如说超过 100MB 的部分吗?
PS 请避免使用“你应该备份”之类的评论。:) 我有一个备份,但它存储在我首先尝试恢复的 USB 驱动器上。(一般磁盘故障,磁盘不可读)。
答案1
你可能遇到过这个问题,但这并不十分清楚。如果是这样,那么你遇到的这种情况是我听说过的第一个,你应该感谢 GNU parted 开发人员花了两年多时间才解决这个问题。
从实际情况来看,最好的恢复方法是:
- (可选,但强烈建议。)对损坏的磁盘进行低级备份。例如,
sudo dd if=/dev/sdc of=/path/to/backup.img
备份/dev/sdc
(如果是损坏的磁盘)到/path/to/backup.img
(您可以根据需要更改此目标目录或文件名)。显然,您必须有足够的可用空间来/path/to
保存备份。这意味着您可能需要购买新的备份磁盘,准备好它,并将其安装在/path
或/path/to
。您可以跳过此步骤,但如果情况变得更糟,恢复将变得更加困难——可能到了无法恢复的地步。 - 使用
fdisk
(如果磁盘使用 MBR)或gdisk
(如果磁盘使用 GPT)重新创建原始分区。由于您说磁盘上只有一个分区,因此它很可能从扇区 2048 开始并延伸到磁盘末尾。因此,删除当前分区并重新创建该分区可能会有效。不要在磁盘上创建一个新的文件系统;只需创建一个空的分区。(GParted 喜欢创建一个新的文件系统,因此应避免使用。可以让它创建一个空分区,但为什么要冒这个险呢?) - 重启。(这只是为了确保你正在使用新的分区表。还有其他更简单的方法可以做到这一点,但这个方法很容易描述。)
e2fsck
在刚创建的分区上运行。如果您非常幸运,它可能会找到足够的 ext4fs 数据结构来恢复磁盘,尽管可能有一些丢失的文件或其他问题。您可能希望使用 fsck.ext4 来确保它正确识别它是 ext4 文件系统。摆弄e2fsck
选项(例如-b
)可能会提高您恢复数据的几率,但这些选项非常高级。e2fsck
有关详细信息,请参阅手册页。- 如果失败,运行相簿在磁盘上。这应该可以恢复单个文件,尽管它们可能没有文件名或任何类型的组织,因此您需要仔细检查它们以找出它们是什么。
答案2
为了恢复,我只使用磁盘的“dd”副本:
sudo dd if=/dev/sdb of=/dev/sdd
(“sdb”是损坏的磁盘,“sdd”是我用于测试的磁盘)
首先,我使用“gdisk”创建一个新的空 GUID 分区表(选项 -o)。
$ sudo gdisk /dev/sdd Command (? for help): $ o This option deletes all partitions and creates a new protective MBR. Proceed? (Y/N): $ y $ w
我尝试过
sudo e2fsck /dev/sdd
- 没有成功(第一个超级块已损坏)$ sudo e2fsck /dev/sdd e2fsck 1.41.12 (17-May-2010) e2fsck: Superblock invalid, trying backup blocks... e2fsck: Bad magic number in super-block while trying to open /dev/sdd The superblock could not be read or does not describe a correct ext2 filesystem. If the device is valid and it really contains an ext2 filesystem (and not swap or ufs or something else), then the superblock is corrupt, and you might try running e2fsck with an alternate superblock: e2fsck -b 8193 <device>
然后我
sudo mke2fs -n /dev/sdd
列出了超级块$ sudo mke2fs -n /dev/sdd1 mke2fs 1.41.12 (17-May-2010) /dev/sdd is entire device, not just one partition! Proceed anyway? (y,n) $ y Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 122101760 inodes, 488378646 blocks 24418932 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=0 14905 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000, 214990848
然后 -
sudo e2fsck -b 214990848 /dev/sdd
在应用了几个修复程序后,我最终得到了一个部分恢复的分区!事实上,这并不是那么简单。我尝试了几个超级块和不同的 e2fsck 选项。无论如何,这是一般的方法。
附录:在恢复期间,我对所有问题都回答“否”,例如:
One or more block group descriptor checksums are invalid. Fix(y)?
$ no
/lost+found not found. Create(y)?
$ no
Free blocks count wrong for group # (32768, counted=0). Fix(y)?
$ no
Free inodes count wrong (122101749, counted=1606). Fix(y)?
$ no
答案3
尝试 GNU ddrescue。
GNU 救援是一款数据恢复工具。它将数据从一个文件或块设备(硬盘、光驱等)复制到另一个文件或块设备,在发生读取错误时尽力挽救数据。
ddrescue 的基本操作是全自动的。也就是说,您不必等待错误、停止程序、阅读日志、以反向模式运行它等。
欲了解更多信息,并下载 ddrescue,请参阅网站。
Ubuntu 救援混音是一个 GNU/Linux 实时系统,可从 CD 或 USB 闪存设备运行。它为数据恢复专家提供了一个命令行界面环境,配备了目前最好的自由开源数据恢复和取证工具。
也有一些很棒的产品,但不是免费的。例如R-STUDIO Linux 数据恢复。
您也可以尝试R-Studio。
R-Studio 是功能强大且经济高效的反删除和数据恢复软件系列。借助全新独特的数据恢复技术,它是从 NTFS、NTFS5、ReFS、FAT12/16/32、exFAT、HFS/HFS+ (Macintosh)、UFS1/UFS2 的 Little 和 Big Endian 变体 (FreeBSD/OpenBSD/NetBSD/Solaris) 和 Ext2/Ext3/Ext4 FS (Linux) 分区恢复文件的最全面的数据恢复解决方案。它还使用原始文件恢复(扫描已知文件类型)来恢复严重损坏或未知的文件系统。它可以在本地和网络磁盘上运行,即使这些分区已被格式化、损坏或删除。灵活的参数设置让您可以完全控制数据恢复。