#615 在 Linux 上发现和修复硬件 I/O 错误(磁盘错误)

iconRemoved User在 2021-12-20 下午3:07 编写
  编辑(登录)
  收藏
  响应调查   响应调查

  主题

介绍

以下内容旨在作为示例和参考指南,以帮助发现来自硬件的磁盘输入/输出错误何时给备份代理造成问题,备份控制台和 PCS 日志中显示的错误消息略有不同。硬件磁盘错误的存在不仅是创建备份的问题——它可能对客户机器的稳定性和可操作性构成隐藏但显著的危险,并且很容易导致数据丢失——所以及时发现这些错误是可能的至关重要的。

问题现象

备份控制台中的错误消息

中文日志:
备份失败并显示“常见 I/O 错误”。
备份失败并显示“无法读取卷的快照”。

英文日志:
Backup fails with "Common I/O error."
Backup fails with "Cannot read the snapshot of the volume."

mms 和/或 pcs 日志中的错误消息:

中文日志:
------------------------
错误代码:21561347
字段:{"$module":"disk_bundle_lxa64_26077"}
消息:备份失败。
------------------------
错误代码:66596
字段:{"$module":"disk_bundle_lxa64_26077"}
消息:未能提交操作。
------------------------
错误代码:458755
字段:{"$module":"disk_bundle_lxa64_26077"}
消息:读取错误。
------------------------
错误代码:5832708
字段:{"$module":"disk_bundle_lxa64_26077","device":"/dev/mapper/ pve-root"}
消息:无法读取卷的快照。

英文日志:
------------------------
Error code: 21561347
Fields: {"$module":"disk_bundle_lxa64_26077"}
Message: Backup has failed.
------------------------
Error code: 66596
Fields: {"$module":"disk_bundle_lxa64_26077"}
Message: Failed to commit operations.
------------------------
Error code: 458755
Fields: {"$module":"disk_bundle_lxa64_26077"}
Message: Read error.
------------------------
Error code: 5832708
Fields: {"$module":"disk_bundle_lxa64_26077","device":"/dev/mapper/pve-root"}
Message: Cannot read the snapshot of the volume.
------------------------

Linux 内核日志中的错误消息(/var/log/messages 文件,dmesg 命令的输出):
下面列出了一些与 I/O 相关的错误示例,此列表并非详尽无遗。

中文日志:
[11692891.711007] session_stat(service_process,27775):psize = 116916224通过PSTRT□= 0 mshft = 0的ioctl = 24172 
[11692891.711008] session_stat(service_process,27775):bhpgs = 0 bhcnt = 0 abhs = 22742 fbhs = 22742 dbhs = 0 
[11692891.711009] session_stat(service_process,27775): gpgs=8683 ppgs=8683 emmax=7943 emmin=7447 emcur=0 cached=0 
[11692891.711010] session_stat(service_process,27775): rblk=8161bclk=5rcbclk1blk145 rwcolls = 10 
[11692891.711011] session_stat(service_process,27775):同步= 0异步= 161 aretr = 0 MIPR = 0 iprcnt = 0 
[11692891.711012] session_stat(service_process,27775):姆比奥= 0 ioctlcnt = 24172 ioctlpid = 24171 
[11692891.711013] session_stat(service_process,27775): rccalls=1455710 maxrcdepth=26 rcdepthcnts=(0, 0, 0, 0)
[11692891.775953] ata3.00:异常Emask为0x0 SACT 0x70000007 SERR为0x0动作为0x0 
[11692891.776527] ata3.00:irq_stat 0x40000008 
[11692891.777085] ata3.00:失败的命令:READ FPDMA QUEUED
[11692891.777612] ata3.00:在cmd 60/40: e0:80:7a:a1/05:00:01:00:00/40 tag 28 ncq dma 688128 in 
                           res 41/40:00:28:7b:a1/00:00:01:00:00/00 Emask 0x409(媒体错误)<F> 
[11692891.778671] ata3.00:状态:{ DRDY ERR }
[11692891.779250] ata3.00:错误:{ UNC } 
[11692891.785051] 21692891.785051] 为 216100050050050051 配置为
28391616161616339161DMA。 :0:0:0: [sdc] tag#28 FAILED 结果:hostbyte=DID_OK driverbyte=DRIVER_SENSE
[11692891.785095] sd 2:0:0:0: [sdc] tag#28 Sense Key : Medium Error [current]  
[11692891.785106] sd 2:0:0:0: [sdc] tag#28 添加。感觉:未恢复的读取错误 - 自动重新分配失败
[11692891.785109] sd 2:0:0:0: [sdc] tag#28 CDB: Read(10) 28 00 01 a1 7a 80 00 05 40 00 
[11692891.785109] O 错误,dev sdc,扇区 27360040 标志 4000 
[11692891.785665] ata3:EH 完成
.....

11779259.062858] ata3.00: irq_stat 0x40000008 
[11779259.063390] ata3.00: 失败的命令:读取 FPDMA
队列 [11779259.063922]:/000000000008: 80000000008: 8000000008:000000000 /40 tag 3 ncq dma 4096 in 
                           res 41/40:00:04:21:f0/00:00:00:00:00/00 Emask 0x409 (media error) <F> 
[11779259.064989] ata3.00: status: { DRDY ERR }
[11779259.065563] ata3.00: 错误: { UNC } 
[11779259.071309] ata3.00: 配置为 UDMA/133 
[11779259.071326] sd 2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 =DID_OK driverbyte=DRIVER_SENSE 
[11779259.071330] sd 2:0:0:0: [sdc] tag#3 Sense Key : Medium Error [current] 
[11779259.071332] sd 2:0:0:0: [sdc] tag#3 添加。Sense:未恢复的读取错误 - 自动重新分配失败
[11779259.071336] sd 2:0:0:0: [sdc] tag#3 CDB: Read(10) 28 00 00 f0 21 00 00 00 08 00 
[117.7792339] O错误,偏差SDC,部门15737092个旗0 
[11779259.071923] ATA3:EH完整
[11779286.228963] ata3.00:异常Emask为0x0 SACT 0x10000的塞尔为0x0行动为0x0 
[11779286.229834] ata3.00:irq_stat 0x40000008 
[11779286.230396] ata3.00:失败命令:读取 FPDMA 队列

....

11779292.509443] ata3.00:状态:{ DRDY } 
[11779292.510016] ata3.00:失败的命令:WRITE FPDMA QUEUED
[11779292.510595] ata3.00::805c:60a700/700:80c:6100: 00:00/40 tag 14 ncq dma 4096 out 
                           res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x1(设备错误)
[11779292.511730]:ata3.00:状态{ DRDY } 
[11779292.512298] ata3.00:命令失败:WRITE FPDMA QUEUED
[11779292.512858] ata3.00:cmd 61/08:78:38:d7:7b/00:00:010540 dma 4096 out 
                           res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x1(设备错误)

....

[11692891.785110] print_req_error:I/O 错误,dev sdc,sector 27360040 标志 4000 
[11759183.206085] print_req_error:I/O 错误,dev sdc,sector 157360921317s 错误标志
I/O 错误,dev sdc,扇区 27360040 标志 40004040000000000000000000000000D 0 
[11759211.728279] print_req_error:I/O 错误,dev sdc,扇区 27360040 标志 4000 
[11779259.071339] print_req_error:I/O 错误,dev sdc,扇区 15737092

英文日志:
[11692891.711007] session_stat(service_process,27775): psize=116916224 pstrt=0 mshft=0 ioctls=24172
[11692891.711008] session_stat(service_process,27775): bhpgs=0 bhcnt=0 abhs=22742 fbhs=22742 dbhs=0
[11692891.711009] session_stat(service_process,27775): gpgs=8683 ppgs=8683 emmax=7943 emmin=7447 emcur=0 cached=0
[11692891.711010] session_stat(service_process,27775): rblk=1455488 cblk=161 rcblk=161 rc2blk=0 mcblk=143 rwcolls=10
[11692891.711011] session_stat(service_process,27775): sync=0 async=161 aretr=0 mipr=0 iprcnt=0
[11692891.711012] session_stat(service_process,27775): mbio=0 ioctlcnt=24172 ioctlpid=24171
[11692891.711013] session_stat(service_process,27775): rccalls=1455710 maxrcdepth=26 rcdepthcnts=(0, 0, 0, 0)
[11692891.775953] ata3.00: exception Emask 0x0 SAct 0x70000007 SErr 0x0 action 0x0
[11692891.776527] ata3.00: irq_stat 0x40000008
[11692891.777085] ata3.00: failed command: READ FPDMA QUEUED
[11692891.777612] ata3.00: cmd 60/40:e0:80:7a:a1/05:00:01:00:00/40 tag 28 ncq dma 688128 in
                           res 41/40:00:28:7b:a1/00:00:01:00:00/00 Emask 0x409 (media error) <F>
[11692891.778671] ata3.00: status: { DRDY ERR }
[11692891.779250] ata3.00: error: { UNC }
[11692891.785051] ata3.00: configured for UDMA/133
[11692891.785092] sd 2:0:0:0: [sdc] tag#28 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[11692891.785095] sd 2:0:0:0: [sdc] tag#28 Sense Key : Medium Error [current] 
[11692891.785106] sd 2:0:0:0: [sdc] tag#28 Add. Sense: Unrecovered read error - auto reallocate failed
[11692891.785109] sd 2:0:0:0: [sdc] tag#28 CDB: Read(10) 28 00 01 a1 7a 80 00 05 40 00
[11692891.785110] print_req_error: I/O error, dev sdc, sector 27360040 flags 4000
[11692891.785665] ata3: EH complete
.....

11779259.062858] ata3.00: irq_stat 0x40000008
[11779259.063390] ata3.00: failed command: READ FPDMA QUEUED
[11779259.063922] ata3.00: cmd 60/08:18:00:21:f0/00:00:00:00:00/40 tag 3 ncq dma 4096 in
                           res 41/40:00:04:21:f0/00:00:00:00:00/00 Emask 0x409 (media error) <F>
[11779259.064989] ata3.00: status: { DRDY ERR }
[11779259.065563] ata3.00: error: { UNC }
[11779259.071309] ata3.00: configured for UDMA/133
[11779259.071326] sd 2:0:0:0: [sdc] tag#3 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[11779259.071330] sd 2:0:0:0: [sdc] tag#3 Sense Key : Medium Error [current] 
[11779259.071332] sd 2:0:0:0: [sdc] tag#3 Add. Sense: Unrecovered read error - auto reallocate failed
[11779259.071336] sd 2:0:0:0: [sdc] tag#3 CDB: Read(10) 28 00 00 f0 21 00 00 00 08 00
[11779259.071339] print_req_error: I/O error, dev sdc, sector 15737092 flags 0
[11779259.071923] ata3: EH complete
[11779286.228963] ata3.00: exception Emask 0x0 SAct 0x10000 SErr 0x0 action 0x0
[11779286.229834] ata3.00: irq_stat 0x40000008
[11779286.230396] ata3.00: failed command: READ FPDMA QUEUED

....

11779292.509443] ata3.00: status: { DRDY }
[11779292.510016] ata3.00: failed command: WRITE FPDMA QUEUED
[11779292.510595] ata3.00: cmd 61/08:70:58:cf:7b/00:00:0a:00:00/40 tag 14 ncq dma 4096 out
                           res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x1 (device error)
[11779292.511730] ata3.00: status: { DRDY }
[11779292.512298] ata3.00: failed command: WRITE FPDMA QUEUED
[11779292.512858] ata3.00: cmd 61/08:78:38:d7:7b/00:00:0a:00:00/40 tag 15 ncq dma 4096 out
                           res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x1 (device error)

....

[11692891.785110] print_req_error: I/O error, dev sdc, sector 27360040 flags 4000
[11759183.206085] print_req_error: I/O error, dev sdc, sector 15736888 flags 0
[11759210.632331] print_req_error: I/O error, dev sdc, sector 27360040 flags 0
[11759211.728279] print_req_error: I/O error, dev sdc, sector 27360040 flags 4000
[11779259.071339] print_req_error: I/O error, dev sdc, sector 15737092 flags 0

要查找的关键字

描述问题的原因

解决方法

虽然磁盘、输入输出和存储子系统错误取决于多种因素(例如 Linux 内核的版本、存储控制器和存储附件的确切类型——其中一些看起来略有不同,例如虚拟磁盘)管理程序内部使用,或者如果磁盘/卷通过 iSCSI 或光纤通道连接),则需要查找多个字符串/消息和模式:
中文:

  • ata x.yz ... DRDY
  • ata x.yz 命令失败
  • 写入 FPDMA 队列
  • 读取 FPDMA 队列
  • 打印请求错误
  • I/O 错误...<设备通常命名,例如 sda 或 sdb 或 sdc 磁盘 ID...> <通常提到无法读取/写入的扇区 NNNN>
  • 主机字节
  • 驱动字节
  • DRIVER_SENSE
  • 感应键:中等错误
  • 添加。感觉:未恢复的读取错误 - 自动重新分配失败
  • ata :EH 完成

英文:

  • ata x.yz ... DRDY
  • ata x.yz failed command
  • WRITE FPDMA QUEUED
  • READ FPDMA QUEUED
  • print_req_error
  • I/O error ... < sector(s) NNNN which cannot be read/written is usually mentioned>
  • hostbyte
  • driverbyte
  • DRIVER_SENSE
  • Sense Key : Medium Error
  • Add. Sense: Unrecovered read error - auto reallocate failed
  • ata : EH complete

对备份和/或恢复任务的影响

对备份和恢复任务的影响因操作失败、失败方式、失败是每次还是偶尔失败而异:例如,磁盘上的坏区或扇区可能并不总是永久坏——有时硬件本身可以在后台恢复/修复较轻的错误;有时,这些错误仅在不利的物理条件下发生,例如服务器/计算机/数据中心的过度振动。存储在有问题的磁盘扇区或区域中的内容很重要——某些包含关键 LVM 或文件系统元数据的部分,或操作系统引导加载程序和内核,或系统交换分区/文件/区域,通常比其他部分更重要。

如果问题较小,并且不影响关键区域,备份代理的引擎可能能够自动切换到逐个扇区模式:这可以通过备份计划中的选项进行控制。

然而,在实践中,在大多数情况下,I/O 错误严重到足以使逐扇区备份失败(总是或间歇性)。

备份创建活动在快照创建阶段受到 snapapi26 内核模块的影响,或者在从快照中实际读取数据以将其发送到备份期间。

当需要覆盖坏点中的数据时,将备份恢复到有问题的磁盘通常会失败,但如果 LVM ort FS 的关键元数据损坏/不可读/不可写,则可能会出现各种各样的错误和消息。

做什么(被动和主动)

  • 修复或更换故障硬件。
  • 修复/重新同步硬件或软件阵列(如果使用一个)。
  • 在检查整个磁盘表面(所有块)的模式下定期运行fsck。请参阅 Linux 联机帮助页 ( man fsck ),了解如何执行此操作。使用“坏块”Linux 实用程序。
  • 如果使用硬件或软件 RAID 解决方案,请将它们配置为定期清理或巡逻读取,以尽早检测坏/不稳定的扇区和磁盘。
  • 使用高级文件系统,如 ZFS 和 BTRFS,它们具有本机功能来检测和(如果配置正确)自我修复一些此类错误。
  • 足够频繁地进行整机备份。

关键要点

  • 当创建备份失败并出现快照错误、未指定的 I/O 错误、“无法读取...”错误和类似错误时,检查 Linux 内核日志(/var/log/messages文件、dmesg 输出)中的硬件错误通常很重要. 在这种情况下,内核日志比备份代理可以并且确实报告的相当高级(并且通常是通用的)错误消息要精确得多——毕竟它是一个用户空间应用程序,它并不总是“查看”也不解释 I/O 子系统的低级错误。
  • 如果硬件无法(可靠地)读取它,那么 Linux 内核/操作系统将无法读取它,那么备份代理将无法正确处理数据,因此备份将一直失败,直到硬件问题得到解决(最常见的是,直到损坏的磁盘、电缆或 HBA/RAID 卡/适配器卡被更换)。
  • 备份引擎并非设计为能够备份勉强运行/边缘存储硬件;它不是专门的数据恢复/磁盘修复软件工具。专门的数据恢复工具有时可以从非常不稳定的扇区中提取数据,使用专门的技术,例如重试无响应的扇区数十或数百次。

原文链接:https://kb.acronis.com/content/68046

 附加文件     - [0]


 添加评论