共用方式為


資料損毀和磁碟錯誤疑難排解指導

數據損毀和磁碟錯誤涵蓋不同的領域,例如存取磁碟驅動器、磁碟驅動器損毀和效能緩慢的問題。

下列事件識別碼指出資料損毀或磁碟錯誤:

  • 事件識別碼 153

    已重試磁碟 2 邏輯區塊位址123456的 IO 作業。

  • 事件識別碼 129

    重設為裝置 \Device\RaidPort1 已發出。

  • 事件識別碼 157

    磁碟 2 已意外移除。

  • 事件標識碼 55

    磁碟上的文件系統結構已損毀且無法使用。 請在磁碟區上執行chkdsk公用程式。

  • 事件標識碼 98

    磁碟區 C: (\Device\HarddiskVolume3) 必須脫機,才能執行完整 Chkdsk。 請透過命令行在本機執行 「CHKDSK /F」,或透過 PowerShell 在本機或遠端執行 「REPAIR-VOLUME <drive:>」。

疑難排解檢查清單

注意

本文說明必須在提升許可權的命令提示字元中執行命令。

  • 在系統事件記錄檔中,搜尋 New Technology File System (NTFS) 和磁碟相關的警告和錯誤。 例如,事件 ID 55、153 或 98。

  • 執行 chkdsk /scan 命令並檢查結果。

    注意

    此命令 chkdsk /scan 是唯讀的。

  • 執行下列命令來查詢磁碟機以了解 NTFS 特定的磁碟區資訊:

    fsutil fsinfo ntfsinfo <rootpath>:

    注意

    佔位元 <根路徑> 代表根磁碟驅動器的驅動器號。

  • 執行 fsutil dirty query <volumepath>: 命令來檢查磁碟區是否已變更。

    注意

    佔位元 <volumepath> 代表驅動器號。

    • 對於檔案系統為 NTFS 的磁碟區,如果磁碟區已變更,請執行 chkdsk /f /r 命令。 chkdsk /F /R 命令需要停機,因為無法存取磁碟。

    • 對於檔案系統為復原檔案系統 (ReFS) 的磁碟區,磁碟損毀將會自動修復。

  • 如果 "chkdsk" 公用程式無法修正磁碟錯誤,請從備份執行還原。

  • 執行儲存體驗證,以檢查是否存在任何儲存體相關的錯誤。

  • 從叢集中移除磁碟,並檢查作業系統層級。

  • 在記錄了該事件的所有磁碟區上執行 chkdsk /f 命令。

  • 更新第三方儲存體驅動程式或韌體。

如果問題仍然存在,請嘗試下列方法:

  • 解除安裝任何第三方磁碟管理軟體 (例如 Diskeeper)。

  • 移除或更新篩選驅動程式。

  • 聯繫硬體廠商並執行硬體診斷,以避免發生任何硬體問題的可能性。

  • 連絡儲存體廠商,以檢查多重路徑設定。

  • 更新 SCSI 連接埠或 RAID 控制器驅動程式。

  • 切換至不同類型的驅動程式。 例如,RAID 控制器驅動程式或整合型驅動程式。

  • 更新主機 Bud 配接器 (HBA) 驅動程式。

  • 更新裝置特定模組 (DSM) 的多重路徑驅動程式。

  • 更新 HBA 韌體。

疑難解答事件標識碼 153

事件 ID 153 表示儲存子系統發生錯誤。 事件 ID 153 類似於事件 ID 129,二者的不同之處在於,當 Storport 驅動程式對磁碟的要求逾時時,會記錄事件 ID 129,而當 Storport 迷你連接埠驅動程式對磁碟的請求逾時時,會記錄事件 ID 153。 迷你埠驅動程式也可以稱為適配卡驅動程式或 HBA 驅動程式,通常是由硬體廠商所撰寫。

如果記錄事件標識碼 153 或事件標識碼 129,磁碟 I/O 逾時是常見的原因,因為記憶體控制器無法處理負載。 在此情況下,I/O 作業逾時,而迷你埠驅動程式(來自廠商)會將訊息傳回至 Storport 驅動程式(堆棧中的最後一個Microsoft記憶體驅動程式)。 然後,Storport 驅動程式會轉譯資訊,並在 事件檢視器 中記錄事件。

因為迷你埠驅動程式有足夠的要求執行環境知識,因此有些迷你埠驅動程式會自行時間要求,而不是讓 Storport 驅動程式處理要求計時。 迷你埠驅動程式可以中止個別的要求並傳回錯誤,而 Storport 驅動程式會在逾時後重設磁碟驅動器。 重設磁碟驅動器對 I/O 子系統造成干擾,如果只有一個要求逾時,可能不需要。迷你埠驅動程式會將錯誤傳回類別驅動程式,以記錄事件標識碼 153 並重試要求。

以下是事件識別碼 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 狀態為 00SCSISTAT_GOOD)、SRB 狀態為 09SRB_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_TIMEOUTSRB_STATUS_COMMAND_TIMEOUT) 表示要求在配接器中逾時。 要求已傳送至磁碟驅動器,且逾時期間內沒有回應。

  • 總線重設錯誤 (SRB_STATUS_BUS_RESET) 表示裝置已重設,且要求因重設而重試,因為磁碟驅動器收到重設時會中止所有不完整的要求。

系統管理員必須確認磁碟子系統的健康情況。 雖然偶爾逾時可能是系統正常作業的一部分,但頻繁的重試要求表示應修正的記憶體效能問題。

其他相關資訊

因為問題通常不在操作系統之外,請檢查下列常見原因:

  • 已設定某種類型的節流,例如 I/O 限制。 有時候,VMware 中的記憶體 I/O 控制項會造成此問題。

  • 具有相同記憶體控制器負載過多的磁碟驅動器。 因此,磁碟驅動器必須在不同的控制器之間分割。

  • 如果已設定 Multipath I/O (MPIO),單一纜線或損毀的 NIC 可能會導致 iSCSI 問題。

疑難解答事件標識碼 129

事件 ID 129 會以儲存裝置介面卡 (HBA) 驅動程式的名稱作為來源進行記錄。 Storport 驅動程式 (Storport.sys) 會在偵測到要求逾時時記錄此事件。HBA 驅動程式的名稱用於 事件中,因為它是與 Storport 驅動程式相關聯的迷你埠驅動程式。

以下是事件識別碼 129 的範例:

Event Type:       Warning
Event Source:     <HBA_Name>
Event Category:   None
Event ID:         129
Computer:         <Computer_Name>
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 驅動程式記錄事件標識碼 129 時,Storport 驅動程式必須嘗試重設單位來採取更正動作。 重設單位時,所有不完整的要求都會完成併發生錯誤,並重試。 清除擱置佇列時,定時器會設定為 -1,這是初始值。

每個 SRB 都會設定一個計時器值。 要求完成時,佇列定時器會以清單前端的SRB逾時值重新整理。

事件標識碼 129 最常見的原因是沒有回應的 LUN 或已卸除的要求。 卸除的要求可能是因為儲存設備局域網路上的故障路由器或其他硬體問題所造成。

疑難解答事件標識碼 157

此事件表示 Classpnp.sys 驅動程式已收到非卸除磁碟的隨插即用管理員 (PNP) 的意外移除要求。

此問題最常在中斷系統與磁碟的通訊時發生,例如SAN網狀架構錯誤或SCSI總線問題。 錯誤也可能由失敗的磁碟所造成,或使用者在執行系統時拔除磁碟時。 在此情況下,系統管理員必須確認磁碟子系統的熱身。

疑難解答事件標識碼 55 和 98

如果記錄事件標識碼 55、50、140 和 98 等 NTFS 事件,您必須執行 “chkdsk” 公用程式。

由於 NTFS 無法將資料寫入交易記錄,因此這可能會影響 NTFS 停止或復原無法寫入交易資料的作業的能力。

以下是事件識別碼 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.

通常,當文件系統損毀發生時,會記錄事件標識碼 55。 當發生下列一或多個問題時,就會發生文件系統損毀:

  • 磁碟有錯誤的扇區。

  • 文件系統傳遞至磁碟子系統的 I/O 要求未順利完成。

大部分的問題都與硬體有關,而且硬體可能會意外損毀。 您可以嘗試下列方法來修正問題:

  • 更新 SCSI 連接埠或 RAID 控制器驅動程式。

  • 移除或更新篩選驅動程式。

  • 更新第三方儲存體驅動程式或韌體。

  • 切換至不同類型的驅動程式。 例如,RAID 控制器驅動程式或整合型驅動程式。

  • 將硬體重新排列成各種組合。

協力廠商資訊免責聲明

本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。