3

Мне было интересно, где дефектные сектора хранятся на жестком диске:- в независимой области файловой системы, так что, если жесткий диск снова отформатирован с той же / другой файловой системой, они будут отображаться как плохие?

Я спрашиваю об этом, потому что жесткий диск моего цифрового спутникового PVR показывал некорректное поведение, поэтому я подключил HD к своему ПК, однако, поскольку он использует проприетарную файловую систему (XTV), я отформатировал его с NTFS и выпустил CHKDSK /F /R для проверки секторов: в результате 24 сектора были отмечены как плохие.

Размонтировал диск и подключил к PVR, диск был заново инициализирован с файловой системой XTV.

На данный момент мне интересно, отмечены ли сектора, помеченные как плохие, или нет

3 ответа3

2

Диск плохие секторы FileSystem независимы.

Есть два списка поврежденных секторов, которые хранятся на диске в области, называемой SystemArea, которая также находится на блюде и находится перед доступными для пользователя (например, ОС) секторами, и ими управляет сам диск. Их зовут P-List и G-List. P-List - это первичный список, который постоянно записывается на диск после его изготовления и тестирования дефектными секторами. G-List - это Grown List, который управляется и поддерживается на лету. Через некоторое время секторы могут испортиться магнитно, что абсолютно нормально, или могут испортиться из-за ошибок ECC. С этими и любыми другими причинами на лету G-List отслеживает плохие сектора, которые вы можете видеть. Есть, конечно, некоторые дисковые инструменты, которыми вы можете манипулировать только G-List и G-List. Вы не можете изменить содержимое P-List.

Файловая система также может отслеживать плохие сектора. Вы можете думать об этом как о соображениях скорости доступа. И этот механизм отслеживания зависит от FS, к сожалению. Мы не можем сказать «О, мой fs правильно отслеживает плохие сектора», пока мы не увидим исходный код самого fs. Мы не знаем, обновляет ли он G-List с диска или нет при выдаче формата диска или проверке диска, как следует, для синхронизации с действительно плохими секторами.

Возвращаясь к вашему первоначальному вопросу, файловая система должна быть одной из самых сложных частей ОС, и ваша файловая система XTV должна это делать с физическим отслеживанием плохих секторов.

1

Лучшее, что вы можете сделать с диском, на котором уже есть 24 поврежденных сектора, - это выбросить его и заменить его новым (надеюсь, что ваш PVR не привязан к конкретному диску и примет такую замену). Если диск начал работать плохо, обычно процесс не останавливается, и вскоре вы увидите тысячи поврежденных секторов или полный отказ диска. Или диск просто может стать очень медленным, что приведет к прерыванию записи или воспроизведения при использовании его в PVR.

Что касается вашего вопроса, команда CHKDSK /F /R помечает поврежденные сектора только на уровне файловой системы - информация об этих секторах сохраняется только в структурах NTFS и теряется при переформатировании диска. Итак, теперь у вас есть диск с 24 нечитаемыми секторами, но ваш PVR ничего о нем не знает и с удовольствием попытается использовать эти сектора.

Тем не менее, жесткие диски могут выполнять повторное сопоставление поврежденных секторов - на самом диске хранится «Список выращенных дефектов», который используется для перенаправления попыток доступа к секторам, которые испортились, в свободную область. Это переназначение невидимо для компьютера (или любого другого устройства, которое использует диск), за исключением случаев, когда используются специальные утилиты низкого уровня.

Повторное сопоставление обычно инициируется попыткой записи в сектор, который ранее считался нечитаемым диском. Поэтому вы можете попытаться игнорировать проблему и надеяться на лучшее, потому что ваш PVR не должен пытаться читать те сектора, которые он еще не записал после переформатирования, и диск знает об этих 24 поврежденных секторах (потому что он пытался прочитать их во время тест CHKDSK ) и должен переназначить их, когда там будут записаны некоторые данные. Конечно, это не поможет, если некоторые другие сектора будут выходить из строя позже (что очень вероятно случится с диском, который начал ломаться).

Еще одна вещь, которую вы можете сделать, это зайти на веб-сайт производителя диска и загрузить утилиту тестирования диска (например, SeaTools для диска Seagate), затем подключить диск к компьютеру и выполнить полный тест носителя. Эта утилита может быть способна принудительно перераспределять поврежденные секторы диском, так что диск не будет иметь поврежденных секторов при обычном доступе (по крайней мере, пока другие плохие сектора не появятся из-за продолжающегося износа диска). Если диск находится в особенно плохом состоянии, утилита может показать, что он требует замены (но наличие нескольких поврежденных секторов, которые могут быть переназначены, обычно не считается серьезной проблемой для этих утилит).

Обратите внимание, что если вы решите запустить утилиту тестирования производителя диска, вы должны подключить диск непосредственно к контроллеру SATA (или IDE, если ваш диск и компьютер устарели), а не через внешний адаптер с интерфейсом USB или FireWire, потому что дисковая утилита должна иметь возможность отправлять произвольные команды ATA на диск, что невозможно при использовании многих контроллеров USB-SATA или FireWire-SATA (и даже если это возможно, скорее всего, утилита не поддерживает это). В некоторых случаях вам также может понадобиться изменить настройки BIOS для работы дисковой утилиты (например, отключите режим AHCI или RAID, если они не поддерживаются утилитой); в этом случае вы должны быть особенно осторожны, чтобы восстановить эти настройки, иначе ваша ОС может больше не загружаться (или, что еще хуже, массив RAID может быть разрушен при использовании режима RAID).

0

Короче говоря, если вы наблюдаете плохие блоки в любой из файловых систем, вполне вероятно, что область обслуживания для перенаправления поврежденного сектора заполнена. Я предлагаю вам дать этому HDD врагу)).

Смотрите ошибку диска в eventlog:

powershell Get-Eventlog system -newest 10 -EntryType Error -Source Disk

Посмотреть все события диска на Eventlog:

powershell Get-Eventlog system -Source Disk

Проверьте состояние SMART, 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 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .