Linux badblocks 命令

Linux 命令大全

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

Linux 命令大全