> Может sg_raw как то неправильно запускаю?Наконец удалось дампануть прошивку WDC WDxxxxJS-* Она физически разделена на две части: ядро OS - ROM на SPI Flash и модули с логами и статистикой которые находятся в спец областях на самих блинах:
'Data/ROM/ROM_WDC WD1600JS-22NCB1.bin' 131072 bytes, SHA1: 74808cbd68c464a52a793e747eb2f9cada08e2e7
Data/Modules/ ... 115 модулей общим размером 5 976 576 bytes
Western Digital, по понятным причинам, секретит операционные коды OS на ATA дисках. В интернетах можно, но сложно, найти эти операционные коды. Угадать их невозможно, необходимо выгуглить.
Правильный запуск sg_raw в общем варианте:
? - 0..9A..F
N - 0..9
varN - ??
Посылка комманды на диск:
printf "\x??\x??\x00\x${var1}\x${var2}\x00...\x00" |sg_raw --readonly --send 512 /dev/sg0 ?? ${var3} ?? ?? ... ??
Считывание результата с диска:
let block=512
let size=NNN
let b=1
while [ ${b} -lt ${size} ]
do
sg_raw --binary --readonly --request ${block} /dev/sg0 ?? ${var4} ${var5} ?? ?? ... ?? >> result_file.bin
let b=${b}+1
done
Посылаемую на диск бинарную команду: "\x??\x??\x00\x${var1}\x${var2}\x00...\x00" и посылаемый на диск операционный код ?? ${var3} ?? ?? ... ?? необходимо найти в инетах, несмотря на секретность их можно найти на неофициальных сайтах в публичном доступе. Отдельно надо обрабатывать ошибки от диска передаваемые sg_raw.
Займусь теперь "новым" Seagate. Предложения по считыванию прошивы с дисков приветствуются. Пока решил все делать строго на bash + sg_raw, этого вполне хватает.