使用badblocks检测坏块
命令格式
badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数 [启始区块]]
典型的命令如下
# 写测试, 数据安全 sudo badblocks -n -b 4096 -c 16 -s /dev/sda -o hda-badblocks-list # 写测试, 不保留数据 sudo badblocks -w -b 4096 -c 16 -s /dev/sda -o hda-badblocks-list # 从中途继续检测 sudo badblocks -w -b 4096 -c 16 -s /dev/sda -o hda-badblocks-list 122096645 15110746
使用较大的-c能加快检测速度, 但是在大于某个数值之后, 速度就不再变化了.
1 2 3 4 5 6 7 | $ sudo badblocks -wsv -b 4096 -c 1024 /dev/sdc2 Checking for bad blocks in read -write mode From block 0 to 488345599 Testing with pattern 0xaa: done Reading and comparing: done Testing with pattern 0x55: done Reading and comparing: 2.50%, 5:12 elapsed. (0 /0/0 errors) |
实际测试了一块通过USB3连接的ST2000LM003, 测一轮(0xaa)的时间需要10个小时
1 2 3 4 5 6 | $ sudo badblocks -wsv -b 4096 -c 1024 /dev/sdc2 Checking for bad blocks in read -write mode From block 0 to 488345599 Testing with pattern 0xaa: done Reading and comparing: done Testing with pattern 0x55: 14.60% done , 11:32:20 elapsed. (0 /0/0 errors) |
各参数的含义:
-b block-size
以字节为单位, 指定区块的大小, 注意这是指每次的读(写)大小, 修改并不影响总的读(写)量
-c number of blocks
每一次检测区块的数目。默认值是16。增加这个数目可以增加检测 坏块 的效率可同时也会增加内存的耗费。 Badblocks 命令在只读模式下需要花费与每一次检测的区块相同数目的内存容量。在读写模式下,这个比例是两倍而在非破坏性的读写模式下,这个比例是三倍。 如果你将参数“num-of-blocks”设置太大的话, badblocks 将会在分派缓存时会因为一个内存溢出错误而立即退出。当然如果你在非破坏性的读写模式下将该值设置得过低,那么在一个不稳定的磁盘上的有问题 的区块也许会因为磁盘的磁道缓冲的作用而不被检测出来。
-f
正常情况下,badblocks命令不会在一个已经激活的设备上读写模式或者是非破坏性的读写模式的检测,因为这可能会导致系统的崩溃。 使用 -f 标志可以使这种情况强制执行,但是最好不要在正常的情况下使用它。如果/etc/mtab文件发生了错误,而设备实际上并没有被激活的时候,这个 参数才会是安全的。
-i input_file
读入一个已知的坏块列表。 Badblocks 命令将会跳过对这些已知是坏块的区块检查。如果 input_file 参数是“-”,则列表从标准输入读入。 在这个列表中列举出的区块也会在 新的 坏道记录文件或者坏道记录输出时被忽略掉。 dumpe2fs(8) 的 -b 选项能够在一个已有的文件系统中得到被标记为坏块的列表,而且已经做成了符合这个选项的格式。
-o output_file
将坏块的列表写到指定的文件中。如果没有这个选项, badblocks 命令会在标准输出中输出这个列表。其格式是与 e2fsck(8) 或者 mke2fs(8). 的 -l 选项的要求相适应的。
-p num_passes
重复的扫描磁盘,直到重复“num_passes”遍磁盘扫描后也没有发现新的区块后结束。 默认值是0。表示 badblocks 命令成功执行一遍扫描后就会结束。
-n
使用非破坏性的读写模式。默认值是非破坏性的只读模式测试。这个选项不能与 -w 选项一起使用,因为它们是互斥的。
-s
通过输出正在被检测的区块的号码以表示检测进程。
-v
混杂模式检测。
-w
使用写模式测试. 这个参数会破坏硬盘上的原有数据. 通过使用这个选项 badblocks 通过往每个区块上写入一些特定的字符(0xaa,0x55,0xff,0x00),读出来后再比较其内容,决定是否为坏块。 这个选项不能与 -n 选项一起使用,因为它们是互斥的。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程