Linux服务器磁盘坏道的修复过程.md
服务器硬盘相比其他部件是较容易坏的,如突然断电、大量频繁写入都会加速硬盘的老化,下面介绍一些判断硬盘状况和修复的方法。
发现硬盘坏道
dmesg
当有硬盘坏道时,通常在dmesg输出的信息中会有 Buffer I/O Error,所以经常检查dmesg的输出可以及时发现是否存在硬盘问题。
badblocks
badblocks 可以用来检查硬盘是否有坏道,也可以修复坏道,但仅限于逻辑坏道,物理坏道只能更换硬盘。
检查命令:
badblocks -s -v -o /root/bb.log /dev/sda
以上命令检查/dev/sda 整块盘的坏道,结果写入/root/bb.log,输出结果为坏道块号。
当然也可以针对分区单独检查,先使用df -h查看分区,例如:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 50G 26G 22G 55% /
tmpfs 16G 68K 16G 1% /dev/shm
/dev/sda1 485M 39M 421M 9% /boot
/dev/mapper/VolGroup-lv_home 760G 252G 471G 35% /home
若单独检查 /home 是否有坏道,则命令如下:
badblocks -s -v -o /root/bb-home.log /dev/mapper/VolGroup-lv_home
硬盘坏道类型
硬盘坏道分为物理坏道和逻辑坏道。
物理坏道就是硬盘实体有坏的地方,物理坏道推荐换硬盘,当然也有办法重新分区来隔离坏道,不过可能也用不久,所以不推荐。
逻辑坏道是磁盘磁道上面的校验信息(ECC)跟磁道的数据对不上号所致。出现这一故障的原因,通常都是因为一些程序的错误操作或是该处扇区的磁介质开始出现不稳定的先兆。物理坏道也是逻辑坏道产生的一种原因。
修复磁盘坏道
首先,当检测出坏道之后首先要看下服务器磁盘的灯有没有报警,一般的服务器都有硬盘报警灯,灯显示红色说明磁盘不工作了,这个明显是物理性故障问题,需要更换磁盘。
其次,若硬盘灯没有报警,或已经换了硬盘,但检查仍然有坏道,此时可能是逻辑坏道,需要尝试修复,若能修复说明确实是逻辑坏道,若修复不了说明是物理坏道。
逻辑坏道修复方式
仍然要用到badblocks,下面举例来说明。
假设下面是badblocks在/dev/mapper/VolGroup-lv_home分区检查出的坏道列表:
217874591
217874592
217874593
217874594
217874595
- 先备份数据(可选)
若修复的硬盘或分区的重要数据已备份,此部分可以省略
dd if=/dev/mapper/VolGroup-lv_home skip=217874591 of=/tmp/217874591-217874595.dat count=5
- 修复
硬盘在使用时不能修复,否则可能存在写并发的问题,所以修复前需要umount对应分区(若为系统所在分区就没办法在线修复了,因为无法umount)。
umount /dev/mapper/VolGroup-lv_home
但umount可能出现"Device busy"的错误,是因为有程序在使用这个分区,需要将这些进程都关闭。那么怎么知道哪些进程占用分区呢?使用fuser(命令如下),其中/home是分区对应的挂载目录。
fuser -m /home
fuser -m -v -i -k /home
第一条fuser命令列出使用/home的进程ID,第二条列出PID并kill掉进程(带有提示确认),建议先使用第一条命令列出PID,然后针对查看是哪些类型的进程,不要盲目杀死进程。
umount 分区成功后,修复命令如下,其中-s表示给出进度,-w表示写入修复的,后面是结束(END)和开始(START)块号,注意END在前,START在后。
badblocks -s -w /dev/mapper/VolGroup-lv_home 217874595 217874591
修复后再重新检查下
badblocks -s -v /dev/mapper/VolGroup-lv_home 217874595 217874591
- 恢复数据(可选)
dd if=/tmp/217874591-217874595.dat of=/dev/mapper/VolGroup-lv_home
- 重新分区检查
badblocks -s -v -o /root/bb-home.log /dev/mapper/VolGroup-lv_home
若没有坏道说明修复已完成,若有坏道可以尝试重复以上方法。
完成后重新mount分区
mount /dev/mapper/VolGroup-lv_home /home
硬盘使用的一些建议
硬RAID还是要有的
硬件RAID服务器自带,性能比软件RAID要高。根据对数据的安全性、硬盘大小,存储性能来评估该选择的RAID类型,常用的RAID类型如下:
RAID0:存储性能(读写效率)最高,连续的数据分散到多个磁盘上存储,提高并发访问。
RAID1:数据安全性高,即同样的数据在另一块盘上备份一份,硬盘的容量也就减少一半。
RAID5:兼具RAID0和RAID1的优点。存储性能大于RAID1,小于RAID0;数据安全性大于RAID0,小于RAID1。
读写频繁的操作不要放在/分区
/ 分区是存放系统程序的,一般也比较小,读写频繁的日志不要放在根分区,这样损坏起码不会影响系统的稳定性。