恢复损坏或删除的 NTFS 分区

Not*_*ert 14 filesystem dual-boot mount ntfs data-recovery

大约两周前,我的 PC 出现问题,我兄弟写了一个关于在使用 Windows 7 自动修复后 PC 无法启动的问题。

我还没解决问题,所以我的电脑现在无法使用。

现在我认为重新安装 Win7 和 Ubuntu 比修复它们更简单,但是它们的分区上有一些数据。我想恢复这些数据。

由于某种原因,这些分区不可挂载。我不知道为什么。

sudo fdisk -l 关于有问题的分区:

Device    Boot      Start         End      Blocks   Id  System
/dev/sda1            2048     147912703    73955328   83 Linux
/dev/sdb2            206848   174079999    86936576    7  HPFS/NTFS/exFAT
Run Code Online (Sandbox Code Playgroud)

在 GParted 中:

在此处输入图片说明

在此处输入图片说明

以及mount命令的错误:

Failed to mount '/dev/sdb2': Invalid argument
The device '/dev/sdb2' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?
Run Code Online (Sandbox Code Playgroud)

和完全相同的消息 /dev/sda1

如何从这些硬盘中恢复我的数据?

编辑

我试图指定驱动器的类型:

$ sudo mount -t ext4 /dev/sda1 /olddisk
mount: wrong fs type, bad option, bad superblock on /dev/sda1,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
$ sudo mount -t ntfs /dev/sdb2 /olddisk
NTFS signature is missing.
Failed to mount '/dev/sdb2': Invalid argument
The device '/dev/sdb2' doesn't seem to have a valid NTFS.
Maybe the wrong device is used? Or the whole disk instead of a
partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?
Run Code Online (Sandbox Code Playgroud)

编辑

sudo ntfsfix /dev/sdb2 返回:

Mounting volume... NTFS signature is missing.
FAILED
Attempting to correct errors... NTFS signature is missing.
FAILED
Failed to startup volume: Invalid argument
NTFS signature is missing.
Trying the alternate boot sector
Unrecoverable error
Volume is corrupt. You should run chkdsk.
Run Code Online (Sandbox Code Playgroud)

And*_*tto 12

免责声明:在这里这里提供了类似问题的答案。这是对这两个答案的总结。此外,我是 RecuperaBit 的开发者。

您的 NTFS 分区已损坏。为了恢复数据,您需要制作它的副本(理想情况下),然后使用 NTFS 重建软件来恢复其内容。

克隆驱动器

您确实应该将驱动器克隆到外部磁盘上的一个文件中,除非它太大以至于您找不到其他驱动器来容纳它。

如果您确实确定NTFS 分区与 重合/dev/sdb2,则使用ddrescue仅复制该分区:

sudo ddrescue /dev/sdb2 /media/user/External/copy.img /media/user/External/status.log
Run Code Online (Sandbox Code Playgroud)

如果您不确定,最好克隆整个/dev/sdb驱动器。当然,这将占用更多空间:

sudo ddrescue /dev/sdb /media/user/External/copy.img /media/user/External/status.log
Run Code Online (Sandbox Code Playgroud)

status.log文件不是强制性的,但如果您想暂停该过程并稍后继续,则需要该文件。

分析和重建文件系统

如果文件系统只是轻微损坏,您可能会很幸运testdisk

testdisk /media/External/copy.img
Run Code Online (Sandbox Code Playgroud)

按照 CLI 中的分步过程,您将能够使用P密钥列出分区的内容,假设它几乎完好无损。

如果损坏更严重,则需要其他东西。您可以使用RecuperaBit恢复(可能严重)损坏的 NTFS 分区。RecuperaBit 尝试重建文件系统结构并恢复文件。RecuperaBit 尝试重建目录结构,而不管:

  • 缺少分区表
  • 未知分区边界
  • 部分覆盖的元数据
  • 快速格式化

目前,它不需要安装,您需要从 GitHub 下载存档并将其解压缩到您选择的目录中。

之后,为输出创建一个目录并使用以下命令启动程序:

mkdir /media/user/External/recovered_files
cd [full path of recuperabit]
pypy main.py /media/user/External/copy.img -o /media/user/External/recovered_files -s /media/user/External/savefile.save
Run Code Online (Sandbox Code Playgroud)

您也可以使用python,但pypy速度更快。扫描过程将需要相当长的时间。完成后,键入recoverable并找到您的分区的 ID。如果是例如 2,请键入:

restore 2 5
restore 2 -1
Run Code Online (Sandbox Code Playgroud)

5表示目录,-1表示丢失的文件目录。

有关其他详细信息、解释和警告,请参阅本文顶部的两个链接。

  • @Notbeginner Norexpert:如果我的回答对您有帮助,请考虑将其标记为 [已接受的答案](http://askubuntu.com/help/accepted-answer),以便其他人将来更容易找到它。这也是一种礼貌的方式来感谢回答您问题的人帮助您。 (2认同)