几天前的一个晚上,我在 500 GB NTFS USB 外置硬盘上备份了我的数据。然后我格式化了我的电脑,重新安装了 Ubuntu,并开始从外置硬盘传回数据。
不幸的是,一些文件已损坏,Ubuntu 无法复制它们。如果我使用 Windows 7 登录,也会发生同样的问题。
磁盘实用程序使用 SMART 检测到有“一些坏扇区”。
有些文件完好无损,但其他文件无法访问(也无法读取、复制……),尽管它们在 nautilus 中显示并显示正确的文件大小。
我可以做些什么来恢复这些数据?我曾考虑使用测试磁盘但该实用程序似乎对于修复丢失的分区或删除的文件更有用。
我也想过用救援所以我至少可以获得该磁盘的低级副本,但我不确定如何使用它来恢复数据!
答案1
问题解决了!我知道这与 Ubuntu 无关,但我认为这对其他人可能有用。
我发现 Windowschkdsk
可以解决这个问题,这是因为 Ubuntu 对 NTFS 的支持不如 Windows。运行这些任务花了几个小时/几天的时间(只是激活了所有选项的 Windows 磁盘扫描程序),但最终我成功恢复了 99.98% 的数据。
答案2
相反,dd
你应该使用一个可以更好地处理错误的工具,而不是用零填充它们。我遇到了很多超时,这使得这个过程非常漫长而乏味。另一种方法是ddrescue
它会重试失败的扇区,并且根据我的经验,它会在跳过坏扇区方面稍微快一点。
安装(Ubuntu)
sudo apt-get install gddrescue
创建图像
sudo ddrescue -d -r3 /dev/sda1 test.img test.logfile
这将在当前目录中创建一个名为test.img
磁盘的映像/dev/sda1
。当然,您可以备份整个驱动器,而不是单个分区。(r 参数告诉它重试失败的扇区三次 - 不要忘记日志文件,否则这将不起作用)ddrescue 还允许您中止/恢复该过程,这真的很好。请记住设置正确的块大小:如果在 -d“直接模式”上出现错误,请设置 -b“块大小”
挂载映像文件
创建要挂载镜像的文件夹并挂载镜像
sudo mkdir /mnt/mybackup
mount test.img /mnt/mybackup -o loop
请查看下列内容以了解更多信息: https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html https://www.technibble.com/guide-using-ddrescue-recover-data/ https://apple.stackexchange.com/questions/39504/best-way-to-copy-all-files-ignoring-errors
答案3
如果驱动器有无法读取的扇区,您可以选择的一种方式是制作它的映像并dd
强制它忽略损坏的扇区,然后挂载该映像来读取有用的数据。
创建驱动器映像
使用命令sudo fdisk -l
来识别你的 USB 磁盘,记下它的设备路径,它应该看起来像/dev/sd[*]
这样[*]是一个代表您的 USB 驱动器的字母。
当你确定要复制的驱动器的路径时,你可以使用dd
它来制作它的映像,并使用选项在读取数据失败后继续读取
dd if=/dev/hd[*] of=/foo_path/foo_image conv=noerror,sync
这将读取设备/dev/sd[*]
,将其输出到/foo_path/foo_image
并忽略读取错误。/foo_path/foo_image
不应位于您正在读取的同一磁盘上。
因此,假设您使用过sudo fdisk -l
,并且发现您的 USB 驱动器是/dev/sdb
,那么您可以使用其中任何命令来制作图像,只需将其替换/dev/hd[*]
为即可/dev/sdb
。
加载图像文件来读取数据
您需要创建一个挂载点,我们称之为/mnt/ddimage
sudo mkdir /mnt/ddimage
现在将刚刚创建的图像挂载到它
mount /foo_path/foo_image /mnt/ddimage -o loop
您现在应该能够从克隆的驱动器映像中读取任何有用的数据。