Linux检测硬盘坏道 与 修复



 1, smartctl

监测你的硬盘 - 提前预报系统SMART

前言:

大家心理最怕的不是安装某个系统,而是辛辛苦苦安装之后,忽然有一天硬盘坏了,又没有备份(DAT,DLT之类磁带机贵得吓死人)。怎么样才能知道你的硬盘能否过新年呢?(硬盘状态如何?) 特别是如果能够提前预报,告诉大家硬盘快顶不住了,那该多好。

 

快速检查硬盘是否有问题

#smartctl -a /dev/ad0

表面测试

#smartctl -t long /dev/ad0

 

首先让我们看一下你的硬盘是否支持SMART:

bash-2.05b# smartctl -i /dev/sdb2

 

看看我的盘健康测试,如果你的self-assessment test result是FAILING,那就是说它要完蛋了,马上备份!!!

bash-2.05b# smartctl -Hc /dev/sdb2

=== START OF READ SMART DATA SECTION ===

SMART overall-healthself-assessment test result: FAILED!

Drive failure expected in less than 24 hours. SAVE ALL DATA.

Failed Attributes:

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE

  5 Reallocated_Sector_Ct   0x0033   001   001   036    Pre-fail  Always   FAILING_NOW 4095


 简单用法:

a、smartctl -a          检查该设备是否已经打开SMART技术。

b、smartctl -s on    如果没有打开SMART技术,使用该命令打开SMART技术。

c、smartctl -t short     后台检测硬盘,消耗时间短;

      smartctl -t long      后台检测硬盘,消耗时间长;

      smartctl -C -t short 前台检测硬盘,消耗时间短;

      smartctl -C -t long 前台检测硬盘,消耗时间长。

      其实就是利用硬盘SMART的自检程序。

d、smartctl -X 中断后台检测硬盘。

e、smartctl -l selftest 显示硬盘检测日志。

f、smartctl -l error 显示硬盘错误汇总。

 

 

2, 分区信息查看

尝试查看分区信息

#fdiks -l /dev/sdb

#parted /dev/sdb 

 

3, 使用fsck.ext3修复文件系统 

[leo@leo ~]$ sudo fsck.ext3 -a  /dev/sdb2

[leo@leo ~]$ sudo fsck -y  /dev/sdb2

[leo@leo ~]$ sudo fsck --help

[leo@leo ~]$ sudo fsck -p  /dev/sdb2

4, mkfs#man mkfs.ext2 mke2fs [ -c | -l filename ] [ -b block-size ] [ -f fragment-size ] [ -i -c在创建文件系统前检查坏道的硬盘,-b是block的大小,-f碎裂的大小。这个操作已经很清楚地告知我们可以采用 “mkfs.ext2 -c”选项用“read-only”方式检查硬盘。这个命令会在格式化硬盘时检查硬盘,并标出错误的硬盘“block”。用这个方法格式化硬盘,需要有相 当大的耐心,因为命令运行后,会一个个用读的方式检查硬盘。做法如下: # mkfs.ext2 -c /dev/hda1

5,man badblocks根据经验,坏道通常会波及到其它的区域,尤其是邻近的“block”。此外还有些“block”会有以下的情况:读写16次中有一两次会出现读写错误的情况。类似这种要坏不坏的情况具体修复方法如下,先输入下面命令: 
# man badblocks
查看一下badblocks所带的参数,由结果可以看到显示“badblocks”可以支持的功能和参数。 上面的说明中表明badblocks 检查寻找一个设备上的坏道;-b是block的大小,-c是检查的次数,-i输出文件,-o输入文件,-p是通过的数量。 硬 盘在格式化时会指定一个“block”的大小,默认值为“block 4K ”(4K/block)。“badblocks”在检查坏道时并不知道将来想要格式化时所指定的“block-size”,所以必须告知 “badblocks”硬盘的“block size”。 “-c number of blocks”是检查的次数,默认是16次。这样的命令需要耐心等待。

 

语法如下:
# badblocks -b 4096 -c 16 /dev/hda1 -o hda-badblocks-list
其中,“badblocks”以4096的一个block,每一个block检查16次,将结果输出到“hda-badblocks-list”文件里。 
“hda-badblocks-list”是个文本文件,内容如下: 
# cat hda-badblocks-list 
51249 
51250 51251 
51253 
51254 
……
61245 
……如果希望能找出可疑的“blocks”,并一起“mark”起来,可以针对可疑的区块多做几次操作: 
# badblocks -b 4096 -c 1 /dev/hda1 -o hda-badblocks-list.1 63000 51000
“badblocks” 以4096字节为一个“block”,每一个“block”检查1次, 将结果输出到“hda-badblocks-list.1”文件中,由第51000 block开始,到63000 block结束。这次花费的时间比较短,硬盘在指定的情况下在很短的时间就产生“嘎嘎嘎嘎”的响声。由于检查条件的不同,其输出的结果也不完全是相同的。 
# cat hda-badblocks-list.1 51248 
51250 
51251 
51253 
……
61243 
61245 
……
重复几次上述的操作,因条件多少都有些不同,所以结果也有所不同。进行多次操作后,产生了最后的“hda-badblock-list.final” ,最后要格式化硬盘。输入下面代码: 
#man mkfs.ext2



 1, smartctl

监测你的硬盘 - 提前预报系统SMART

前言:

大家心理最怕的不是安装某个系统,而是辛辛苦苦安装之后,忽然有一天硬盘坏了,又没有备份(DAT,DLT之类磁带机贵得吓死人)。怎么样才能知道你的硬盘能否过新年呢?(硬盘状态如何?) 特别是如果能够提前预报,告诉大家硬盘快顶不住了,那该多好。

 

快速检查硬盘是否有问题

#smartctl -a /dev/ad0

表面测试

#smartctl -t long /dev/ad0

 

首先让我们看一下你的硬盘是否支持SMART:

bash-2.05b# smartctl -i /dev/sdb2

 

看看我的盘健康测试,如果你的self-assessment test result是FAILING,那就是说它要完蛋了,马上备份!!!

bash-2.05b# smartctl -Hc /dev/sdb2

=== START OF READ SMART DATA SECTION ===

SMART overall-healthself-assessment test result: FAILED!

Drive failure expected in less than 24 hours. SAVE ALL DATA.

Failed Attributes:

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE

  5 Reallocated_Sector_Ct   0x0033   001   001   036    Pre-fail  Always   FAILING_NOW 4095


 简单用法:

a、smartctl -a          检查该设备是否已经打开SMART技术。

b、smartctl -s on    如果没有打开SMART技术,使用该命令打开SMART技术。

c、smartctl -t short     后台检测硬盘,消耗时间短;

      smartctl -t long      后台检测硬盘,消耗时间长;

      smartctl -C -t short 前台检测硬盘,消耗时间短;

      smartctl -C -t long 前台检测硬盘,消耗时间长。

      其实就是利用硬盘SMART的自检程序。

d、smartctl -X 中断后台检测硬盘。

e、smartctl -l selftest 显示硬盘检测日志。

f、smartctl -l error 显示硬盘错误汇总。

 

 

2, 分区信息查看

尝试查看分区信息

#fdiks -l /dev/sdb

#parted /dev/sdb 

 

3, 使用fsck.ext3修复文件系统 

[leo@leo ~]$ sudo fsck.ext3 -a  /dev/sdb2

[leo@leo ~]$ sudo fsck -y  /dev/sdb2

[leo@leo ~]$ sudo fsck --help

[leo@leo ~]$ sudo fsck -p  /dev/sdb2

4, mkfs#man mkfs.ext2 mke2fs [ -c | -l filename ] [ -b block-size ] [ -f fragment-size ] [ -i -c在创建文件系统前检查坏道的硬盘,-b是block的大小,-f碎裂的大小。这个操作已经很清楚地告知我们可以采用 “mkfs.ext2 -c”选项用“read-only”方式检查硬盘。这个命令会在格式化硬盘时检查硬盘,并标出错误的硬盘“block”。用这个方法格式化硬盘,需要有相 当大的耐心,因为命令运行后,会一个个用读的方式检查硬盘。做法如下: # mkfs.ext2 -c /dev/hda1

5,man badblocks根据经验,坏道通常会波及到其它的区域,尤其是邻近的“block”。此外还有些“block”会有以下的情况:读写16次中有一两次会出现读写错误的情况。类似这种要坏不坏的情况具体修复方法如下,先输入下面命令: 
# man badblocks
查看一下badblocks所带的参数,由结果可以看到显示“badblocks”可以支持的功能和参数。 上面的说明中表明badblocks 检查寻找一个设备上的坏道;-b是block的大小,-c是检查的次数,-i输出文件,-o输入文件,-p是通过的数量。 硬 盘在格式化时会指定一个“block”的大小,默认值为“block 4K ”(4K/block)。“badblocks”在检查坏道时并不知道将来想要格式化时所指定的“block-size”,所以必须告知 “badblocks”硬盘的“block size”。 “-c number of blocks”是检查的次数,默认是16次。这样的命令需要耐心等待。

 

语法如下:
# badblocks -b 4096 -c 16 /dev/hda1 -o hda-badblocks-list
其中,“badblocks”以4096的一个block,每一个block检查16次,将结果输出到“hda-badblocks-list”文件里。 
“hda-badblocks-list”是个文本文件,内容如下: 
# cat hda-badblocks-list 
51249 
51250 51251 
51253 
51254 
……
61245 
……如果希望能找出可疑的“blocks”,并一起“mark”起来,可以针对可疑的区块多做几次操作: 
# badblocks -b 4096 -c 1 /dev/hda1 -o hda-badblocks-list.1 63000 51000
“badblocks” 以4096字节为一个“block”,每一个“block”检查1次, 将结果输出到“hda-badblocks-list.1”文件中,由第51000 block开始,到63000 block结束。这次花费的时间比较短,硬盘在指定的情况下在很短的时间就产生“嘎嘎嘎嘎”的响声。由于检查条件的不同,其输出的结果也不完全是相同的。 
# cat hda-badblocks-list.1 51248 
51250 
51251 
51253 
……
61243 
61245 
……
重复几次上述的操作,因条件多少都有些不同,所以结果也有所不同。进行多次操作后,产生了最后的“hda-badblock-list.final” ,最后要格式化硬盘。输入下面代码: 
#man mkfs.ext2



你可能感兴趣的:(Linux检测硬盘坏道 与 修复)