我怀疑磁盘上可能有坏扇区。我使用了 ext3 文件系统。
什么工具最能相当于 Windows 的错误检查工具?
答案1
磁盘
要检查坏扇区,请检查 SMART 数据,这可能是最好的方法,方法是启动磁盘公用事业 (重写本)。即使您没有看到任何坏块,也请启动自我检测以确保无误。
该程序已捆绑在gnome-disk-utility
软件包中。运行gksudo gnome-disks
或者在 Ubuntu 16.04 版本(3.18)中:
坏块
您还可以使用badblocks
sudo badblocks -sv /dev/sda
仅检查,或者检查并修复,首先将结果写入临时文件:
sudo badblocks -sv /dev/sda > bad-blocks-result
sudo fsck -t ext4 -l bad-blocks-result /dev/sda1
将检查整个磁盘并打印出遇到的所有坏块/dev/sda。
来自badblocks
手册:
重要的提示:如果 badblocks 的输出要输入到 e2fsck 或 mke2fs 程序,则必须正确指定块大小,因为生成的块号非常依赖于文件系统使用的块大小。因此,强烈建议用户不要直接运行 badblocks,而是使用 e2fsck 和 mke2fs 程序的 -c 选项。
fsck
fsck
本身不会帮你找到坏扇区,更糟糕的是,如果坏扇区很多,它甚至会进一步损坏你的数据。只有当磁盘健康时才使用它。
答案2
在本回答中,我假设存储驱动器在路径中显示为块设备/dev/sdc
。要在当前设置中找到存储驱动器的路径,请使用:
- Gnome 磁盘 (以前称为 Gnome 磁盘实用程序,又名
palimpsest
),如果有 GUI 可用,或者 - 在终端上查看的输出
lsblk
,ls -l /dev/disk/by-id
并尝试根据大小、分区、制造商和型号名称找到正确的设备。
基本检查
- 仅检测完全无响应的媒体
- 几乎是瞬间完成(除非介质旋转停止或损坏)
- 安全的
- 适用于只读媒体(例如 CD、DVD、BluRay)
有时存储介质根本无法工作。它在内核和磁盘管理器中仍显示为块设备,但其保存分区表的第一个扇区不可读。这可以通过以下方法轻松验证:
sudo dd if=/dev/sdc of=/dev/null count=1
如果此命令导致出现“输入/输出错误”消息,则表示我们的驱动器已损坏或无法按预期与 Linux 内核交互。在前一种情况下,如果运气好的话,拥有适当装备的实验室的数据恢复专家可以挽救其内容。在后一种情况下,值得尝试不同的操作系统。(我遇到过在 Windows 上无需特殊驱动程序即可运行的 USB 驱动器,但在 Linux 或 OS X 上却不行。)
SMART 自我检测
- 可调整的彻底性
- 瞬间到缓慢或更慢(取决于测试的彻底性)
- 安全的
- 警告不久的将来可能会失败
支持该功能的设备可以通过以下方式查询其健康状况聪明的或指示执行不同程度的完整性自检。这通常是最佳选择,但通常仅适用于(非老式)硬盘和固态驱动器。大多数可移动闪存介质不支持它。
更多资源和说明:
只读检查
- 仅检测一些闪存介质错误
- 对于硬盘来说相当可靠
- 慢的
- 安全的
- 适用于只读媒体(例如 CD、DVD、BluRay)
为了测试整个设备的读取完整性而不写入它,我们可以使用badblocks(8)
像这样:
sudo badblocks -b 4096 -c 4096 -s /dev/sdc
此操作可能需要很长时间,尤其是当存储驱动器确实损坏时。如果错误计数超过零,我们就知道有一个坏块。如果我们对坏块的确切数量(以及位置)不感兴趣,我们可以随时安全地中止操作(即使在断电期间强制中止)。可以使用选项在发生错误时自动中止-e 1
。
高级用法注意事项:如果我们想重复使用 的输出e2fsck
,我们需要将块大小 ( -b
) 设置为所包含文件系统的大小。我们还可以调整-c
一次测试的数据量( ,以块为单位)以提高吞吐量;对于大多数设备来说,16 MiB 应该没问题。
非破坏性读写检查
- 非常彻底
- 最慢
- 相当安全(除非发生电源故障或间歇性内核崩溃)
有时——尤其是使用闪存介质时——仅在尝试写入时才会发生错误。(这将不会可靠地发现(flash)媒体,其宣传的尺寸比实际尺寸更大;使用打击 Flash 欺诈反而。)
绝不在驱动器上使用它挂载的文件系统!
badblocks
无论如何都拒绝对这些进行操作,除非你强迫它。不要中断此操作强行! Ctrl+ C(SIGINT/SIGTERM) 并等待正常提前终止是可以的,但
killall -9 badblocks
(SIGKILL) 不行。强制终止后badblocks
无法恢复当前测试的块范围的原始内容,并且会将其用垃圾数据覆盖,并可能损坏文件系统。
要使用非破坏性读写检查,请将-n
选项添加到上述badblocks
命令中。
破坏性读写检查
- 非常彻底
- 慢点
- 删除驱动器上的所有数据
如上所述,但在执行写入测试后不恢复以前的驱动器内容,因此速度会快一点。由于数据无论如何都会被删除,因此强制终止不会产生(额外的)负面后果。
要使用破坏性读写检查,请将-w
选项添加到上述badblocks
命令中。
答案3
fsck - 检查并修复 Linux 文件系统。使用以下命令调用它
fsck /dev/sda1
其中 /dev/sda1 是您要检查的驱动器。请参阅“man fsck”了解更多详细信息。
还有“badblocks”命令,它可以检查设备是否存在坏块。
检查时需要卸载驱动器,因此要检查根分区,您需要在分区的根目录中创建一个文件“forcefsck”,然后重新启动。下次启动时将检查该设备:
sudo touch /forcefsck
sudo reboot
或者,您可以从 Live CD 启动并从那里运行检查。
答案4
坏块
您可以运行以下命令检查坏块
sudo badblocks -nsv /dev/[device-partition] > bad-blocks-result
进行非破坏性读写测试。这将生成一个名为的文件,bad-blocks-result
其中包含损坏的扇区。-n使用非破坏性读写模式。默认情况下,仅进行非破坏性只读测试。
-s通过写出当前坏块在磁盘上传递的粗略完成百分比来显示扫描的进度。
-v详细模式。
- 然后,您可以运行
sudo fsck -t ext3 -l bad-blocks-result /dev/[device-partition]
来告诉文件系统坏扇区在哪里,并将数据从坏扇区移走(如果可能)。
您可以找到更多相关阅读内容这里。