Linux使用badblocks扫描&屏蔽硬盘坏道
前言
最近从pdd上入手了10多片拆机硬盘,都是250gb的hdd,到手以后用crystal diskinfo看了下参数,fujitsu(富士通)硬盘,sata150速率,生产日期2009。
这些硬盘应该都是从联想笔记本电脑上拆下来的,pdd商家没有做格式化只直接卖给了我这样的捡垃圾爱好者,所以在这十多片硬盘里我看到了好多原用户的各种资料,很多cad图纸、cmmb项目计划、家人旅游照片、小孩满月照片、结婚照等等,最离谱的是竟然还有gv/av。
翻阅别人的隐私内容肯定是不正确的,在正式开始扫描硬盘坏道之前,对这些硬盘做了简单格式化。
下面开始简单记录下处理硬盘坏道吧。
扫描坏道
首先用badblocks扫描硬盘,常用参数
- -b, 指定磁盘区块大小,单位byte,理解为最小扫描单位
- -o,指定扫描结果的输出路径
- -s,检查时显示进度
- -v,检查时显示详细的信息
- -w,检查时执行有破坏性的写入测试,注意这个操作会破坏硬盘上的数据,请提前做好数据备份
- -n,检查时执行没有破坏性的写入测试
一般情况下只需要以下命令即可,默认检查区块大小是4096bytes。注意,无论是-w
还是-n
,写入测试都会非常非常非常的耗时,建议只用默认的读测试扫出坏块以后再针对坏块做写测试。
badblocks -sv -o badblocks.log /dev/sda
如果想要指定检查区块大小,做到每一个sector应检尽检,可以用-b
指定区块大小
badblocks -sv -b 512 -o badblocks.log /dev/sda
想要知道自己的硬盘的区块大小,可以用fdisk
查看
fdisk -l /dev/sda
在输出结果中可以看到硬盘的区块大小是多少
屏蔽坏道
扫描结束以后,再用e2fsck把坏道屏蔽。
e2fsck -l badblocks.log /dev/sda
这个方案比较软
,就是把扫描出来的坏道数据添加到文件系统的黑名单里,适合硬盘上已经有数据的情况。
还有个方案比较硬
,用badblocks往指定范围的区块上写入数据,写入失败时硬盘会自动重新映射,这个方案适合硬盘上没有数据的情况。
badblocks -wsv /dev/sda [END] [START]
注意[END]
是结束区块编号,[START]
是开始区块编号。
一键扫描+屏蔽
工具e2fsck
也支持硬盘坏道的扫描 + 屏蔽,命令如下
e2fsck -vc /dev/sda
参数释义:
- v,显示结果
- c,扫描坏道&屏蔽坏道
命令中可以有两个c
,是因为archwiki的文章中提到,一个c是只有读测试,两个c是非破坏性的读&写测试(咦怎么让我想到了氧气姐,氧原子它是一个O…)
所以上面这条命令就等于
badblocks -sv /dev/sda & e2fsck -l $ /dev/sda