数据损坏和磁盘错误疑难解答指南

您所在的位置:网站首页 发生内部系统错误请参考windows 数据损坏和磁盘错误疑难解答指南

数据损坏和磁盘错误疑难解答指南

2023-11-24 00:47| 来源: 网络整理| 查看: 265

数据损坏和磁盘错误疑难解答指南 项目 07/17/2023

数据损坏和磁盘错误涉及不同的领域,例如有关访问驱动器、驱动器损坏和性能缓慢的问题。

以下事件 ID 指示存在数据损坏或磁盘错误:

事件 ID 153

重试了磁盘 2 的逻辑块地址123456的 IO 操作。

事件 ID 129

已发布“重置到设备”\Device\RaidPort1。

事件 ID 157

磁盘 2 已意外删除。

事件 ID 55

磁盘上的文件系统结构已损坏且不可用。 请在卷上运行 chkdsk 实用工具。

事件 ID 98

卷 C: (\Device\HarddiskVolume3) 需要脱机才能执行完整 Chkdsk。 请通过命令行在本地运行“CHKDSK /F”,或通过 PowerShell 在本地或远程运行“REPAIR-VOLUME ”。

疑难解答清单

注意

本文介绍需要在提升的命令提示符下运行的命令。

在系统事件日志中,搜索新技术文件系统 (NTFS) 和磁盘相关的警告和错误。 例如,事件 ID 55、153 或 98。

运行命令 chkdsk /scan 并检查结果。

注意

该 chkdsk /scan 命令是只读的。

运行以下命令,查询特定于 NTFS 的卷信息的驱动器:

fsutil fsinfo ntfsinfo :

注意

占位符 表示根驱动器的驱动器号。

运行命令 fsutil dirty query : 以检查卷是否为脏。

注意

占位符 表示驱动器号。

对于文件系统为 NTFS 的卷,如果卷是脏的,请运行 chkdsk /f /r 该命令。 该 chkdsk /F /R 命令需要停机,因为无法访问磁盘。

对于文件系统为弹性文件系统 (ReFS) 的卷,将自动修复磁盘损坏。

如果“chkdsk”实用工具未修复磁盘错误,请从备份执行还原。

运行存储验证以检查是否有与存储相关的错误。

从群集中删除磁盘并检查操作系统级别。

在 chkdsk /f 记录事件的所有卷上运行该命令。

更新第三方存储驱动程序或固件。

如果问题仍然存在,请尝试以下方法:

卸载管理软件 (的任何第三方磁盘,例如 Diskeeper) 。

删除或更新筛选器驱动程序。

请联系硬件供应商并运行硬件诊断,以避免出现任何硬件问题。

与存储供应商联系以检查多路径配置。

更新 SCSI 端口或 RAID 控制器驱动程序。

切换到不同类型的驱动程序。 例如,RAID 控制器驱动程序或整体驱动程序。

更新主机芽适配器 (HBA) 驱动程序。

更新特定于设备的模块的多路径驱动程序 (DSM) 。

更新 HBA 固件。

事件 ID 153 疑难解答

事件 ID 153 指示存储子系统出错。 事件 ID 153 类似于事件 ID 129,但不同的是,当 Storport 驱动程序超时向磁盘发出请求时记录事件 ID 129,当 Storport 微型端口驱动程序超时请求时记录事件 ID 153。 微型端口驱动程序也可称为适配器驱动程序或 HBA 驱动程序,通常由硬件供应商编写。

如果记录事件 ID 153 或事件 ID 129,则磁盘 I/O 超时是常见原因,因为存储控制器无法处理负载。 在这种情况下,I/O 操作超时,小端口驱动程序从供应商 () 将消息发送回 Storport 驱动程序 (堆栈) 中的最后一个 Microsoft 存储驱动程序。 然后,Storport 驱动程序将翻译信息并记录事件查看器中的事件。

由于微型端口驱动程序对请求执行环境有足够了解,因此一些小型端口驱动程序会自行计时请求,而不是让 Storport 驱动程序处理请求计时。 微型端口驱动程序可以中止单个请求并返回错误,而 Storport 驱动程序会在超时后重置驱动器。 重置驱动器会中断 I/O 子系统,如果只有一个请求超时,则可能没有必要。微型端口驱动程序将错误返回给记录事件 ID 153 并重试请求的类驱动程序。

下面是事件 ID 153 的示例:

Log Name: System Source: disk Event ID: 153 Level: Warning Description: The IO operation at logical block address 123456 for Disk 2 was retried.

此事件指示请求失败,并且已由类驱动程序重试。 在这种情况下没有记录错误消息,因为 Storport 驱动程序没有超时请求。 由于没有错误的证据,在排查磁盘错误时,缺少消息会导致混淆。

在事件日志的 “详细 信息”选项卡上,详细信息显示导致重试的错误,以及请求是读取还是写入请求。 例如:

0000: 0004010F 002C0003 00000000 80040099 0010: 00000000 00000000 00000000 00000000 0020: 00000000 00000000 28090000 in bytes 0000: 0F 01 04 00 03 00 2C 00 ......,. 0008: 00 00 00 00 99 00 04 80 ...... 0010: 00 00 00 00 00 00 00 00 ........ 0018: 00 00 00 00 00 00 00 00 ........ 0020: 00 00 00 00 00 00 00 00 ........ 0028: 00 00 09 28 ...*

在此示例中,字节偏移 29 量显示 SCSI 状态,字节偏移 30 量显示导致重试的 SCSI 请求块 (SRB) 状态,字节偏移 31 量显示正在重试的 SCSI 命令。 在这种情况下,SCSI 状态 00 (SCSISTAT_GOOD) ,SRB 状态 09 () SRB_STATUS_TIMEOUT ,SCSI 命令 28 (SCSIOP_READ) 。

以下是最常见的 SCSI 命令:

SCSIOP_READ - 0x28 SCSIOP_WRITE - 0x2A

有关 SCSI 操作和状态的列表,请参阅 scsi.h 。

以下是最常见的 SRB 状态:

SRB_STATUS_TIMEOUT - 0x09 SRB_STATUS_BUS_RESET - 0x0E SRB_STATUS_COMMAND_TIMEOUT - 0x0B

有关 SRB 状态的列表,请参阅 srb.h 。

注意

超时错误 (SRB_STATUS_TIMEOUT 或 SRB_STATUS_COMMAND_TIMEOUT) 指示在适配器中超时请求。 请求已发送到驱动器,超时期间内没有响应。

总线重置错误 (SRB_STATUS_BUS_RESET) 指示设备已重置,并且由于重置而重试请求,因为当驱动器收到重置时,所有不完整的请求都将中止。

管理员需要验证磁盘子系统的运行状况。 尽管偶尔超时可能是系统正常运行的一部分,但频繁的重试请求表明存储的性能问题应得到修复。

更多信息

由于问题通常不在操作系统之外,请检查以下常见原因:

配置了某些类型的限制,例如 I/O 限制。 有时,VMware 中的存储 I/O 控制会导致此问题。

负载过多的驱动器位于同一存储控制器上。 因此,驱动器需要在不同的控制器之间拆分。

如果配置了多路径 I/O (MPIO) ,则单条电缆或损坏的 NIC 可能会导致 iSCSI 出现问题。

事件 ID 129 疑难解答

事件 ID 129 使用存储适配器 (HBA) 驱动程序名称作为源进行记录。 Storport 驱动程序 (Storport.sys) 检测到请求超时时记录此事件。HBA 驱动程序的名称在事件中使用,因为它是与 Storport 驱动程序关联的微型端口驱动程序。

下面是事件 ID 129 的示例:

Event Type: Warning Event Source: Event Category: None Event ID: 129 Computer: Description: Reset to device, \Device\RaidPort1, was issued. 有关 Windows I/O 堆栈体系结构的信息

Windows I/O 操作使用分层体系结构,其中设备驱动程序位于设备堆栈上。 在基本模型中,堆栈的顶部是文件系统。 接下来是卷管理器,后跟磁盘驱动程序。 端口和微型端口驱动程序位于设备堆栈的底部。 当 I/O 请求到达文件系统时,它会获取文件的块号,并将其转换为卷中的偏移量。 然后,卷管理器将卷偏移量转换为磁盘上的块号,并将请求传递给磁盘驱动程序。 当请求到达磁盘驱动程序时,它将创建命令描述符块 (CDB) 并将其发送到 SCSI 设备。 磁盘驱动程序将 CDB 嵌入到 SCSI_REQUEST_BLOCK (SRB) 结构中。 此 SRB 作为 I/O 请求数据包 (IRP) 的一部分发送到端口驱动程序。

端口驱动程序执行大部分请求处理。 有不同的端口驱动程序,具体取决于体系结构。 例如,ATA 端口驱动程序 (Ataport.sys) ,SCSI 端口驱动程序 (Storport.sys) 。 下面是端口驱动程序的一些职责:

为请求提供计时服务

强制执行队列深度以确保设备的请求数不超过它所能处理的请求数

为数据缓冲区生成“散点”和“收集”数组

端口驱动程序与微型端口驱动程序接口,微型端口驱动程序由硬件供应商设计,用于处理特定适配器。 它负责从端口驱动程序获取请求并将其发送到目标逻辑单元号 (LUN) 。 端口驱动程序调用函 HwStorStartIo() 数将请求发送到微型端口驱动程序,而微型端口驱动程序会将请求发送到 HBA 驱动程序,以便通过物理介质 (光纤或以太网) 发送到 LUN。 请求完成后,微型端口驱动程序将调 StorPortNotification() 用 NotificationType 具有值设置为 RequestComplete的参数的函数,以及指向已完成 SRB 的指针。

将请求发送到微型端口驱动程序时,Storport 驱动程序会将请求置于挂起的队列中,并且该请求已定时。 完成请求后,将从此队列中删除该请求。

计时机制很简单。 每个逻辑单元有一个计时器,并已初始化为 -1。 将第一个请求发送到微型端口驱动程序时,计时器设置为 SRB 中的超时值。 磁盘超时值是位于以下注册表项下的可调整参数:

HKLM\System\CurrentControlSet\Services\Disk\TimeOutValue

一些硬件供应商将优化此值,以最匹配其硬件。 如果没有存储供应商的指导,请勿更改此值。

计时器每秒递减一次。 完成请求后,将使用挂起队列中头请求的超时值刷新计时器。 因此,只要请求完成,计时器将永远不会转到零。 如果计时器变为零,则表示设备已停止响应。 例如,当 Storport 驱动程序记录事件 ID 129 时,Storport 驱动程序必须通过尝试重置单元来采取纠正措施。 重置单元时,所有不完整的请求都将完成并出现错误,并且会重试这些请求。 清除挂起的队列时,计时器设置为 -1初始值。

每个 SRB 都设置了计时器值。 请求完成后,将使用列表头处 SRB 的超时值刷新队列计时器。

事件 ID 129 的最常见原因是无响应的 LUN 或删除的请求。 删除的请求可能是由于 SSAN) 存储区域网络 (上的路由器故障或其他硬件问题造成的。

事件 ID 157 疑难解答

此事件指示 Classpnp.sys 驱动程序已收到来自插件和播放管理器的意外删除请求, (非可移动磁盘的 PNP) 。

当某些问题中断系统与磁盘的通信(例如 SAN 结构错误或 SCSI 总线问题)时,通常会出现此问题。 错误还可能是由于磁盘失败或用户在系统运行时拔下磁盘而导致的。 在这种情况下,管理员需要验证磁盘子系统的恢复。

事件 ID 55 和 98 疑难解答

如果记录了 NTFS 事件(如事件 ID 55、50、140 和 98),则需要运行“chkdsk”实用工具。

由于 NTFS 无法将数据写入事务日志,这可能会影响 NTFS 停止或回滚无法写入事务数据的操作的能力。

下面是事件 ID 55 的示例:

Event Type: Error Event Source: NTFS Event ID: 55 Description: The file system structure on the disk is corrupt and unusable. Please run the chkdsk utility on the volume.

通常,在发生文件系统损坏时记录事件 ID 55。 发生以下一个或多个问题时,会发生文件系统损坏:

磁盘具有不良的扇区。

文件系统向磁盘子系统传递的 I/O 请求未成功完成。

大多数问题都与硬件相关,硬件可能会意外损坏。 可以尝试以下方法来解决这些问题:

更新 SCSI 端口或 RAID 控制器驱动程序。

删除或更新筛选器驱动程序。

更新第三方存储驱动程序或固件。

切换到不同类型的驱动程序。 例如,RAID 控制器驱动程序或整体驱动程序。

将硬件重新排列为各种组合。

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3