因为盘片旋转速度非常快,且磁头与盘片距离非常近(头发丝的千分之一),如果剧烈震动或者外力冲击,甚至电压不稳,均有可能导致磁头与高速旋转的盘片产生物理接触,造成不可修复性物理损坏。
当您的磁盘:
在读取某一文件或运行某一程序时,硬盘反复读盘且出错,提示文件损坏等信息,或者要经过很长时间才能成功;有时甚至会出现死机;
io wait 无故增高或居高不下;
硬盘声音突然由原来正常的摩擦音变成了怪音;
系统无法正常启动,出现“IO error”等提示信息;
mkfs时,到某一进度停止不前,最后报错,无法完成;
每次系统开机都会自动运行fsck扫描磁盘错误;
对硬盘执行FDISK时,到某一进度会反复进进退退;
如果您的磁盘出现如上状况,您就需要及时对磁盘进行坏道检测以测试磁盘可用性,并立即备份数据。
  对磁盘进行read-only检测:
1
sudo badblocks -s -v /dev/sd*
因为需要对磁盘进行检测,所以速度非常缓慢,在检测过程中注意不要断电,不要对硬盘进行任何操作,不要移除硬盘,不要物理损伤,不要震动等。
检测过程可以中途终止,也可以指定区块重新开始。
1
sudo badblock -s -v /dev/sd* last start
如果您检测完成后看到
Pass completed, 0 bad blocks found.
那么恭喜,此磁盘通过测试,没有坏道(坏块)。您可以放心使用。
磁盘有坏道了……
但是,如果您检测过程中再某一个区块停滞不前,而后报告中提示有坏块,那么杯具了……您的磁盘有坏道了。
不论是什么类型的坏道,均建议您首先进行数据备份!把重要数据进行备份然后再尝试修复。如果您有重要数据却无法读取(磁盘出现异常),那么请立即停止使用此磁盘并找专业人员进行修复。
坏道的修复/屏蔽
常见坏道分为以下几种类型:
逻辑坏道
0磁道损坏
物理坏道
坏道一般以单独或者组合形式出现。
逻辑坏道修复:
1
fsck -a /dev/sd*
就这么简单。
更多fsck用法您可以查看这里或者查看man手册。
0磁道损坏修复:
使用1磁道代替零磁道(操作危险需谨慎)
大致流程就是全盘格式化,然后重新分区,编辑分区表使用1磁道,从而复活硬盘。
操作手册(1,2,3)
物理坏道
物理坏道没有修复可能性,只能进行屏蔽。
如果您已经进行了坏道检测,那么您肯定已经知道坏道(坏块)大致位置以及坏块大小,您需要:
备份硬盘数据
删除所有硬盘分区
根据坏块位置以及大小,估算出所占空间(例如共100个区块,磁盘大小为100g,20-30损坏,则坏块在20-30g这个区间)
进行分区(接上:分区应为 0-15|15-35|35-100,中间的15-35g为有坏道的分区。要对有坏道的分区进行扩容处理,数值不要过小,以免坏道被分到其他分区。)
隔离15-35g这个分区(即不挂载,不读写,不操作)
您的磁盘可用空间减少,但是剩余空间均可用(坏道已经屏蔽)
由于物理坏道具有扩散性,所以建议尽早让磁盘“退休”才是……
分区表修复工具
如果您的分区表已经被损坏,建议使用testdisk进行修复。他可以快速回复分区表,真的非常好用(修复我的硬盘n次!利器也~)
安装
1
sudo apt-get install -y testdisk
基本用法(1,2)
珍爱磁盘,爱护数据
磁盘有价,数据无价
不要等磁盘出现问题了才想到数据还没有备份;不到等论文丢了才想起来明天就要交;不要等rm了才想起来把重要文件删除了。备份数据并不是多么困难,也不需要多少时间,所以请您及时备份,保护无价的数据吧!
  磁盘在长期的运行中,难免会出现坏道,在机房里运行的linux服务器更是不例外,下面介绍下linux如何修复磁盘坏道,提醒注意,一定要将服务器或电脑断网,停止别的工作后,进行此操作。
电脑硬盘出现坏道后,如果不及时更换或进行技术处理,坏道就会越来越多,并会造成频繁死机和数据丢失。硬盘出现坏道最好对 硬盘进行重新分区,把坏道部分单独分成一个区,并把它隐藏起来。在Linux下硬盘坏道有两种修复方法,下面我将介绍比较这两种方法,它们是在ext2文 件格式下修改的,也同样适用ext3格式,因为ext3只不过是ext2+journal。
  修复方法一
  为了检查坏道,可以使用mkfs.ext2的命令,带上参数-C用只读的方式检查硬盘。我们使用man命令查看“mkfs.ext2”需要带上的参数,输入下面命令:
  #man mkfs.ext2
  由其结果可以看到显示“mkfs.ext2”可以支持的功能和参数。
  #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
sata上用
mkfs.ext2 -c /dev/sda1
  修复方法二
  根据经验,坏道通常会波及到其它的区域,尤其是邻近的“block”。此外还有些“block”会有以下的情况:读写16次中有一两次会出现读写错误的情况。类似这种要坏不坏的情况具体修复方法如下,先输入下面命令:
  # man badblocks
  查看一下badblocks所带的参数,由结果可以看到显示“badblocks”可以支持的功能和参数。
  NAME
badblocks - search a device for bad blocks
badblocks [ -svwnf ] [ -b block-size ]
[ -c blocks_at_once ] [ -i input_file ]
[ -o output_file ] [ -p num_passes ] device [ last-block ] [ start-block ]
-b block-size
-c number of blocks
……
  上面的说明中表明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
  结果可以看到显示“mkfs.ext2 ”可以支持的功能和参数。
  NAME mke2fs - create an ext2/3 filesystem
……
  mkfs.ext2是用来创建一个ext2/3系统文件。
  总结
  以上介绍的是Linux下硬盘有了坏道的解决方法,希望这些方法能给大家带来帮忙。
  硬盘有了坏道,如果不是因为老化问题,则说明平时在使用上有不妥之处,比如对硬盘过分频繁地整理碎片、内存太少以致应用软件对硬盘频频访问等,而忽略对硬 盘的防尘处理也会导致硬盘磁头因为定位困难引发机械故障。另外,对CPU超频引起外频增高,迫使硬盘长时间在过高的电压下工作,也会引发故障。所以,平时 对硬盘的使用还应以谨慎操作为上策。
  Linux操作系统相比Windows要复杂得多,修复硬盘的方法及技巧绝不仅限与此,本文只是抛砖引玉,希望广大电脑爱好者能更好地熟悉Lnux环境下硬盘。