Linux badblocks 命令
Linux badblocks命令用于检查磁盘装置中损坏的区块。
执行指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。
语法
badblocks [-svw][-b <区块大小>][-o <输出文件>][磁盘装置][磁盘区块数][启始区块]
参数说明:
-
-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 对每个区块都先写入,然后再从它读取信息
-
[磁盘装置] 指定要检查的磁盘装置。
-
[磁盘区块数] 指定磁盘装置的区块总数。
-
[启始区块] 指定要从哪个区块开始检查。
首先用 fdisk -l 参看一下硬盘情况
[root@iz8vbbxoyfcgyzkxcspg04z test]# fdisk -l
Disk /dev/vda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0008d73a
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 83884031 41940992 83 Linux
通过命令扫描硬盘。
# badblocks -s -v /dev/sdnx
其中n表示硬盘设备名,x表示硬盘对应的分区号。例如需要检查"/dev/sda2",执行命令如下:
# badblocks -s -v /dev/sda2
Checking blocks 0 to 30681000
Checking for bad blocks (read-only test): 306809600674112/ 306810000000
30680964
30680965
30680966
30680967
30680968
30680969
30680970
30680971
30680972
30680973
...
done
Pass completed, 37 bad blocks found.其中,“37 bad blocks found”表示硬盘存在37个坏块。
扫描硬盘的损坏扇区或区块
# badblocks -v /dev/sdb > /tmp/bad-blocks.txt
提示操作系统不要使用损坏区块存储
# e2fsck -l /tmp/bad-blocks.txt /dev/sdb
备注: 执行e2fsck命令前,需要先挂载设备
如果找到了坏道,可以进行写入扫描进行修复。写入扫描遇到坏道的时候会自动重映射。写入扫描会覆盖原有数据,所以请先备份。写入扫描速度很低,所以应该只扫描只读扫描时候发现错误的部分:
# badblocks -w -s /dev/sdb END START
将END和START换成结束和开始的块的编号就可以了。
想了解各选项的意思及更多用法,请man badblocks