Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу 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,
Все верно, смарт хранится во 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
strelec
Newbie


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


Ссылка


Дата регистрации на форуме:
3 апр. 2018
Нашел я, как установить нужный "пробег" после сброса
смарта. С остальными атрибутами уже все понятно.
Отвечают за это байты [0x5A2-0x5A7].
Например ,нам нужна наработка 9000ч. :
2328h*20h=046500h. Соответственно строку правим :[00 00 00 00 65 04].
Заливаем, проверяем.
Я думаю,что для всех барракуд должно работать.Надо проверять.
i8088
Advanced Member


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


Ссылка


Дата регистрации на форуме:
30 янв. 2015
strelec, те там счетчик с большим разрешением?

У GALAXY и TONKA2 очень похоже, а у вот ALPINE возможно по другому, и там нет дублирующего
счетчика по адресу 0x5DA. Надо проверить.

Я предлагаю еще один вариант. Сохраняем текущий VND track, далее сброс SMART, для очистки
старых логов, а потом редактируем старый SMART, часы останутся, остальное редактируется легко,
хотя могут быть трудности с атрибутами 197 и 198 (как я писал).
strelec
Newbie


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


Ссылка


Дата регистрации на форуме:
3 апр. 2018
i8088 написал:
[q]
Я предлагаю еще один вариант. Сохраняем текущий VND track, далее сброс SMART, для очистки
старых логов, а потом редактируем старый SMART, часы останутся, остальное редактируется легко,
хотя могут быть трудности с атрибутами 197 и 198 (как я писал).
[/q]
Я так и делал))
Но мне было интересно разобраться с часами...
В старом компе вроде стоит альпина. Надо откопать и проверить)
С атрибутами 197,198 я решал также, как и вы.
i8088
Advanced Member


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


Ссылка


Дата регистрации на форуме:
30 янв. 2015
strelec, ALPINE хранит по адресам vnd track 0x05a7 - 0x05a4 (0x01a7 - 0x01a4 SMART
sector) значение Power On Hours умноженное на 0xAAA. Ну точнее, наоборот, это
основной счетчик, а FW делит его на 0xAAA

А для TONKA/GALAXY счетчик основной выходит 48-битный?
Для TONKA2/GALAXY счетчик по адресам 0x5A7-0x5a3 0x5A7-0x5a5, 24битный.

Редактирование времени на ALPINE удалось, спасибо!

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

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

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

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