排查数据损坏和磁盘错误的指南 您所在的位置:网站首页 电脑显示磁盘损坏请在卷c上运行chkdsk工具 排查数据损坏和磁盘错误的指南

排查数据损坏和磁盘错误的指南

2024-07-17 11:53| 来源: 网络整理| 查看: 265

数据损坏和磁盘错误故障排除指南 项目03/22/2024

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

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

事件 ID 153

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

事件 ID 129

已重置到设备 \Device\RaidPort1。

事件 ID 157

磁盘 2 已意外删除。

事件 ID 55

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

事件 ID 98

卷 C: (\Device\HarddiskVolume3) 需要脱机才能执行 Full 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) 驱动程序 (主机 Bud 适配器。

(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 命令 (28SCSIOP_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。 请求完成后,微型端口驱动程序将使用 参数调用 函数NotificationType,StorPortNotification()并将值设置为 RequestComplete,以及指向已完成的 SRB 的指针。

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

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

HKLM\System\CurrentControlSet\Services\Disk\TimeOutValue

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

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

每个 SRB 都有一个计时器值集。 请求完成后,队列计时器将刷新,其超时值是列表的头端的 SRB。

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

排查事件 ID 157 问题

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

当系统与磁盘通信中断(例如 SAN 构造错误或 SCSI 总线问题)时,通常会出现此问题。 这些错误也可能由磁盘故障或用户在系统运行时拔出磁盘时引起。 在这种情况下,管理员需要验证磁盘子系统的运行状况。

事件 ID 55 和 98 疑难解答

如果记录了事件 ID 55、50、140 和 98 等 NTFS 事件,则需要运行“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 实验室设备网 版权所有