Linux badblocks 命令

Linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。本文主要介绍Linux badblocks 命令。

1、命令简介

badblocks就是一个检查磁盘装置中损坏区块的命令,执行该命令时只须指定所要检查的磁盘装置,及此装置的磁盘区块数。

2、命令用法

badblocks [ -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 ]

3、命令描述

badblocks用于搜索设备(通常是磁盘分区)上的坏块。device是与设备对应的特殊文件(例如/dev/hdc1)。last-block是要检查的最后一个块;如果没有指定,设备上的最后一个块将作为默认值。start-block是一个可选参数,指定测试的起始块号,它允许测试从磁盘的中间开始。如果没有指定,则默认使用磁盘上的第一个块。

重要注意:如果badblock的输出将被提供给e2fsckmke2fs程序,正确指定块大小是很重要的,因为生成的块数非常依赖于文件系统使用的块大小。出于这个原因,强烈建议用户不要直接运行badblocks,而是使用e2fsckmke2fs程序的-c选项。

4、命令选项

选项

描述

-b block-size

 

以字节为单位指定块的大小。

默认值为1024。

-c number of blocks

 

为每次测试的块数。

默认值是64。

-f

通常情况下,

坏块将拒绝对挂载的设备进行读/写或非破坏性测试,

因为这两者都可能导致系统潜在的崩溃和/或损坏文件系统,

即使它是只读挂载的。

可以使用-f标志来覆盖它,

但几乎不应该使用它,

如果认为自己比badblocks要程序聪明,

那么几乎肯定不是。

只有当/etc/mtab文件不正确,

并且设备真的没有挂载时,

这个选项才可以安全使用。

-i input_file

 

读取已经存在的已知坏块列表。

坏块将跳过测试这些块,

因为它们是已知的坏块。

如果将input_file指定为"-",

则将从标准输入读取列表。

在这个列表中列出的块

将从标准输出或输出文件中产生的新坏块列表中删除。

dumpe2fs(8)的-b选项

可用于检索现有文件系统上当前标记为bad的块列表,

其格式适合与该选项一起使用。

-o output_file

 

将坏块列表写入指定的文件。

如果没有此选项,

badblocks将在其标准输出中显示列表。

此文件的格式适合e2fsck(8)

或mke2fs(8)中的-l选项使用。

-p num_passes

 

重复扫描磁盘,

直到在num_passes对磁盘的连续扫描中没有发现新块。

默认值为0,

意味着badblocks将在第一次传递后退出。

-t test_pattern

 

指定要读(和写)到磁盘块的测试模式。

test_pattern可以是0

和ULONG_MAX-1之间的数字值,

也可以是单词"random",

它指定块应该用一个随机的位模式填充。

对于读/写(-w)和非破坏性(-n)模式,

可以通过为每个所需的测试模式指定-t选项

来指定一个或多个测试模式。

对于只读模式,只能指定一个模式,

而且它可能不是"random"。

使用模式的只读测试假设指定的模式

以前已经写入磁盘—如果不是,

大量块将无法通过验证。

如果指定了多个模式,

那么在继续下一个模式之前,

将使用一个模式测试所有块。

-n

使用非破坏性读写模式。

默认情况下,

只进行非破坏性的只读测试。

该选项不能与-w选项组合,

因为它们是互斥的。

-s

显示扫描的进度,

写出被检查的块号。

-v

详细的模式。

-w

使用写模式测试。

使用这个选项,

badblocks通过在设备的每个块上

写入一些模式(0xaa, 0x55, 0xff, 0x00)来扫描坏块,

读取每个块并比较内容。

这个选项不能与-n选项组合使用,

因为它们是互斥的。

注意:不要在包含已有文件系统的设备上使用-w选项。这个选项会擦除数据!如果您想在现有的文件系统上执行写模式测试,请使用-n选项。它速度较慢,但可以保存您的数据。

5、使用示例

1)通过命令扫描硬盘

# badblocks -s -v /dev/sdnx

其中n表示硬盘设备名,x表示硬盘对应的分区号,例如,需要检查”/dev/sda2″:

2)检测坏区块,并记录

# badblocks -b 4096 -o /root/sda1.bad /dev/sda1

3)扫描硬盘的损坏扇区或区块并写入到临时文件

# badblocks -v -o /dev/sdb > /tmp/bad-blocks.txt

4)硬盘坏道修复

如·找到了坏道,可以进行写入扫描进行修复。写入扫描遇到坏道的时会自动重映射。写入扫描会覆盖原有数据,所以需要先备份。写入扫描速度很低,所以应该只扫描只读扫描时候发现错误的部分:

# badblocks -w -s /dev/sdb END START

注意ENDSTART是结束和开始的块的编号

推荐阅读
cjavapy编程之路首页