arr*_*nge 122
要检查坏扇区,请检查 SMART 数据,这可能是启动磁盘实用程序 ( Palimpsest )最容易访问的方法。即使您在那里没有看到任何坏块,也请启动自检以确保安全。
该程序捆绑在gnome-disk-utility包中。跑gksudo gnome-disks

或者在 Ubuntu 16.04 版本 (3.18) 中:
你也可以使用 badblocks
sudo badblocks -sv /dev/sda
Run Code Online (Sandbox Code Playgroud)
只是检查,或检查和修复首先将结果写入临时文件:
sudo badblocks -sv /dev/sda > bad-blocks-result
sudo fsck -t ext4 -l bad-blocks-result /dev/sda1
Run Code Online (Sandbox Code Playgroud)
将检查整个磁盘并打印出/dev/sda上遇到的所有坏块。
从badblocks手册:
重要提示:如果将 badblocks 的输出提供给 e2fsck 或 mke2fs 程序,正确指定块大小很重要,因为生成的块编号非常依赖于文件系统使用的块大小. 为此,强烈建议用户不要直接运行坏块,而是使用 e2fsck 和 mke2fs 程序的 -c 选项。
fsckfsck本身不会帮助您找到坏扇区,更糟糕的是,如果有很多坏扇区,它可能会对您的数据造成更大的损害。仅在磁盘健康时使用它。
Dav*_*ter 93
在整个答案中,我假设存储驱动器在 path 中显示为块设备/dev/sdc。要在我们当前的设置中查找存储驱动器的路径,请使用:
palimpsest),如果有 GUI,或者lsblk并ls -l /dev/disk/by-id尝试按大小、分区、制造商和型号名称找到正确的设备。有时,存储介质根本不工作。它仍然显示为内核和磁盘管理器中的块设备,但其保存分区表的第一个扇区是不可读的。这可以通过以下方式轻松验证:
sudo dd if=/dev/sdc of=/dev/null count=1
Run Code Online (Sandbox Code Playgroud)
如果此命令导致有关“输入/输出错误”的消息,则我们的驱动器已损坏或无法按预期与 Linux 内核交互。在前一种情况下,如果幸运的话,拥有适当设备的实验室的数据恢复专家可以挽救其内容。在后一种情况下,值得尝试不同的操作系统。(我遇到过可以在没有特殊驱动程序的情况下在 Windows 上运行的 USB 驱动器,但不能在 Linux 或 OS X 上运行。)
支持它的设备可以通过SMART查询其健康状况,或指示其执行不同彻底性的完整性自检。这通常是最好的选择,但通常仅适用于(非古代)硬盘和固态驱动器。大多数可移动闪存介质不支持它。
更多资源和说明:
要在不写入的情况下测试整个设备的读取完整性,我们可以这样使用badblocks(8):
sudo badblocks -b 4096 -c 4096 -s /dev/sdc
Run Code Online (Sandbox Code Playgroud)
此操作可能需要很长时间,尤其是在存储驱动器实际上已损坏的情况下。如果错误计数上升到零以上,我们就会知道有一个坏块。如果我们对坏块的确切数量(可能还有位置)不感兴趣,我们可以随时安全地中止操作(甚至像断电时那样强制)。使用 option 可以在出错时自动中止-e 1。
高级用法注意事项:如果我们想重用 的输出e2fsck,我们需要将块大小 ( -b) 设置为包含的文件系统的块大小。我们还可以调整-c一次测试的数据量(以块为单位)以提高吞吐量;对于大多数设备,16 MiB 应该没问题。
有时——尤其是对于闪存介质——错误仅在尝试写入时发生。(这将无法可靠地发现(闪存)媒体,其广告尺寸比实际尺寸更大;请改用“打击闪存欺诈”。)
切勿在安装了文件系统的驱动器上使用它! badblocks无论如何拒绝对这些进行操作,除非您强迫它。
不要强行打断这个操作! Ctrl+ C(SIGINT/SIGTERM) 并等待正常的提前终止是可以的,但killall -9 badblocks(SIGKILL) 不是。强行终止后badblocks无法恢复当前测试块范围的原始内容,并将使其被垃圾数据覆盖并可能损坏文件系统。
要使用非破坏性读写检查,请将-n选项添加到上述badblocks命令中。
同上,但是在执行写测试后没有恢复以前的驱动器内容,因此它有点快。由于数据无论如何都会被擦除,因此强制终止不会产生(额外的)负面后果。
要使用破坏性读写检查,请将-w选项添加到上述badblocks命令。
Ser*_*gey 48
fsck - 检查和修复 Linux 文件系统。调用它使用
fsck /dev/sda1
Run Code Online (Sandbox Code Playgroud)
其中 /dev/sda1 是您要检查的驱动器。有关更多详细信息,请参阅“man fsck”。
还有'badblocks' 命令可以检查设备,你猜对了,坏块。
检查时需要卸载驱动器,因此要检查根分区,您需要在分区的根目录中创建一个文件“forcefsck”并重新启动。下次启动时将检查设备:
sudo touch /forcefsck
sudo reboot
Run Code Online (Sandbox Code Playgroud)
或者,您可以从 Live CD 启动并从那里运行检查。
Die*_*les 22
您可以检查运行命令的坏块
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]以告诉文件系统坏扇区的位置并将数据从它们移走。你可以在这里找到更多关于它的阅读。
Pan*_*her 22
IMO smartctl 是一个更好的工具。您可能必须先安装它
sudo apt-get install smartmontools
Run Code Online (Sandbox Code Playgroud)
然后
sudo smartctl -a /dev/sda | less
Run Code Online (Sandbox Code Playgroud)
打印驱动器健康数据、属性和可用的测试结果。要少退出,请键入q。或者
sudo smartctl -H /dev/sda
Run Code Online (Sandbox Code Playgroud)
只打印健康数据。
在后台开始新的短(几分钟)或长(最多几个小时)自检:
sudo smartctl -t [short|long]
Run Code Online (Sandbox Code Playgroud)
如果您愿意,GSsmartControl (主页)和Gnome Disks是图形前端。
bma*_*pin 10
F3(Fight Flash Fraud)是另一种选项,它应该额外检测假闪存驱动器(实际容量是广告容量的一小部分的闪存驱动器):
安装 F3
sudo apt install f3
Run Code Online (Sandbox Code Playgroud)插入驱动器
将测试数据写入驱动器上的可用空间(检查驱动器的安装位置lsblk)
f3write /media/$USER/D871-DD7C/
Run Code Online (Sandbox Code Playgroud)读取测试数据
f3read /media/$USER/D871-DD7C/
Run Code Online (Sandbox Code Playgroud)参考:
Badblocks 运行良好,但它不是为检测假闪存驱动器而设计的,并且可能不会为它们报告任何错误。