欠陥のあるセクターがハードディスクのどこに保存されているのか疑問に思っていました。-ファイルシステムに依存しない領域にあるため、ハードディスクを同じ/異なるファイルシステムで再度フォーマットすると、不良として表示されますか?
デジタルsatPVRのハードディスクがバグのある動作を示していたので、これを尋ねます。HDをPCに接続しましたが、独自のファイルシステム(XTV)を使用しているため、NTFSでフォーマットし、CHKDSK/F/Rを発行しました。セクターを検証する:その結果、24のセクターが不良としてマークされました。
ディスクをアンマウントしてPVRに接続すると、ディスクはXTVファイルシステムで再初期化されました。
この時点で、不良としてマークされたセクターにはまだフラグが付けられているかどうか疑問に思います
ディスクの不良セクタはFileSystem independentです。
Platter上にあるSystemAreaと呼ばれる領域のディスクに格納され、ユーザー(O.S.など)のアクセス可能なセクターの前にある2つの不良セクターリストがあり、それらはディスク自体によって管理されます。それらの名前はP-ListとG-Listです。 P-Listは、欠陥のあるセクターによって製造およびテストされた後、ディスクに永続的に書き込まれるプライマリリストです。 G-Listは、オンザフライで管理および保守されるGrownListです。しばらくすると、セクターは磁気的に悪化する可能性があります。これは絶対に正常であるか、ECCエラーによって悪化する可能性があります。これらおよびその他のオンザフライの原因により、Gリストはあなたが見ることができる不良セクタを追跡します。もちろん、GリストとGリストのみを操作できるディスクツールもいくつかあります。 P-Listの内容を変更することはできません。
ファイルシステムは、不良セクタを追跡することもできます。これは、アクセス速度の考慮事項と考えることができます。そして、その追跡メカニズムは FS依存している、悲しいことに。「ああ、私のfsは不良セクタを正しく追跡し続けている」とは言えません。それ自体がfsです。実際の不良セクタと同期するために、ディスクフォーマットまたはディスクチェックを発行するときに、ディスクからG-Listを更新するかどうかはわかりません。
元の質問に戻ると、ファイルシステムはO.S.の最も洗練された部分の1つである必要があります。 XTVファイルシステムは、物理的な不良セクタの追跡を使用してそのシステムを実行する必要があります。
すでに24個の不良セクタがあるディスクでできる最善のことは、それを捨てて新しいものと交換することです(PVRが特定のディスクにロックされておらず、そのような交換を受け入れることを願っています)。ディスクが不良になり始めた場合、通常はプロセスが停止せず、すぐに数千の不良セクタまたは完全なディスク障害が発生します。または、ディスクが非常に遅くなり、PVRで使用すると記録または再生が壊れてしまう可能性があります。
あなたの質問については、CHKDSK /F /R
コマンドは、ファイルシステムレベルでのみ不良セクタをマークします。これらのセクタに関する情報はNTFS構造にのみ保存され、ディスクが再フォーマットされると失われます。これで、24個の読み取り不可能なセクターを持つディスクができましたが、PVRはそれについて何も知らず、喜んでそれらのセクターを使用しようとします。
ただし、ハードディスクは不良セクタの再マッピングを実行できます。ディスク自体に「GrownDefect List」が保存されており、不良セクタにアクセスする試みをスペアエリアにリダイレクトするために使用されます。この再マッピングは、特別な低レベルのユーティリティを使用する場合を除いて、コンピュータ(またはディスクを使用している他のデバイス)には表示されません。
再マッピングは通常、ディスクで読み取り不能として以前に観察されたセクターへの書き込みの試みによってトリガーされます。したがって、PVRは再フォーマット後にまだ書き込まれていないセクターを読み取ろうとすべきではなく、ディスクはそれらの24の不良セクターを認識しているため、問題を無視して最善を期待することができます( CHKDSK
test)であり、そこにデータが書き込まれたときにそれらを再マップする必要があります。もちろん、これは、他のいくつかのセクターが後で悪くなる場合には役に立ちません(これは、ディスクが壊れ始めたときに発生する可能性が非常に高いです)。
もう1つできることは、ディスクの製造元のWebサイトにアクセスし、ディスクテストユーティリティ(Seagateディスク用のSeaToolsなど)をダウンロードしてから、ディスクをコンピューターに接続して、フルメディアテストを実行することです。このユーティリティは、ディスクによる不良セクタの再マッピングを強制できる場合があります。これにより、通常の方法でアクセスしたときにディスクに不良セクタがあるように見えなくなります(少なくとも、ディスクの継続的な劣化のために他の不良セクタは表示されません)。ディスクの形状が特に悪い場合、ユーティリティは交換が必要であることを示す場合があります(ただし、再マップできる不良セクタがいくつかあるだけでは、通常、これらのユーティリティでは深刻な問題とは見なされません)。
ディスクメーカーのテストユーティリティを実行する場合は、USBまたはFireWireインターフェイスを備えた外部アダプタを介さずに、ディスクをSATAコントローラ(またはディスクとコンピュータが古い場合はIDE)に直接接続する必要があることに注意してください。ディスクユーティリティは任意のATAコマンドをディスクに送信できる必要があるためです。これは、多くのUSB-SATAまたはFireWire-SATAコントローラチップを使用している場合は不可能です(可能であっても、ユーティリティがサポートしていない可能性があります)。場合によっては、ディスクユーティリティを機能させるためにBIOS設定を変更する必要がある場合もあります(たとえば、ユーティリティでサポートされていない場合は、AHCIまたはRAIDモードを無効にします)。この場合、これらの設定を復元するように特に注意する必要があります。そうしないと、OSが起動しなくなる可能性があります(さらに悪いことに、RAIDモードが使用された場合はRAIDアレイが破壊される可能性があります)。
一言で言えば、ファイルシステムのいずれかで不良ブロックが観察された場合、不良セクタをリダイレクトするサービス領域がいっぱいになっている可能性があります。このHDDの敵を与えることをお勧めします))。
イベントログのディスクエラーを参照してください。
powershell Get-Eventlog system -newest 10 -EntryType Error -Source Disk
イベントログですべてのディスクイベントを表示します。
powershell Get-Eventlog system -Source Disk
テストS.M.A.R.T.ステータス、smartChk.vbs:
Dim strComputer
Dim strLogin
Dim strPassword
On Error Resume Next
strComputer = "."
If strLogin = "" or strComputer = "." then
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\WMI")
else
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objSWbemLocator.ConnectServer(strComputer, _
"root\CIMV2", _
strLogin, _
strPassword, _
"MS_409")
end If
Set SmartDataItems = objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_FailurePredictData", "WQL", 48)
InstanceName = Array()
SmartData = Array()
SmartLength = Array()
RowCount = 0
For Each objItem In SmartDataItems
Redim Preserve InstanceName(RowCount)
InstanceName(RowCount) = objItem.InstanceName
Redim Preserve SmartData(RowCount)
SmartData(RowCount) = objItem.VendorSpecific
Redim Preserve SmartLength(RowCount)
SmartLength(RowCount) = objItem.Length
RowCount = RowCount + 1
Next
Set SmartDataItems = Nothing
ThresholdData = Array()
Redim Preserve ThresholdData(RowCount)
PredictFailure = Array()
Redim Preserve PredictFailure(RowCount)
Reason = Array()
Redim Preserve Reason(RowCount)
RowCount = 0
Set ThresholdItems = objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_FailurePredictThresholds", "WQL", 48)
For Each objItem In ThresholdItems
ThresholdData(RowCount) = objItem.VendorSpecific
RowCount = RowCount + 1
Next
Set ThresholdItems = Nothing
RowCount = 0
Set PredictStatusItems = objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_FailurePredictStatus", "WQL", 48)
For Each objItem In PredictStatusItems
PredictFailure(RowCount) = objItem.PredictFailure
Reason(RowCount) = objItem.Reason
RowCount = RowCount + 1
Next
Set PredictStatusItems = Nothing
Set oDict = CreateObject("Scripting.Dictionary")
CreateDict(oDict)
Set objFSO = CreateObject("Scripting.FileSystemObject")
If strComputer = "." then
Set objTextFile = objFSO.OpenTextFile("HDD_Smart.csv", 2, True)
else
Set objTextFile = objFSO.OpenTextFile("HDD_Smart_" & strComputer & ".csv", 2, True)
end If
For CurrentDisk = 0 to RowCount - 1
objTextFile.WriteLine("Drive: " & Replace(Mid(InstanceName(CurrentDisk), 9, InStr(InstanceName(CurrentDisk), "__") - 9), "_", " "))
objTextFile.WriteLine("PredictFailure: " & PredictFailure(CurrentDisk))
objTextFile.WriteLine("Reason: " & Reason(CurrentDisk))
objTextFile.WriteLine("ID;Attribute;Type;Flag;Threshold;Value;Worst;Raw;Status;")
aSmartData = SmartData(CurrentDisk)
aThresholdData = ThresholdData(CurrentDisk)
If IsArray(aSmartData) AND IsArray(aThresholdData) Then
LastID = 0
For x = 2 To SmartLength(CurrentDisk) + 2 Step 12
If LastID > aSmartData(x) then
x = 514
else
LastID = aSmartData(x)
If aSmartData(x) <> 0 Then
objTextFile.Write(aSmartData(x) & ";")
If oDict.Item(aSmartData(x)) = "" Then
objTextFile.Write("VendorSpecific(" & aSmartData(x) & ");")
else
objTextFile.Write(oDict.Item(aSmartData(x)) & ";")
end If
If aSmartData(x + 1) MOD 2 Then
objTextFile.Write("Pre-Failure;")
Else
objTextFile.Write("Advisory;")
End If
' objTextFile.Write(aSmartData(x + 1) & ";")
aFlag = aSmartData(x + 1)
txtFlag = ""
If (aFlag And &H1) <> 0 Then txtFlag = "LC," End If
If (aFlag And &H2) <> 0 Then txtFlag = txtFlag & "OC," End If
If (aFlag And &H4) <> 0 Then txtFlag = txtFlag & "PR," End If
If (aFlag And &H8) <> 0 Then txtFlag = txtFlag & "ER," End If
If (aFlag And &H10) <> 0 Then txtFlag = txtFlag & "EC," End If
If (aFlag And &H20) <> 0 Then txtFlag = txtFlag & "SP," End If
If txtFlag <> "" then
txtFlag = Left(txtFlag, Len(txtFlag)-1 )
end If
objTextFile.Write txtFlag & ";"
objTextFile.Write(aThresholdData(x + 1) & ";") 'Threshold
objTextFile.Write(aSmartData(x + 3) & ";") 'Value
objTextFile.Write(aSmartData(x + 4) & ";") 'Worst
objTextFile.Write((aSmartData(x + 8) * 65536 + aSmartData(x + 7) * 4096 + aSmartData(x + 6) * 256 + aSmartData(x + 5)) & ";") 'Raw
If aSmartData(x + 3) >= aThresholdData(x + 1) Then
objTextFile.WriteLine("OK;")
else
objTextFile.WriteLine("NOT OK;")
end If
end If
end If
Next
else
objTextFile.WriteLine("NO DRIVE WITH SMART FOUND;")
end If
objTextFile.WriteLine
Next
objTextFile.WriteLine
objTextFile.WriteLine("LC - life critical;")
objTextFile.WriteLine("OC - online collection;")
objTextFile.WriteLine("PR - performance related;")
objTextFile.WriteLine("ER - error rate;")
objTextFile.WriteLine("EC - event count;")
objTextFile.WriteLine("SP - self preserving;")
objTextFile.Close
Wscript.echo "HDD_SMART Is Done!"
Function CreateDict(oDict)
oDict.Add 1, "Raw Read Error Rate"
oDict.Add 2, "Throughput Performance"
oDict.Add 3, "Spin-Up Time"
oDict.Add 4, "Start/Stop Count"
oDict.Add 5, "Reallocated Sectors Count"
oDict.Add 6, "Read Channel Margin"
oDict.Add 7, "Seek Error Rate Rate"
oDict.Add 8, "Seek Time Performance"
oDict.Add 9, "Power-On Hours (POH)"
oDict.Add 10, "Spin Retry Count"
oDict.Add 11, "Recalibration Retries Count"
oDict.Add 12, "Device Power Cycle Count"
oDict.Add 13, "Soft Read Error Rate"
oDict.Add 184,"End-to-End error"
oDict.Add 187,"Reported UNC Errors"
oDict.Add 190,"Airflow Temperature (WDC)"
' oDict.Add 190, "HDA Temperature"
oDict.Add 191, "G-Sense Error Rate Frequency"
oDict.Add 192, "Power-Off Park Count"
oDict.Add 193, "Load/Unload Cycle Count"
oDict.Add 194, "HDA Temperature"
oDict.Add 195, "Hardware ECC Corrected Count"
oDict.Add 196, "Reallocated Event Count"
oDict.Add 197, "Current Pending Sector Count"
oDict.Add 198, "Off-Line Scan Uncorrectable Sector Count"
oDict.Add 199, "UltraDMA CRC Error Count"
oDict.Add 200, "Write Error Rate"
oDict.Add 201, "Soft Read Error Rate"
oDict.Add 202, "Address Mark Errors Frequency"
oDict.Add 203, "ECC errors (Maxtor: ECC Errors)"
oDict.Add 204, "Soft ECC Correction"
oDict.Add 205, "Thermal Asperity Rate (TAR)"
oDict.Add 206, "Flying Height"
oDict.Add 207, "Spin High Current"
oDict.Add 208, "Spin Buzz"
oDict.Add 209, "Offline Seek Perfomance"
oDict.Add 210, "Vibration During Write"
oDict.Add 211, "Vibration During Read"
oDict.Add 212, "Shock During Write"
oDict.Add 220, "Disk Shift"
oDict.Add 221, "G-Sense Error Rate"
oDict.Add 222, "Loaded Hours"
oDict.Add 223, "Load/Unload Retry Count"
oDict.Add 224, "Load Friction"
oDict.Add 225, "/Unload Cycle Count"
oDict.Add 226, "Load 'In'-time"
oDict.Add 227, "Torque Amplification Count"
oDict.Add 228, "Power-Off Retract Cycle"
oDict.Add 230, "GMR Head Amplitude"
oDict.Add 231, "Temperature"
oDict.Add 240, "Head Flying Hours"
oDict.Add 250, "Read Error Retry Rate"
End Function