Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   Документация »   Програмный ремонт жёстких дисков HDD
RSS

Програмный ремонт жёстких дисков HDD

Програмный (и не только) ремонт классических жёстких дисков HDD /Seagate /Samsung /IBM /Hitachi /HGST /Western Digital

<<Назад  Вперед>> Страницы: 1 2 3 4 5 ... 44 45 46 47 48 * 49 50 51 52 .. 75 76 77 78 79 80
Печать
 
strelec
Newbie


Откуда: Кемерово
Всего сообщений: 105
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
3 апр. 2018
i8088 написал:
[q]
по 7200.7-7200.10 на некоторых дисках я SMART очистил, на
некоторых нет, тк все же хочу найти возможность избирательного сброса атрибута
reallocated sectors, оставив часы работы. и количество start/stop.
[/q]
Подскажите, вы нашли способ решения данного вопроса?
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
strelec написал:
[q]
Подскажите, вы нашли способ решения данного вопроса?
[/q]
Пока нет, просто пока не занялся этой проблемой, у меня еще много вопросов to do скопилось
(построение терминала в моей программе некоторые вопросы вызвало, и другие дела). Если
найду решение, обязательно напишу, предположительно требуется разобрать формат хранения
атрибутов в SMART секторе, и удобный способ его коррекции.

Как временное решение, я пока просто не сбрасываю SMART, имея ввиду что атрибут
reallocated sectors недостоверен. Предположительно, если новое переназначение случится
атрибут увеличится на 1, те нужно нужно вычитать из нового значения старое, но
проверить, так ли это, пока не удалось.


KALDYH написал:
[q]
Ага. Все равно родной микрокод чаще всего убит. ПЗУ обычно шить не приходится, и так подходит.
[/q]
OK, буду иметь ввиду!
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Относительно редактирования SMART, идея такая. По команде 1>N05 получаем дамп SMART атрибутов, скорее всего он будет соответствовать
одному из секторов vnd track (проверить). Если это то же, что отдается по команде READ SMART DATA, то нужно правильно отредактировать
этот сектор и записать его (у него простая КС). В ATA стандарте поля этого сектора, касающиеся атрибутов, отмечены как vendor specific, но
может помочь документация на конкретные диски и исходный код smartmon.

Кроме того, считаю правильным сперва сбросить SMART, а потом занести старые значения часов работы и вкл/выкл, тк при сбросе чистятся и
логи SMART (там можно посмотреть, на каких LBA были ошибки, после скана это нам конечно не нужно). Да и reallocated event count и UDMA
SRC error count тоже ни к чему старые оставлять.

Такие мысли, осталось поработать над этим.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
SMART сектор хранится по смещению 0x400 (сектор 0x02) в vnd треке, написал разборщик его,
похоже на правду.

Не смог найти документацию на интерпритацию raw значений конкретно для Seagate, так
атрибут 1 и 195 видимо нужно умножать на коэффициент (или какое другое преобразование).
КС тоже непохоже что есть. Остальные значения предположительно хранятся как uint32_t.
Буду признателен, если кто подскажет по SMART документации конкретно на Seagate Barracuda

Пока разборщик вот так отработал со SMART сектором на недавней ALPINE FW 3.06


SMART structure version 0x000a
ID 001, flags 0x000f, val 061, worst 051 raw   56409381
ID 003, flags 0x0003, val 098, worst 098 raw          0
ID 004, flags 0x0032, val 100, worst 100 raw         99
ID 005, flags 0x0033, val 100, worst 100 raw          0
ID 007, flags 0x000f, val 082, worst 060 raw  187249042
ID 009, flags 0x0032, val 097, worst 097 raw       3190
ID 010, flags 0x0013, val 100, worst 100 raw          0
ID 012, flags 0x0032, val 097, worst 097 raw       3500
ID 194, flags 0x0022, val 035, worst 053 raw         35
ID 195, flags 0x001a, val 061, worst 051 raw   56409381
ID 197, flags 0x0012, val 100, worst 100 raw          0
ID 198, flags 0x0010, val 100, worst 100 raw          0
ID 199, flags 0x003e, val 200, worst 200 raw          0
ID 200, flags 0x0000, val 100, worst 253 raw          0
ID 202, flags 0x0032, val 100, worst 253 raw          0
strelec
Newbie


Откуда: Кемерово
Всего сообщений: 105
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
3 апр. 2018
i8088,
Все верно, смарт хранится во 2-ом сект. vendor трека(по смещению 0x400).
Для обнуления например, атрибутов 5, 187 делал так.
смещения атрибутов:
атрибут 5 -смещение 0x29;
атрибут 187- смещение 0x65.
Правим первые два байта, ставим значения 0x64, следующие
два -0x00.
Заливаем любым удобным способом.
Проверяем-все работает.
Экспериментировал с TLITE1HD.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
strelec написал:
[q]
атрибут 5 -смещение 0x29;
[/q]
0x29 это val, 0x30 worst, далее 4 байта - raw (порядок Intel, младший первый).

Интересно, если поменять только raw, FW пересчитает val и worst автоматически?

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

Попробую на дисках, где был сброшен SMART, записать значения start/stop и hours
как сумму текущего и старого.
strelec
Newbie


Откуда: Кемерово
Всего сообщений: 105
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
3 апр. 2018
i8088 написал:
[q]
Попробую на дисках, где был сброшен SMART, записать значения start/stop и hours
как сумму текущего и старого.
[/q]
С "часами" такой фокус не прокатил ))(смещение 0x41).
strelec
Newbie


Откуда: Кемерово
Всего сообщений: 105
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
3 апр. 2018
i8088 написал:
[q]
Интересно, если поменять только raw, FW пересчитает val и worst автоматически?
[/q]
Val пересчитывает, wrst нет.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
OK, спасибо, поковыряюсь!
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Причина "нередактируемости" некоторых атрибутов видимо в том, что начиная со смещения
SMART sector 386 (0x182) идут еще vendor-specific поля, в которых некоторые атрибуты по
непонятной системе дублируются (надо искать документацию для Seagate's HDD). Я нашел
поле, где дублировались часы работы, но установка их одинаковым с основным полем часов
не решила проблему, часы работы сбрасываются при первом же чтении SMART, или
инкременте счетчика часов, или команде 1>N02 в терминале.

При редактировании же исходного SMART (диск TONKA2 80GB, SATA), у меня возвращались к
исходным сбойные атрибуты 197 и 198 (они установились в 0xFFFFFFFF,те (2^32-1) видимо
из-за сбоя SMART). Я нашел последовательность FFFFFFFF по адресу 0x5AA vnd_track, и изменил на
00000000. После этого возврат к 0xFFFFFFFF происходить перестал.

Я писал только один отредактированный SMART сектор, а SMART логи я сбросил ранее. Такие же
атрибуты как start/stop, UDMA CRC error, reallocated sectors, reported uncorrect,
power cycle count - редактировались без проблем. Val, да ставится сам по raw, но на всякий
случай в программе он тоже задается.

Вот такой программой я пользовался

#include >stdio.h>
#include >stdlib.h>
#include >limits.h>
#include >string.h>
#include >sys/types.h>

#define  SMART_OFFSET  0x400L
#define  ENTRY_SIZE  12
#define  RADIX    0  //auto detection base

int main(int argc, char *argv[]<img src="smiles/wink.gif" align=absmiddle alt=";)"> {
/* Variables declarations*/
unsigned short int i;
uint8_t att_entry[ENTRY_SIZE];
uint16_t struct_ver;
uint8_t cmd_id, cmd_val, cmd_worst;
uint32_t cmd_raw;
uint32_t* raw_val;
FILE* vnd_trk;

    if(argc > 2) {
  printf("SMART sector editor\n");
  printf("Usage: smartatt >input_file> [id val worst raw]\n");
  exit(EXIT_SUCCESS);
    }

    vnd_trk = fopen(argv[1],"rb+");
  if (vnd_trk == NULL) {
  perror(argv[1]<img src="smiles/wink.gif" align=absmiddle alt=";)">;
  exit(EXIT_FAILURE);
  }

    fseek(vnd_trk, SMART_OFFSET, SEEK_SET);
    fread(&struct_ver, 2, 1, vnd_trk);
    printf("SMART structure version 0x%04x\n", struct_ver);

    for (i=1; i >= 42 ; i++) {  //42
  if (feof(vnd_trk)) {
      printf (" Input file too short, stop\n");
      break;
  }

  fread(att_entry, ENTRY_SIZE, 1, vnd_trk);
  if (!att_entry[0]<img src="smiles/wink.gif" align=absmiddle alt=";)">
      break;

  if (argc == 6) {
      cmd_id = (uint8_t)strtol(argv[2], NULL, RADIX);
      if (cmd_id == att_entry[0]<img src="smiles/wink.gif" align=absmiddle alt=";)"> {  //if id equal to cmd line arg
    cmd_val = (uint8_t)strtol(argv[3], NULL, RADIX);
    cmd_worst = (uint8_t)strtol(argv[4], NULL, RADIX);
    cmd_raw = (uint32_t)strtol(argv[5], NULL, RADIX);
    raw_val = (uint32_t*)&att_entry[5];
    
    //write val
    fseek(vnd_trk, -9, SEEK_CUR);
    fwrite(&cmd_val, sizeof(uint8_t), 1, vnd_trk);
    
    //write worst
    fwrite(&cmd_worst, sizeof(uint8_t), 1, vnd_trk);
    
    //write raw value
    fwrite(&cmd_raw, sizeof(uint32_t), 1, vnd_trk);
    fseek(vnd_trk, +3, SEEK_CUR);
    
    //update att entries
    att_entry[3] = cmd_val;
    att_entry[4] = cmd_worst;
    *((uint32_t*)&att_entry[5]<img src="smiles/wink.gif" align=absmiddle alt=";)"> = cmd_raw;
      }
  }
  printf("ID %03d, flags 0x%02x%02x, val %03d, worst %03d, %10u\n",
      att_entry[0], att_entry[2], att_entry[1], att_entry[3],
      att_entry[4], *((uint32_t*)&att_entry[5]<img src="smiles/wink.gif" align=absmiddle alt=";)">);
    }
fclose(vnd_trk);
return 0;
}


Все числа вводятся по правилам Си, те например 077 - восьмеричное, 77 - десятичное,
0x77 шестнадцатеричное (тк RADIX 0)

./smartatt file просмотр атрибутов, file - файл vnd track, с редактируемым SMART сектором по смещению 0x400
./smartatt file id val worst raw - редактирование атрибута id, выставляем параметры val worst raw
<<Назад  Вперед>> Страницы: 1 2 3 4 5 ... 44 45 46 47 48 * 49 50 51 52 .. 75 76 77 78 79 80
Печать
Полигон-2 »   Документация »   Програмный ремонт жёстких дисков HDD
RSS

1 посетитель просмотрел эту тему за последние 15 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS