[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

{ DriveReady SeekComplete Error }



Bom Dia lista,
  
     Ontem ocorreu o seguinte problema em meu disco (hdb), hd onde esta instalado o "debian" soh para constar q se trata do tópico da lista. :)

Antes de começar, Se você ver tais erros constantes e/ou outros erros e seu harddrives,  eu seria mais do que feliz se você deixasse esse email com os erros para entender . Obrigado! :-)

kernel: hda: drive_cmd: status=0x51 { DriveReady SeekComplete Error }
kernel: hda: drive_cmd: error=0x04 { DriveStatusError }
Bom.. la fui eu procurar , já havia postado erros parecido aqui na lista mas ninguém pode me ajudar , agora vou passar o que eu descobri para que seja documentado e compartilhar a solução ! ;)

Depois de varias coisas recebidas de de alguns fóruns sobre erros de disco, comecei minha procura no kernel:
marlos74:/usr/srckernel-source-2.6.8# grep -R DriveStatusError *
drivers/ide/legacy/hd.c:                if (hd_error & ABRT_ERR)        printk("DriveStatusError ");
drivers/ide/ide.c:                      if (err & ABRT_ERR)     printk("DriveStatusError ");
drivers/ide/ide-disk.c:         if (err & ABRT_ERR)     printk("DriveStatusError ");
drivers/ide/Kconfig:      hda: set_multmode: error=0x04 { DriveStatusError }

"DriveStatusError" foi encotrado em 4 arquivos..
olhando dentro de drivers/ide/ide.c revela que estão declarados como método em ide_dump_status

/*
 * Error reporting, in human readable form (luxurious, but a memory hog).
 */
u8 ide_dump_status (ide_drive_t *drive, const char *msg, u8 stat)
{
[...]

    local_irq_set(flags);
    printk(KERN_WARNING "%s: %s: status=0x%02x", drive->name, msg, stat);
#if FANCY_STATUS_DUMPS
    printk(" { ");
    if (stat & BUSY_STAT) {
      printk("Busy ");
    } else {
      if (stat & READY_STAT)  printk("DriveReady ");
      if (stat & WRERR_STAT)  printk("DeviceFault ");
      if (stat & SEEK_STAT) printk("SeekComplete ");
      if (stat & DRQ_STAT)  printk("DataRequest ");
      if (stat & ECC_STAT)  printk("CorrectedError ");
      if (stat & INDEX_STAT)  printk("Index ");
      if (stat & ERR_STAT)  printk("Error ");
    }
    printk("}");
#endif  /* FANCY_STATUS_DUMPS */
]
Acima temos a saída do registro do status da IDE. Em nosso caso, DriveReady significa apenas que a movimentação está pronta. Não se preocupe! SeekComplete significa que a operação de busca pedida pelo comando precedente ao IDE está terminada. Ainda não se preocupe! Mas o erro significa algo fora do normal. Nenhuma razão para se apavorar ainda, mas começar a preocupar um pouco.. :)

printk("\n");
    if ((stat & (BUSY_STAT|ERR_STAT)) == ERR_STAT) {
      err = hwif->INB(IDE_ERROR_REG);
      printk("%s: %s: error=0x%02x", drive->name, msg, err);
#if FANCY_STATUS_DUMPS
      if (drive->media == ide_disk) {
        printk(" { ");
        if (err & ABRT_ERR)   printk("DriveStatusError ");
        if (err & ICRC_ERR)   printk("Bad%s ", (err & ABRT_ERR) ? "CRC" : "Sector");
        if (err & ECC_ERR)  printk("UncorrectableError ");
        if (err & ID_ERR)   printk("SectorIdNotFound ");
        if (err & TRK0_ERR)   printk("TrackZeroNotFound ");
        if (err & MARK_ERR)   printk("AddrMarkNotFound ");
        printk("}");
        if ((err & (BBD_ERR | ABRT_ERR)) == BBD_ERR || (err & (ECC_ERR|ID_ERR|MARK_ERR))) {
            if ((drive->id->command_set_2 & 0x0400) &&
[...]
              printk(", LBAsect=%llu, high=%d, low=%d",
                 (long long) sectors,
                 high, low);
            } else {
              u8 cur = hwif->INB(IDE_SELECT_REG);
              if (cur & 0x40) {   /* using LBA? */
                printk(", LBAsect=%ld", (unsigned long)
[...]
              } else {
                printk(", CHS=%d/%d/%d",
[...]
            if (HWGROUP(drive) && HWGROUP(drive)->rq)
              printk(", sector=%llu", (unsigned long long)HWGROUP(drive)->rq->sector);
        }


 A seção seguinte acima mostra a saída da mensagem de erro. O único erro “normal” incompleto é DriveStatusError. Isto significa apenas que há um erro de status. Todos os outros erros significam um erro serio, erro uncorrectable,
sector id not found, track zero not found and address mark not found, significam que há algo de errado e você deve fazer backup dos dados imediatamente  (se você nao tem nenhum backup recente) para substituir o harddrive.

Em caso de nosso DriveStatusError as vertentes incluem o arquivo do kernel  include/linux/hdreg.h para dar alguma luz para nossos erros (também para os outros erros):

/* Bits of HD_STATUS */
#define ERR_STAT                0x01
#define INDEX_STAT              0x02
#define ECC_STAT                0x04    /* Corrected error */
#define DRQ_STAT                0x08
#define SEEK_STAT               0x10
#define SRV_STAT                0x10
#define WRERR_STAT              0x20
#define READY_STAT              0x40
#define BUSY_STAT               0x80

/* Bits for HD_ERROR */
#define MARK_ERR                0x01    /* Bad address mark */
#define TRK0_ERR                0x02    /* couldn't find track 0 */
#define ABRT_ERR                0x04    /* Command aborted */
#define MCR_ERR                 0x08    /* media change request */
#define ID_ERR                  0x10    /* ID field not found */
#define MC_ERR                  0x20    /* media changed */
#define ECC_ERR                 0x40    /* Uncorrectable ECC error */
#define BBD_ERR                 0x80    /* pre-EIDE meaning:  block marked bad */
#define ICRC_ERR                0x80    /* new meaning:  CRC error during transfer */
Primeiro byte de status : 0x51 = 01010001b
0 READY_STAT 0 SEEK_STAT 0 0 0 ERR_STAT
Quer dizer : o driver esta "ready",  "seek"  esta completo, mas ocorreu um erro.

 O byte de erro: 0x04 = 00000100b
0 0 0 0 0 ABRT_ERR 0 0
Aqui, no registro de erro da IDE, temos apenas o erro ABRT_ERR = "Command aborted"

CONCLUSÃO:

kernel: hda: drive_cmd: status=0x51 { DriveReady SeekComplete Error }
kernel: hda: drive_cmd: error=0x04 { DriveStatusError }


Isto diz que havia um erro no harddrive, e que o comando foi abortado (“Command aborted"). Que interpretando tais erros, nada sério. Contanto que não houver nenhum erro de "Uncorrectable ECC error"s  ou outros erros graves como o "checksum error","bad address mark" etc. do endereço, não deve ser nada para se preocupar tanto. Tais “comandos abortados” ocorrem por exemplo quando um setor desconhecido é pedido, por que não estão atuais no harddisk,  buggy drivers(- > o driver emitiu um comando que não fosse compreendido pela movimentação).

Se voce tiver um erro em algum lugar, deixe-me saber por favor! É para o benefício de todo o usuário do linux se esta thread estiver exata o maxímo possível.
E último mas não menos importante, não me responsabilizo pelo seus dados no harddrive! ;)

Agradecimentos adicionais
[http://www.captain.at/]

[]'s
-- 
Marlos Sedrez
Atendimento Linux/Redes - Senior TI
Linux User # 400480
marlos.sedrez@senior.com.br
Telefone: 3221-3332 R.:539

Reply to: