3 votos

¿Los sectores defectuosos del disco duro dependen del sistema de archivos?

Me preguntaba dónde se almacenan los sectores defectuosos en el disco duro: - ¿en un área independiente del sistema de archivos, de modo que si el disco duro se formatea de nuevo con el mismo/diferente sistema de archivos se mostrarán como malos?

Pregunto esto porque el disco duro de mi PVR de satélite digital estaba mostrando un comportamiento erróneo, así que he conectado el HD a mi PC, sin embargo, como utiliza un sistema de archivos propietario (XTV), lo he formateado con NTFS y he emitido CHKDSK /F /R para verificar los sectores: como resultado 24 sectores fueron marcados como malos.

Desmonté el disco y lo conecté al PVR, el disco se reinició con el sistema de archivos XTV.

En este punto me pregunto si los sectores marcados como malos siguen marcados o no

2voto

luchomolina Puntos 116

Los sectores defectuosos del disco son FileSystem independiente .

Hay dos listas de sectores defectuosos que se almacenan en el disco en el área llamada SystemArea que está en el plato también y viene antes de los sectores accesibles por el usuario (por ejemplo, O.S.) y son gestionados por el propio disco. Sus nombres son P-List y G-List. La P-List es la lista primaria que se escribe permanentemente en el disco después de que se fabrica y se comprueba por los sectores defectuosos. La G-List es la Grown List que se gestiona y mantiene sobre la marcha. Después de algún tiempo los sectores pueden estropearse magnéticamente, lo cual es absolutamente normal o puede estropearse por errores de la ECC. Con estas y otras causas sobre la marcha, la G-List mantiene un registro de los sectores defectuosos que puede ver. Hay, por supuesto, algunas herramientas de disco que pueden manipular la G-List y sólo la G-List. No puedes cambiar el contenido de la P-List.

Un sistema de archivos también puede hacer un seguimiento de los sectores defectuosos. Puedes pensar en esto como en consideraciones de velocidad de acceso. Y que mecanismo de seguimiento es Tristemente, depende del FS. No podemos decir "Oh, mi fs mantiene el seguimiento de los sectores defectuosos correctamente" hasta que veamos el código fuente de ese fs en sí. No sabemos si actualiza la G-List del disco o no al emitir un formato de disco o una comprobación de disco, como debería, para sincronizar con los sectores malos reales.

Volviendo a tu pregunta original, un sistema de archivos debe ser una de las partes más sofisticadas de un S.O. y tu sistema de archivos XTV debería, debería hacer ese sycn con los rastreos de sectores malos físicos.

1voto

erimar77 Puntos 449

Lo mejor que puedes hacer con un disco que ya tiene 24 sectores defectuosos es tirarlo y sustituirlo por uno nuevo (espera que tu PVR no esté bloqueado a un disco concreto y acepte esa sustitución). Si el disco empezó a estropearse, normalmente el proceso no se detiene, y pronto verá miles de sectores defectuosos o un fallo completo del disco. O simplemente el disco puede volverse muy lento, lo que resultará en una grabación o reproducción interrumpida al usarlo en un PVR.

En cuanto a su pregunta, el CHKDSK /F /R marca los sectores defectuosos sólo a nivel del sistema de archivos - la información sobre esos sectores se almacena sólo en las estructuras NTFS, y se pierde cuando se reformatea el disco. Así que ahora tienes un disco con 24 sectores ilegibles, pero tu PVR no sabe nada al respecto, y tratará felizmente de usar esos sectores.

Sin embargo, los discos duros son capaces de reasignar los sectores defectuosos por sí mismos: existe una "lista de defectos" almacenada en el propio disco, que se utiliza para redirigir los intentos de acceder a los sectores que se han estropeado a una zona de reserva. Esta reasignación no es visible para el ordenador (ni para ningún otro dispositivo que utilice el disco), excepto cuando se utilizan utilidades especiales de bajo nivel.

La reasignación suele ser provocada por un intento de escribir en un sector que previamente ha sido observado como ilegible por el disco. Así que puede tratar de ignorar el problema y esperar lo mejor, porque su PVR no debería tratar de leer aquellos sectores que aún no escribió después de reformatear, y el disco conoce esos 24 sectores malos (porque trató de leerlos durante el CHKDSK test) y debe reasignarlos cuando se escriba algún dato allí. Por supuesto, esto no servirá de nada si algunos otros sectores se estropean más tarde (lo que es muy probable que ocurra con un disco que empezó a romperse).

Otra cosa que puede hacer es ir al sitio web del fabricante del disco y descargar una utilidad de prueba de discos (por ejemplo, SeaTools para un disco Seagate), luego conectar el disco a su ordenador y realizar una prueba completa de los medios. Esta utilidad puede forzar la reasignación de sectores defectuosos por parte del disco, de modo que no parezca que el disco tiene sectores defectuosos cuando se accede a él de forma normal (al menos mientras no aparezcan otros sectores defectuosos debido al deterioro continuo del disco). Si el disco está en un estado particularmente malo, la utilidad puede mostrar que necesita ser reemplazado (pero el mero hecho de tener varios sectores defectuosos que podrían ser reasignados no suele ser considerado un problema grave por estas utilidades).

Tenga en cuenta que si decide ejecutar la utilidad de pruebas del fabricante del disco, debe conectar el disco directamente a un controlador SATA (o IDE, si su disco y su ordenador son así de antiguos), y no a través de un adaptador externo con una interfaz USB o FireWire, porque la utilidad de disco debe poder enviar comandos ATA arbitrarios al disco, lo que no es posible cuando se utilizan muchos chips de controladores USB-SATA o FireWire-SATA (e incluso si es posible, lo más probable es que la utilidad no lo soporte). En algunos casos también puede ser necesario cambiar la configuración de la BIOS para que la utilidad de disco funcione (por ejemplo, deshabilitar el modo AHCI o RAID si no son soportados por la utilidad); en este caso debe ser especialmente cuidadoso al restaurar esa configuración, o su sistema operativo puede dejar de boot (o, peor aún, una matriz RAID puede ser destruida si se utilizó el modo RAID).

0voto

STTR Puntos 4714

En pocas palabras, si se observan bloques defectuosos en cualquiera de los sistemas de archivos, es probable que el área de servicio para redirigir el sector defectuoso esté llena. Te sugiero que le des a este HDD enemigo)).

Ver error de disco en eventlog:

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

Ver todos los eventos de disco en eventlog:

powershell Get-Eventlog system -Source Disk

Prueba de estado 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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: