江苏省吴江市双板桥路3号兴源网络

0512-63028342

ly@wjxy.net.cn

用badblocks检测硬盘坏道

badblocks -sv /dev/sdb
badblocks -svw /dev/sdc1(慎用,会丢数据)
badblocks -b 4096 -c 16 /dev/hda1 -o hda-badblocks-list
fsck.ext3 -l /tmp/hda-badblock-list.final /dev/hda1

由于系统在运行时谁也说不准啥时候硬盘或者是电源会有问题、所以死机可能是难免的情况(不管是硬件还是软件)。现在我们知道文件系统运行时会有硬盘与内存数据异步的状况发生,因此莫名其妙的死机非常可能导致文件系统的错乱。如果文件系统真的发生错乱的话,那该如何是好?此时那个好用的fsck就能拿来仔细分析一下了。

 1 fsck [-t 文件系统类型] [-ACay] 设备名称
 2 参数:
 3 -t:指定文件系统类型,通常不需要。
 4 -A:依据/etc/fstab的内容,将需要的设备扫描一次。通常开机过程中就会执行此命令。
 5 -a:自动修复检查到的有问题的扇区,所以你不用一直按Y。
 6 -y:与-a类似,但是某些文件系统不支持-y这个参数。
 7 -C:可以在检验的过程当中使用一个直方图来显示目前的进度。
 8 
 9 EXT3/EXT2 的额外参数功能:(e2fsck这支命令所提供)
10 -f:强制检查,一般来说,如果fsck没有发现任何unclean的标志,不会主动进入细化检查的,如果你想要强制fsck进入细化检查,就得加上-f标志。
11 -D:针对文件系统下的目录进行优化配置。
12 
13 范例:强制将新建的/dev/xvdb1这个设备检查一下。
14 [root@iZ255cppmtxZ data]# umount /dev/xvdb1
15 [root@iZ255cppmtxZ data]# fsck -C -f -t ext4 /dev/xvdb1
16 fsck from util-linux 2.23.2
17 e2fsck 1.42.9 (28-Dec-2013)
18 Pass 1: Checking inodes, blocks, and sizes
19 Pass 2: Checking directory structure                                           
20 Pass 3: Checking directory connectivity
21 Pass 4: Checking reference counts
22 Pass 5: Checking group summary information
23 /dev/xvdb1: 11/1966080 files (0.0% non-contiguous), 167409/7864064 blocks       


注意:通常只有身为root且你的文件系统有问题的时候才使用这个命令,否则在正常状况下使用此命令,可能会造成对文件系统的危害。

刚才谈到的fsck是用来检验文件系统是否出错,至于badblocks则是用来检查硬盘或软盘扇区有没有坏道的命令

 1 badblocks -[svw] 设备名称
 2 参数:
 3 -s:在屏幕上列出进度;
 4 -v:可以在屏幕上看到进度;
 5 -w:使用写入的方式来测试,建议不要使用此参数,尤其是待检查的设备已有的文件时;
 6 
 7 [root@iZ255cppmtxZ data]# fsck -C -f -t ext4 /dev/xvdb1
 8 fsck from util-linux 2.23.2
 9 e2fsck 1.42.9 (28-Dec-2013)
10 Pass 1: Checking inodes, blocks, and sizes
11 Pass 2: Checking directory structure                                           
12 Pass 3: Checking directory connectivity
13 Pass 4: Checking reference counts
14 Pass 5: Checking group summary information
15 /dev/xvdb1: 11/1966080 files (0.0% non-contiguous), 167409/7864064 blocks       
16 [root@iZ255cppmtxZ data]# badblocks -sv /dev/xvdb1
17 Checking blocks 0 to 31456255
18 Checking for bad blocks (read-only test): q^Hdone                                                 
19 Pass completed, 0 bad blocks found. (0/0/0 errors)

转载于:https://www.cnblogs.com/liuyisai/p/5329872.html


badblocks使用格式为:Shell

1badblocks [ -svwnf ] [ -b block-size ] [ -c blocks_at_once ] [ -i input_file ] [ -o output_file ] [ -p num_passes ] [ -t test_pattern ] device [ last-block ] [ start-block ]

参数含义是:

-b blocksize
指定磁盘的区块大小,单位为字节,默认值为“block 4K ”(4K/block)
-c blocksize
每个区块检查的次数,默认是16次
-f
强制在一个已经挂载的设备上执行读写或非破坏性的写测试操作
(我们建议先umount设备,然后再进行坏道检测。仅当/etc/mtab出现误报设备挂载错误的时候可以使用该选项)
-i file
跳过已经显示在file文件中的坏道,而不进行检测(可以避免重复检测)
-o file
把检测结果输出到file文件
-p number
重复搜寻设备,直到在指定通过次数内都没有找到新的坏块位置,默认次数为0
-s
在检查时显示进度
-t pattern
通过按指定的模式读写来检测区块。你可以指定一个0到ULONG_MAX-1的十进制正值,或使用random(随机)。
如果你指定多个模式,badblocks将使用第一个模式检测所有的区块,然后再使用下一个模式检测所有的区块。
Read-only方式仅接受一个模式,它不能接受random模式的。
-v
执行时显示详细的信息
-w
对每个区块都先写入,然后再从它读取信息
[device]
指定要检查的磁盘装置。
[last-block]
指定磁盘装置的区块总数。
[start-block]
指定要从哪个区块开始检查

二、示例
badblocks以4096的一个block,每一个block检查16次,将结果输出到“hda-badblocks-list”文件里Shell

1# badblocks -b 4096 -c 16 /dev/hda1 -o hda-badblocks-list

“hda-badblocks-list”是个文本文件,内容如下:
引用Shell

123456789# cat hda-badblocks-list5124951250512515125351254……61245……

可以针对可疑的区块多做几次操作。下面,badblocks以4096字节为一个“block”,每一个“block”检查1次, 将结果输出到“hda-badblocks-list.1”文件中,由第51000 block开始,到63000 block结束Shell

1# badblocks -b 4096 -c 1 /dev/hda1 -o hda-badblocks-list.1 63000 51000

这次花费的时间比较短,硬盘在指定的情况下在很短的时间就产生“嘎嘎嘎嘎”的响声。由于检查条件的不同,其输出的结果也不完全是相同的。重复几次同样的操作,因条件多少都有些不同,所以结果也有所不同。进行多次操作后,直到产生最后的hda-badblock-list.final文件。

三、其他
1、fsck使用badblocks的信息
badblocks只会在日志文件中标记出坏道的信息,但若希望在检测磁盘时也能跳过这些坏块不检测,可以使用fsck的-l参数:Shell

1# fsck.ext3 -l /tmp/hda-badblock-list.final /dev/hda1

2、在创建文件系统前检测坏道
badblocks可以随e2fsck和mke2fs的-c删除一起运行(对ext3文件系统也一样),在创建文件系统前就先检测坏道信息:Shell

1# mkfs.ext3 -c /dev/hda1

代码表示使用-c在创建文件系统前检查坏道的硬盘。
这个操作已经很清楚地告知我们可以采用“mkfs.ext3 -c”选项用“read-only”方式检查硬盘。这个命令会在格式化硬盘时检查硬盘,并标出错误的硬盘“block”。用这个方法格式化硬盘,需要有相当大的耐心,因为命令运行后,会一个个用读的方式检查硬盘。

发表评论

电子邮件地址不会被公开。 必填项已用*标注