使用 smartctl
如果 /var/log/messages 中有多个 I/O 错误,或者只是怀疑硬盘可能出现故障,smartctl 可以成为检查它们的有用工具。
聪明的。
代表自我监控、分析和报告技术。
我们必须启用 S.M.A.R.T.使用前在 BIOS 中支持。
接下来,安装运行 /usr/sbin/smartctl 所需的包。
在 Red Hat Enterprise Linux 中,它由 smartmontools 包提供。
- 验证硬盘是否支持 S.M.A.R.T. :
# smartctl -i /dev/xxx
使用本文中概述的命令时,将 /dev/xxx 替换为感兴趣的硬盘。
- 对于 SATA 驱动器使用:
# smartctl -i -d ata /dev/xxx
- 启用 S.M.A.R.T.支持:
# smartctl -s on /dev/xxx ### For SCSI Disks # smartctl -s on -d ata /dev/xxx ### for SATA Disks
- 以 root 身份运行以下命令可以是一个快速的 PASS/FAIL 测试,但下面讨论的更彻底的测试通常更具有决定性:
# smartctl -H /dev/xxx
在后台运行 smartctl
要开始后台测试,请以 root 身份运行以下命令:
# smartctl -t long /dev/xxx
要访问结果,请使用以下命令:
# smartctl -a /dev/xxx
要了解有关可与 smartctl 一起使用的各种选项的更多信息,请查看命令的手册页:
# man smartctl
硬盘可能会出现意外故障,最好保留所有重要数据的最新备份。
请记住,即使检测到当前或者即将发生的故障,也可能没有足够的时间来备份数据。
以下是几种可用于在 CentOS/RHEL 中识别坏块或者磁盘错误的方法。
使用 badblocks 命令
我们还可以使用“badblocks”命令来检查磁盘设备上的坏块。
“badblocks”命令在隔离 Linux 中同步 LVM 分区的问题时非常有用。
LVM 操作将因磁盘上的坏块而失败。
LVM 镜像中源磁盘或者目标磁盘上的坏块将导致同步失败。
Badblocks 也可以与 fsck 和 makefs 结合使用以将块标记为坏块。
如果将坏块的输出提供给 e2fsck 或者 mke2fs 程序,正确指定块大小很重要,因为生成的块编号非常依赖于文件系统使用的块大小。
为此,强烈建议用户不要直接运行坏块,而是使用 e2fsck 和 mke2fs 程序的 -c 选项。
警告:这些命令的误用可能会导致数据丢失。
使用“man badblocks”命令可以获得关于命令“badblocks”的添加信息。
- 使用磁盘检查工具badblocks逐块扫描指定的硬盘。
例如,要扫描 /dev/sdd 执行命令:
# mount | grep sdd # find all mounted partitions of sdd # umount /dev/sdd1 # unmount the partitions (may be more then one) # badblocks -n -vv /dev/sdd
其中 -n 是使用非破坏性读写模式。
默认情况下只进行非破坏性只读测试。
注意:切勿在包含现有文件系统的设备上使用 -w 选项。
此选项会擦除数据!如果需要在现有文件系统上执行写模式测试,请改用 -n 选项。
它较慢,但会保留数据。
- 如果在运行坏块后在 /var/log/messages 或者控制台中出现与以下示例类似的消息,建议备份受影响设备上的所有数据并更换设备:
Apr 4 13:50:40 test kernel: sdd: dma_intr: status=0x51 { DriveReady SeekComplete Error } Apr 4 13:50:40 test kernel: sdd: dma_intr: error=0x40 { UncorrectableError }, LBAsect=74367249, sector=74367232 Apr 4 13:50:40 test kernel: ide: failed opcode was: unknown Apr 4 13:50:40 test kernel: end_request: I/O error, dev sdd, sector 74367232 Apr 4 13:50:42 test kernel: sdd: dma_intr: status=0x51 { DriveReady SeekComplete Error } Apr 4 13:50:42 test kernel: sdd: dma_intr: error=0x40 { UncorrectableError }, LBAsect=74367249, sector=74367240 Apr 4 13:50:42 test kernel: ide: failed opcode was: unknown Apr 4 13:50:42 test kernel: end_request: I/O error, dev sdd, sector 74367240 Apr 4 13:50:44 test kernel: sdd: dma_intr: status=0x51 { DriveReady SeekComplete Error }
- 下面的命令会将找到的坏块转储到输出文件:badblocks.log。
# badblocks -v -o badblocks.log /dev/sdd