Os sistemas de arquivos defeituosos do disco rígido são dependentes?

3

Eu queria saber onde os setores defeituosos são armazenados no disco rígido: - em uma área independente do sistema de arquivos, de modo que, se o disco rígido for formatado novamente com um sistema de arquivos diferente ou diferente, eles serão exibidos como ruins?

Eu pergunto isso porque o disco rígido do meu DVR sat digital estava mostrando um comportamento buggy, então eu tenho anexado o HD ao meu PC, no entanto, como ele usa um sistema de arquivos proprietário (XTV), eu tenho formatado com NTFS e emitido CHKDSK / F / R para verificar setores: como resultado, 24 setores foram marcados como ruins.

Desmontado o disco e conectado ao PVR, o disco foi reinicializado com o sistema de arquivos XTV.

Neste momento, pergunto-me se os setores marcados como ruins ainda estão marcados ou não

    
por Riccardo 26.05.2013 / 11:51

3 respostas

2

Os setores defeituosos do disco são FileSystem independent .

Existem duas listas de setores defeituosos que estão armazenadas no disco na área chamada SystemArea, que também está no prato e vem antes dos setores acessíveis ao usuário (por exemplo, O.S.) e são gerenciados pelo próprio disco. Seus nomes são P-List e G-List. A P-List é Primary List, que é permanentemente gravada no disco depois de ser fabricada e testada por setores defeituosos. A G-List é uma lista crescente que é gerenciada e mantida em tempo real. Depois de algum tempo, os setores podem ficar ruins magneticamente, o que é absolutamente normal , ou podem ter resultados ruins via erros de ECC. Com essas e quaisquer outras causas on the fly, a G-List acompanha os setores defeituosos que você pode ver. Existem, é claro, algumas ferramentas de disco que você pode manipular apenas a Lista-G e a Lista-G. Você não pode alterar o conteúdo da P-List.

Um sistema de arquivos também pode rastrear os setores defeituosos. Você pode pensar nisso como em considerações de velocidade de acesso. E esse mecanismo de rastreamento é dependente do FS, infelizmente. Não podemos dizer "Oh, meu fs está mantendo o rastreamento dos setores defeituosos corretamente" até vermos o código fonte do próprio fs. Não sabemos se atualiza o G-List do disco ou não ao emitir um formato de disco ou uma verificação de disco, como deveria, para sincronizar com setores ruins reais.

De volta à sua pergunta original, um sistema de arquivos deve ser uma das partes mais sofisticadas de um O.S. e seu sistema de arquivos XTV deve, deve fazer isso sycn com os rastros físicos ruins do setor.

    
por 26.05.2013 / 13:06
1

A melhor coisa que você pode fazer com um disco que já tem 24 setores defeituosos é jogá-lo fora e substituí-lo por um novo (espere que seu PVR não esteja bloqueado em um disco específico e aceite tal substituição). Se o disco começou a ficar ruim, geralmente o processo não pára e logo você verá milhares de setores defeituosos ou uma falha completa do disco. Ou o disco pode ficar muito lento, o que resultará em gravação ou reprodução interrompida quando usado em um PVR.

Quanto à sua pergunta, o comando CHKDSK /F /R marca setores defeituosos somente no nível do sistema de arquivos - as informações sobre esses setores são armazenadas apenas em estruturas NTFS e perdidas quando o disco é reformatado. Então agora você tem um disco com 24 setores ilegíveis, mas seu PVR não sabe nada sobre isso, e tentará usar esses setores com prazer.

No entanto, os discos rígidos são capazes de realizar setores defeituosos que se remapeavam - há uma "Lista de Defeitos Crescentes" armazenada no próprio disco, que é usada para redirecionar as tentativas de acessar os setores que foram danificados para uma área livre. Esse remapeamento não é visível para o computador (ou qualquer outro dispositivo que esteja usando o disco), exceto ao usar utilitários especiais de baixo nível.

O remapeamento é geralmente acionado por uma tentativa de gravar em um setor que foi anteriormente observado como ilegível pelo disco. Então você pode tentar ignorar o problema e esperar pelo melhor, porque o seu PVR não deve tentar ler os setores que ainda não foram escritos após a reformatação, e o disco sabe sobre esses 24 setores defeituosos (porque tentou lê-los durante o CHKDSK test) e deve remapá-los quando alguns dados são gravados lá. É claro que isso não ajudará se outros setores ficarem ruins mais tarde (o que provavelmente acontecerá com um disco que começou a quebrar).

Uma outra coisa que você pode fazer é acessar o site do fabricante do disco e baixar um utilitário de teste de disco (por exemplo, o SeaTools para um disco da Seagate), anexar o disco ao computador e realizar um teste de mídia completo. Esse utilitário pode forçar o remapeamento de setores defeituosos pelo disco, para que o disco não pareça ter setores defeituosos quando acessado de maneira normal (pelo menos enquanto nenhum outro setor defeituoso aparece devido à deterioração contínua do disco). Se o disco estiver em uma forma particularmente ruim, o utilitário pode mostrar que ele requer substituição (mas apenas ter vários setores defeituosos que podem ser remapeados geralmente não é considerado um problema grave por esses utilitários).

Observe que, se você optar por executar o utilitário de teste do fabricante do disco, deverá anexar o disco diretamente a um controlador SATA (ou IDE, se o disco e o computador forem antigos) e não por meio de um adaptador externo com USB ou Interface FireWire, porque o utilitário de disco deve ser capaz de enviar comandos ATA arbitrários para o disco, o que não é possível ao usar muitos chips controladores USB-SATA ou FireWire-SATA (e mesmo se for possível, o utilitário provavelmente não suporta isto). Em alguns casos, você também pode precisar alterar as configurações do BIOS para que o utilitário de disco funcione (por exemplo, desabilite o modo AHCI ou RAID se eles não forem suportados pelo utilitário); neste caso, você deve ter um cuidado especial para restaurar essas configurações, ou seu sistema operacional pode não ser mais inicializado (ou, pior ainda, uma matriz RAID pode ser destruída se o modo RAID for usado).

    
por 26.05.2013 / 12:31
0

Em poucas palavras, se você observar blocos ruins em qualquer um dos sistemas de arquivos, é provável que a área de serviço para redirecionar o setor defeituoso esteja cheia. Eu sugiro que você dê esse inimigo HDD)).

Veja o erro de disco no eventlog:

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

Ver todos os eventos de disco no eventlog:

powershell Get-Eventlog system -Source Disk

Teste S.M.A.R.T. status, 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 
    
por 26.05.2013 / 12:30