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
的输出将被提供给e2fsck
或mke2fs
程序,正确指定块大小是很重要的,因为生成的块数非常依赖于文件系统使用的块大小。出于这个原因,强烈建议用户不要直接运行badblocks,而是使用e2fsck
和mke2fs
程序的-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
注意:END
和START
是结束和开始的块的编号