Первая версия GNU ddrescue была выпущена 19 лет назад 12 августа 2004г. Но не спешите проматывать статью. Это не очередной пересказ мануала или описание алгоритма работы, коих полно в сети. Сегодня я расскажу о ней кое что новенькое.

О чем же я собрался рассказать, потерпите, все узнаете. Для начала обозначим проблему. Далее по тексту может показаться что повествование будет уклоняться в сторону, но постарайтесь сфокусироваться на сути проблемы.

Проблема и решения

Энтузиастам она известна. Во многих случаях электронные мозги подопытного жесткого диска перестают отвечать на ATA команды по интерфейсу. В этот момент драйвер шлет ему soft и hard reset'ы, но часто и это не помогает.

И тогда пора дергать рубильник, то есть отключать и затем снова подключать ему питание. Для автоматизации процесса приспосабливают реле. Кто через LPT, кто через Raspberry PI а кто USB реле промышленного изготовления.

Не нашел пруфов, но профессиональные DR решения ACELab PC-3000 и DeepSpar Disk Imager тоже должны уметь это. Необходимость в Power-off and power-on cycle и у них иногда возникает. Возможно кто нибудь из причастных уточнит в комментариях.

Критика таких кустарных методов со стороны DR специалистов

Попытаюсь хоть как то охладить причастные места специалистов и возможно даже восстановить их душевное спокойствие. Я тоже считаю такие методы обращения с жесткими дисками дичайшим варварством. Это сравни нажатию пользователем кнопки Reset на корпусе системного блока при зависании ОС. Меня, знающего какие процессы происходят внутри ОС x86 это также сильно коробит. Но внутренности устройства собственных ОС самих жестких дисков (да там у них внутри свои полноценные ОС) покрыты мраком и не доступны большинству интересующихся около компьютерными темами. Возможно поэтому люди к ним так безжалостны.

Отступление по поводу кнопки Reset

Да в компьютерных корпусах эти кнопки до сих пор есть, даже не верится.

Вот современный ноутбук с зависшей Windows 10 так просто не перезагрузишь.

Часто эта ОС зависает так что показывает только черный экран. А по матрице ноутбука и не всегда видно что горит подсветка, и ноутбук на самом деле включен.

Горят только индикаторы включения и зарядки на корпусе. При нажатии на кнопку включения он будет уходить в спящий режим, и снова просыпаться зависшим, пока его не отключат от БП.

А уже полежав без дела какие то часы и высадив в 0% аккумулятор, будучи принесенным в сервис, включится и загрузится там как ни в чем не бывало.

Если кустарное восстановление происходит не с SSD, а с жесткого диска со всеми его движущимися головками и блинами - вытащить данные потом в нормальной DR лаборатории может стать в несколько раз дороже, чем до экспериментов. А может стоить не только денег, но и вообще невозможности что либо вытащить. Поэтому хорошо если экспериментатор понимает свою меру ответственности. И экспериментирует со своими личными дисками, а не с клиентскими. Но об этом к сожалению можно только мечтать. Да здесь должна быть шутка про люди делятся на...

Linux, Windows и неисправные SSD

Я призываю к объективности. Мои выводы основаны на личном практическом опыте в сервисе. Речь о десятках неисправных SSD. Постараюсь объяснить с примерами в чем тут загвоздка. Холивары это не практично!

Не редко SSD как SATA так и NVMe выходят из строя. В о всех случаях из моей практики на SSD была установлена Windows. Это не плюс или минус, просто отсутствие статистики по Linux. В случае неисправности SSD - Windows либо не загружается (висит на лого или заходит в UEFI Setup), либо глючит, зависает, не может установить обновления или корректно завершить работу.

На самом же деле электронные мозги неисправных SSD ведут себя немного по разному. По симптомам можно классифицировать так. Разделить на две основные группы. И каждую из них на подгруппы.

К первой группе относим те случаи когда без ошибок проходит чтение по всем без исключения секторам. А вот если что то попробовать записать возможны варианты:

  • А. Полный игнор диском любых операций записи, при этом без каких либо ошибок.

  • Б. Ошибки при записи. Но продолжает быть доступен на чтение.

  • В. При любой попытке записи - диск с интерфейса пропадает.

Ко второй группе относим случаи когда SSD выдает ошибки уже при чтении. И тут тоже бывают под-варианты:

  • Г. Ошибки при чтении, но после их обработки диск остается доступен.

  • Д. При попытке чтения сбойного сектора - перестает читать что либо вообще.

По моему опыту нормально скопировать данные с неисправного SSD при подключении к другому ПК с Windows можно только в некоторых случаях из подгрупп А и Б. Когда диск работает стабильно - то есть не зависает и не пропадает из системы. Это если повезет.

Здесь и далее я имею в виду обычное подключение к интерфейсу SATA / NVMe / USB и работу с драйверами от Microsoft из состава ОС. Без специализированных прокладок между ОС и диском, роль коих могут играть DR программно-аппаратные комплексы.

В основном же такие неисправные диски при подключении к Windows ведут себя странно. В большинстве случаев это выглядит как виден в проводнике, но проводник висит. Или определяется и тут же пропадает.

Linux дает возможность исследовать поведение SSD, и попытаться, а в случае если у диска проблемы только с записью - то гарантированно вытащить данные.

Далее в статье речь пойдет о решении которое я создал для облегчения работы со случаями из подгруппы Д. А именно о автоматизации процесса копирования без необходимости аппаратных примочек для Power-off and power-on cycle.

Отступление по поводу производственных утилит MPTool от производителей контроллеров для OEM производителей SSD

Производственные утилиты MPTool (под Windows) и сами прошивки регулярно утекают из подвалов поднебесной в большой интернет.

Но программный ремонт это не про спасение данных. Это восстановление нормальной работоспособности накопителя с полным и безвозвратным уничтожением данных.

Известная возможность ядра Linux

В Linux есть возможность отключать и подключать на горячую SATA (и даже IDE) устройства, дергая вызовы через /sys интерфейс. Об этом есть статья на хабре от 2010г, но приведу здесь нужные команды.

Отключение диска sudo echo 1 > /sys/block/sdX/device/delete
Где X это буква алфавита

Подключение диска sudo echo '0 0 0' > /sys/class/scsi_host/hostN/scan
Где N это цифра

Отступление про IDE (он же PATA, а не то что могли подумать при виде вроде бы примелькавшейся аббревиатуры)

Еще в 2010г использовал на Soc-775 дешевых платах с ICH7. Одна была от Asus другая от Gigabyte. И там и там никакого Hot Plug не было.

Linux можно было подключить и отключить SATA и IDE диски даже если они не были воткнуты в порты изначально при включении компа. Любые IDE диски из тех что прошли через сервис также корректно определялось как и SATA.

Но на одной из двух плат если включить без IDE диска изначально. То порядок этих самых scsi_host/hostN менялся, их становилось меньше. Хост который отвечал за два диска на IDE контроллере становился недоступен. Но если включать с IDE диском - то его можно было затем остановить, отключить, и подключить другой!

И проблема стабильности имен SATA / USB устройств

Почему речь о SATA и только о нем, а написано SCSI? Это не очевидно, но в Linux все устройства и SATA и USB подключается через подсистему SCSI. Точнее последовательность такая в случае SATA: libata > sg > sd. Пояснительную бригаду только не просите присылать. На самом деле все логично.

  • За реализацию SATA и PATA отвечает libata

  • sg это SCSI Generic слой абстракции через который и запихнуты все SATA и USB устройства в подсистему SCSI

  • sd - SCSI Device это собственно сама реализация подсистемы SCSI. И через этот по сути верхний уровень абстракции нам видны все SATA и USB устройства. Вот почему мы видим в списке устройств эти непонятные /dev/sda, /dev/sdb - имена всех устройств начинаются на /dev/sd

Буквы sda sdb sdc меняются в зависимости от порядка инициализации SATA дисков в системе. И все USB воткнутые диски, и флешки появляются среди них же.

А уж при работе с неисправными нестабильно работающими SSD, которые могут сами по себе отключаться - буква диска может меняться вроде бы непредсказуемо.

Способ адресации SATA устройств по номеру порта

В процессе копания в /sys/class я обратил внимание на /sys/class/ata_port/ataN где N начинается с 1 и соответствует количеству SATA портов на плате.

Все эти /sys/class и /sys/block нагромождение вложенных симллинков на директории которые друг на друга ссылаются.

Как получить /sys/class/scsi_host/hostN/scan из /sys/class/ata_port/ataN
я нашел довольно быстро. Здесь каждому ataN соответствует только один hostN

/sys/class/ata_port/ata3/device/host2/scsi_host/host2/scan

Но как распутать клубок ссылок ? Запустить readlink с ключом -f

readlink -f /sys/class/ata_port/ata"$N"/device/host?/scsi_host/host?/

Нужный нам номер SATA порта подставляем в $N а номера хостов просто заменяем на ?

/sys/block/sdX/device/delete тоже обнаружился!

/sys/class/ata_port/ata3/device/host2/target2:0:0/2:0:0:0/delete

Здесь придется добавить много ?

readlink -f /sys/class/ata_port/ata"$N"/device/host?/target?:?:?/?:?:?:?/

С получением /dev/sdX тоже оказалось просто.

readlink -f /dev/disk/by-path/pci-*-ata-"$N"

Все готово. Скрипт написан. Представляю вашему вниманию.

ddrescue-loop v0.1.1

ddrescue-loop v0.1.1

ddrescue-loop-v0.1.1.gz

#!/bin/sh
#ddrescue-loop script writen by gumanzoy <gumanzoy@gmail.com>

# Compatible only with Linux, not with other *nix!
# Depends on udev /dev and sysfs /sys kernel interfaces
# Requires SATA AHCI compatible motherboard
# For all Intel and modern AMD platforms (AM4 and newer), check the UEFI Setup
# SATA settings to ensure Port Hot Plug is enabled

# [RU] forum thread. Обсуждение
# https://forum.ixbt.com/topic.cgi?id=11:47589-31

# /* This program is free software. It comes without any warranty, to
# * the extent permitted by applicable law. You can redistribute it
# * and/or modify it under the terms of the Do What The Fuck You Want
# * To Public License, Version 2, as published by Sam Hocevar. See
# * http://www.wtfpl.net/ for more details. */

VERSION=0.1.1

showhelp () {
echo "ddrescue-loop v""$VERSION"" перезапускает процесс ddrescue в случае его завершения"
echo "Внимание следует соблюдать очередность аргументов"
echo "Указывать ключи в произвольном порядке нельзя!"
echo "Числовые значения аргументов обязательно через пробел"
echo -n "\n"
echo "# Остановить/запустить диск на SATA порту:"
echo "-ata <n> -stop""		""остановить диск на SATA порту <n>"
echo "-ata <n> -scan""		""сканировать SATA порт <n>"
echo -n "\n"
echo "# Запустить восстановление:"
echo "ddrescue-loop -ata <n> [-loop <n>] [-wait <n>] [-act <n>] outfile mapfile [ddrescue options]"
echo -n "\n"
echo "# Укажите номер SATA порта к которому подключен диск источник:"
echo -n "-ata <n>""		""Номер SATA порта <n> цифра (смотрите вывод dmesg)"
echo -n "\n""			""#: "; ls /sys/class/ata_port
echo -n "\n"
echo "# Функция циклической остановки/перезапуска диска на SATA порту:"
echo "-loop <n>""		""<n> предельное число попыток"
echo -n "\n"
echo "# Таймер ожидания остановки/перезапуска диска:"
echo "-wait <n>""		""Время в секундах <n> [10]"
echo -n "\n"
echo "# Переопределить таймаут ожидания исполнения ATA команд:"
echo "-act <n>""		""Время в секундах <n> [30]"
echo -n "\n"
echo "# Основные:"
echo "outfile""			""Устройство приемник данных / файл образа"
echo "mapfile""			""ddrescue map/log файл (обязательно)"
echo -n "\n"
echo "# В конце после mapfile можно указать опции запуска ddrescue через пробел"
echo "# Поддержка зависит от версии. Полный список опций в мануале. Важные:"
echo "-P [<lines>]""		""Предпросмотр данных [число строк] по умолчанию 3"
echo "-b 4096""			""Размер сектора (физического блока) [default 512]"
echo "-O"" #Рекомендую!		""После каждой ошибки заново открывать файл устройства"
echo "-J"" #Опционален		""При ошибке перечитать последний не сбойный сектор"
echo "-r <n> #ИЛИ -r -1""	""<n> число повторных проходов до перехода к trim"
echo "-m <domain.mapfile>""	""Ограничить область чтения доменом <file> ddru_ntfsbitmap"
}

get_ata_host () {
until SCSIHOST=`readlink -f /sys/class/ata_port/ata"$1"/device/host?/scsi_host/host?/` \
&& test -d "$SCSIHOST"; do sleep 1; done
}

get_ata_target () {
until SYSFSTGT=`readlink -f /sys/class/ata_port/ata"$1"/device/host?/target?:?:?/?:?:?:?/` \
&& test -d "$SYSFSTGT"; do sleep 1; done
}

get_ata_dev () {
until INDEV=`readlink -f /dev/disk/by-path/pci-*-ata-"$1"` \
&& test -b "$INDEV"; do sleep 1; done
}

if [ "$1" = "-h" -o "$1" = "--help" ]; then showhelp
exit; fi

if [ "`whoami`" != "root" ]; then
echo Exit. This script should be run as root !
exit 1; fi

if [ -n "$1" ] && [ "$1" = "-ata" ]; then
if [ -n "$2" ] && test -d /sys/class/ata_port/ata"$2"; then
SATAP="$2"; get_ata_host "$SATAP"; shift; shift
else echo -n "Please enter correct port number: "; ls /sys/class/ata_port; exit 1; fi
fi

if [ -n "$1" ] && [ "$1" = "-loop" ]; then
if [ -n "$2" ] && [ "$2" -gt 0 ]; then
DDLOOP="$2"; shift; shift; fi
else DDLOOP=0
fi

if [ -n "$1" ] && [ "$1" = "-wait" ]; then
if [ -n "$2" ] && [ "$2" -gt 0 ]; then
LOOPWAIT="$2"; shift; shift; fi
else LOOPWAIT=10
fi

if [ -n "$1" ] && [ "$1" = "-act" ]; then
if [ -n "$2" ] && [ "$2" -gt 0 ]; then
ATACMDT="$2"; shift; shift; fi
fi

if [ -n "$1" ] && [ "$1" = "-stop" ] && [ -n "$SATAP" ]; then
get_ata_target "$SATAP"
while test -f "$SYSFSTGT"/delete; do echo 1 > "$SYSFSTGT"/delete; sleep 1; done
exit; fi

if [ -n "$1" ] && [ "$1" = "-scan" ] && [ -n "$SATAP" ]; then
echo '0 0 0' > "$SCSIHOST"/scan; exit; fi

if [ -z "$SATAP" ]; then showhelp
exit; fi

OUTFILE="$1"; shift
MAPFILE="$1"; shift
DDOPTS="$@"

DONE=X
LOOPCOUNT=0

until [ "$DONE" = 0 ]; do
get_ata_target "$SATAP"; get_ata_dev "$SATAP"
if [ -n "$ATACMDT" ]; then echo "$ATACMDT" > "$SYSFSTGT"/timeout
fi
echo ddrescue "-fd" "$INDEV" "$OUTFILE" "$MAPFILE" "$DDOPTS"
ddrescue "-fd" "$INDEV" "$OUTFILE" "$MAPFILE" $DDOPTS
DONE="$?"
if [ "$DONE" != 0 ] && [ "$DDLOOP" -gt 0 ]; then
sleep "$LOOPWAIT"
while test -d "$SYSFSTGT"; do echo 1 > "$SYSFSTGT"/delete
sleep "$LOOPWAIT"; done
sleep "$LOOPWAIT" && echo '0 0 0' > "$SCSIHOST"/scan
DDLOOP=$(($DDLOOP-1))
LOOPCOUNT=$(($LOOPCOUNT+1))
echo "\n\033[1mDDLOOP" "#""$LOOPCOUNT"
tput sgr0
date
echo -n "\n"
else DONE=0
fi
done

Исправление v0.1.1 что изменилось

Один участок кода. Убрано ограничение 30 для параметра -act

Старый вариант:

if [ -n "$1" ] && [ "$1" = "-act" ]; then
if [ -n "$2" ] && [ "$2" -gt 0 -a "$2" -lt 30 ]; then
ATACMDT="$2"; shift; shift; fi
fi

Исправленный:

if [ -n "$1" ] && [ "$1" = "-act" ]; then
if [ -n "$2" ] && [ "$2" -gt 0 ]; then
ATACMDT="$2"; shift; shift; fi
fi

Теперь можно задавать таймаут больше чем установлен по умолчанию в ядре Linux. Оказалось что это позволяет ядру дожидаться ответа диска вместо оправок команды ataN: hard resetting link

This program is free software. It comes without any warranty, to the extent permitted by applicable law. You can redistribute it and/or modify it under the terms of the Do What The Fuck You Want To Public License, Version 2
This program is free software. It comes without any warranty, to the extent permitted by applicable law. You can redistribute it and/or modify it under the terms of the Do What The Fuck You Want To Public License, Version 2

Системные требования

  • Скрипт будет работать только в Linux так как использует интерфейсы ядра
    udev /dev и sysfs /sys

  • Для работы с SSD вообще желательно плату с поддержкой AHCI

  • На платформах Intel начиная с Soc-1156 и на AMD AM4/AM5 нужно включать Hot Plug в UEFI BIOS Setup для каждого порта отдельно.

  • На более старых AMD, но у которых в чипсете поддержка AHCI есть - сразу должно работать ничего специально включать не надо.

  • На Intel Soc-775 после ICH7 не уверен, но можете пробовать. На ICH7 и более старых ничего хорошего не выйдет - там нет поддержки AHCI.

Как этим пользоваться

Неисправный SSD нужно подключать уже после загрузки системы. Ни в коем случае не сразу при включении!

ddrescue-loop -ata N -stop Остановить диск на SATA порту N
ddrescue-loop -ata N -scan Cканировать SATA порт N

Номер соответствует порту на мат.плате, но нумерация всегда начинается с 1, а не с 0 как на платах Gigabyte например. Если не уверены то смотрите выхлоп dmesg

Насколько можно быть уверенным в этих номерах ?

Возможно порядок может меняться при перезагрузке системы. Особенно на платах с несколькими контроллерами.

Но между перезагрузками системы эти номера стабильны. Твердо и четко!

ddrescue-loop -ata N [-loop N] [-wait N] [-act N] outfile mapfile [ddrescue options]

Так как я не слишком искушен в sh скриптинге, и вообще не программист - с разбором параметров особо не мудрствовал. Поэтому есть некоторые важные ограничения!

Следует соблюдать очередность аргументов. Указывать ключи в произвольном порядке нельзя!
Числовые значения аргументов обязательно через пробел.

А как же автоматизация. Ради чего все затевалось

Функция циклической остановки/перезапуска диска на SATA порту:
-loop N Предельное число попыток N целое число. Указывать обязательно.
Таймер ожидания остановки/перезапуска диска:
-wait N Время в секундах. 10 по умолчанию.

Ограничения применимости автоматизации к жестким дискам!

Сразу скажу что не для жестких дисков это. А для SATA SSD и только для них!

То есть исправные жесткие диски таким методом останавливаются/запускаются без проблем.

Но вот многие неисправные в зависшем состоянии не остановятся после команды стоп пока питание не выдернуть.

Переопределить таймаут ожидания исполнения ATA команд:
-act N Время в секундах. 30 по умолчанию в Linux.

В конце после mapfile можно указать опции запуска ddrescue. Их обрабатывает уже сама ddrescue, можно указывать все как обычно.

В качестве outfile я обычно указываю образ, смонтированный в /dev/loopN
Напрямую на другое устройство не пишу. Но можно и просто файл образа указывать.
В общем все как обычно с ddrescue

Вместо заключения

Возможно сегодня еще есть люди которые скептически относятся к open source решениям. Но оглянитесь вокруг и сравните как было 15 лет назад и как сейчас. Я считаю что чем в большее количество сфер проникнут решения на базе открытого кода - тем лучше для всех. Да для всех без исключения. Надеюсь что хоть в этом направлении наш мир движется правильно.

Говоря о сфере DR и самих аппаратно-программных составляющих накопителей с открытостью пока все печально. А ведь при большей открытости со стороны производителей можно было бы добиться лучшей надежности хранения данных.

Сторонникам проприетарности посоветую вспомнить историю с выводом на рынок SMR моделей жестких дисков. Кому от такого подхода лучше стало, уж точно не пользователям.

Благодарю за внимание! И удачных экспериментов!

Комментарии (31)


  1. gumanzoy Автор
    30.11.2023 06:42

    Вот пример работы со скрпитом

    Вкратце когда в dmesg: sdc: detected capacity change from 240057409536 to 0
    То ddrescue перестает читать: ddrescue: Can't reopen input file: No medium found

    Происходит DDLOOP #1

    Кусок dmesg

    ata6: hard resetting link
    ata6: COMRESET failed (errno=-16)
    ata6: reset failed, giving up
    ata6.00: disabled
    ...
    sdc: detected capacity change from 240057409536 to 0
    ...
    sd 5:0:0:0: [sdc] Stopping disk
    sd 5:0:0:0: [sdc] Start/Stop Unit failed: Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
    ata6: link is slow to respond, please be patient (ready=0)
    ata6: COMRESET failed (errno=-16)
    ata6: link is slow to respond, please be patient (ready=0)
    ...
    ata6: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
    ata6.00: ATA-10: Western Digital SSD 240GB, ZD0R3G40, max UDMA/133
    ata6.00: 468862128 sectors, multi 1: LBA48 NCQ (depth 32), AA


  1. kasumiru
    30.11.2023 06:42
    +1

    Неисправный SSD нужно подключать уже после загрузки системы.

    интересно как же быть с M2, который вытесняет на рынке обычный sata.


    1. gumanzoy Автор
      30.11.2023 06:42

      M.2 подключаются через USB3 докстанцию. С ними те же проблемы. То есть отваливаются при ошибках.

      Пока помогает только отключение питания. У меня уже есть мысли что попробовать. Например usb_modeswitch -v 0x152d -p 0x0583 --reset-usb Но на практике заставить это работать пока не получилось.


      1. litalen
        30.11.2023 06:42
        +2

        Некоторые материнские платы и USB-хабы умеют в программное выключение-включение USB-портов, чаще правда только всех сразу: https://github.com/mvp/uhubctl
        Даже некоторые роутеры такое умеют, хоть и другим способом, путем дергания GPIO их платы, связанных с USB: https://forum.openwrt.org/t/linksys-mr8300-openwrt-22-03-0-rc4-usb-port-powered-storage-devices-not-working/131391/62


      1. Johan_Palych
        30.11.2023 06:42
        +1

        Самое простое:
        В Debian пакет usbutils и в нем /usr/bin/usbreset
        lsusb и usbreset по ID продукта и др.
        Для добавления в скрипт смотрите тут:
        How do you reset a USB device from the command line?
        https://askubuntu.com/questions/645/how-do-you-reset-a-usb-device-from-the-command-line


    1. gumanzoy Автор
      30.11.2023 06:42

      Совсем забыл. Вот моя статья про успешный случай восстановления данных с 128GB M.2 NVME SSD Kingston RBUSNS8154P3128GJ3 напрямую на ноутбуке. Но через USB3 док тоже можно было бы.

      Там была только одна ошибка в начале диска на позиции 1.55GB примерно. Но он на ней отваливался. Я копировал ddrescue сначала диска а потом задом наперед. Не скопировалось только 9.5MB.

      А ноутбук вел себя так - винда не загружалась, висела на логотипе. Если загрузиться с флешки, запустить chkdsk C: /f, получаем ошибку «An unspecified error occured».


  1. Tsurik_ge
    30.11.2023 06:42

    По моему опыту нормально скопировать данные с неисправного SSD при подключении к другому ПК с Windows можно только в некоторых случаях из подгрупп А и Б. Когда диск работает стабильно - то есть не зависает и не пропадает из системы. Это если повезет.

    В диспетчере устройств отключается канал. В таком случае работа ведется с прямым доступом на порт с устройством.


    1. gumanzoy Автор
      30.11.2023 06:42

      Интересно. Можно подробней? И какой софт умеет так работать с SSD?


      1. Tsurik_ge
        30.11.2023 06:42

        На счет прямого копирования я ничего не подскажу. А вот диагностика намертво зависающих в BUSY накопителей замечательно диагностируется с помощью VICTORIA for windows. Режим контроллера в BIOS не должен быть AHCI. Это подходит для SATA и IDE. M2 тут сложнее. Может работать, а может нет. Смотря как материнскую плату реализовали. Отключить (Панель управления > Система > оборудование > контроллеры жестких дисков) тот канал IDE контроллера, к которому подключен испытуемый винчестер. Это нужно для того, чтобы программа могла обращаться напрямую к портам HDD. В виктории кнопка PCI скан, и ищем канал, на котором наш винчестер. После того как все сделали правильно и получили доступ к ,,Пациенту,, - зависания, отключение интерфейса ,,Пациента,, на горячую теперь не проблема, ибо операционная система Windows не знает о существовании такового. А значит спокойно можно делать диагностику, и, даже, при желании подлечить ,,Пациента,,. А в Виктории для этого есть все инструменты.

        Просто копировать подбитый жесткий диск можно попробовать Miray Hdclone. Такая, интересная программа, и во многом выручала в свое время.

        Ну а я нечаянно набрел на статью от Rozikа, о которой не знал, https://rlab.ru/doc/linuxharddatarecovery.html . Рекомендую https://www.youtube.com@VitaliyRozikRoziznany


        1. gumanzoy Автор
          30.11.2023 06:42
          +1

          Режим контроллера в BIOS не должен быть AHCI. Это подходит для SATA

          Вы это с SSD сами проверяли ? Или просто предположения. В статье я горорил именно о поведении SSD в Windows.

          Не спорю что Victoria вполне сносно с жесткими дисками в Windows работает.

          и, даже, при желании подлечить ,,Пациента,,

          SSD так не лечится. Они прошиваются производственными MPTool (почти все под Windows). Подбирать по модели контроллера и памяти. Обычно нужно замкнуть на плате SSD контакты, чтобы его в ROM Mode перевести.

          В общем спасибо за ваш комментарий. Но извините, он и о чем.


          1. Tsurik_ge
            30.11.2023 06:42

            1. В режиме ACHI невозможно отключить канал IDE, его в диспетчере задач не будет впринципе.

            2. Да, я работаю так, и неважно, твердотельник подключен, или жесткий.

            3. Софт для копирования есть, но платный. Даже WdMarwel заточенная под Western Digital копирует, ибо есть режим без инициализации диска. Проверил только что на Слетевшем A400 (Satafirm S11). Неплохо для SSD

            со слетевшим транслятором, но скорее всего половина будет мусор.

            1. Для ddrescue есть GUI. Ими нельзя пользоваться?, есть недостатки?


            1. gumanzoy Автор
              30.11.2023 06:42

              Софт для копирования есть, но платный. Даже WdMarwel заточенная под
              Western Digital копирует, ибо есть режим без инициализации диска.
              Проверил только что на Слетевшем A400 (Satafirm S11). Неплохо для SSD

              Интересно

              Точно не помню, но по моему когда модель становится Satafirm S11 то объем неправильно определяется. Тогда смысл что то копировать.

              Для ddrescue есть GUI. Ими нельзя пользоваться?, есть недостатки?

              Есть DDRescue_GUI на питоне. Последняя версия 2.1.1 от 2020г. Я им не пользовался. Он не поддерживает важные параметры например -O --reopen-on-error и -J --verify-on-error

              Пользуюсь для анализа логов ddrescueview на FreePascal написана. Есть в репозиториях дистрибутивов.


              1. Tsurik_ge
                30.11.2023 06:42
                +1

                По SSD на контроллере Phison 3111 . Любая проблема с транслятором приводит к активации защищенного режима (или как говорят слет прошивки). В моем случае похоже на переполнение дефект листов. Доступ полный к пользовательским данным, смарт отдает нормальный, но доступ к данным медленный и рывками. И вот тут яркий пример того, о чем вы говорите в статье. Да, накопитель под API WINDOWS отдает несколько мегабайт, и виснет намертво. А в режиме PIO отдает данные.непрерывно, хоть и с затыками. Снизу прикрепил пруф: Верхняя смарт, левая непрерывное чтение в режиме PIO, правая чтение нескольких мегабайт через API Windows, и висяк намертво. https://drive.google.com/file/d/1i01GyhKY0rvyEg8MhXCGeepSQKHYZHHI/view?usp=drive_link


                1. gumanzoy Автор
                  30.11.2023 06:42

                  Доступ полный к пользовательским данным, смарт отдает нормальный, но доступ к данным медленный и рывками.

                  А разметка в данном случае повреждена или нет ? MBR / GPT ?


                  1. Tsurik_ge
                    30.11.2023 06:42

                    Нет, структуры не видно...


                    1. gumanzoy Автор
                      30.11.2023 06:42

                      Нет, структуры не видно...

                      Софт для копирования есть, но платный. Даже WdMarwel копирует, ибо есть режим без инициализации диска.
                      Проверил только что на Слетевшем A400 (Satafirm S11).

                      Так удалось хотя бы начало диска скопировать ? Пробовали анализировать то что получилось c помощью например DMDE ?


                      1. Tsurik_ge
                        30.11.2023 06:42

                        Скопировал весь. Как-то кусками. https://drive.google.com/file/d/1nmoxHFa12LfAP2NnIyJjVjFzMEGm-kiL/view?usp=sharing Здесь другой опыт будет важен. Восстановить, Слить дамп, и сравнить.Но это чуть позже.


  1. Naves
    30.11.2023 06:42

    Когда-то похожий функционал обещали доделать в WHDD

    https://www.opennet.ru/opennews/art.shtml?num=37297

    Непонятно чем закончилось, как будто все заброшено...


  1. AVX
    30.11.2023 06:42

    Ещë один тип (подтип) неисправностей - может читать, может писать, но при чередовании чтения и записи (да и при обычной работе ОС) - попытки записи вызывают ошибки.

    Я такой intel 535 серии сдал по гарантии производителя, 4 года отработал (гарантия была 5 лет). Данные все скопировал без особых проблем (не считая некоторых битых файлов за период когда начал он сбоить и до того, как я с него скопировал всë).


  1. LuxorAB
    30.11.2023 06:42

    В случае неисправности SSD - Windows либо не загружается (висит на лого или заходит в UEFI Setup), либо глючит, зависает, не может установить обновления или корректно завершить работу.

    А у меня вот 2ТБ M.2 Mushkin лежит с которым даже до UEFI/BIOS добраться не получается :C

    Благо хоть ничего важного на нём не было


    1. gumanzoy Автор
      30.11.2023 06:42

      Да это частая проблема с NVMe. Либо висит на логотипе. Либо даже Linux с флешки в процессе загрузки стопорится.

      И кстати это вовсе не значит что он совсем не читается. Ради интереса попробуйте подключить через USB3 бокс/докстанцию. Желательно в Linux.

      Ну и можно посмотреть какой там контроллер и поискать на него MPTool, и как его в ROM Mode перевести. Возможно получится оживить.


  1. HardWrMan
    30.11.2023 06:42
    +2

    Да в компьютерных корпусах эти кнопки до сих пор есть, даже не верится.

    Вот современный ноутбук с зависшей Windows 10 так просто не перезагрузишь.

    Часто эта ОС зависает так что показывает только черный экран. А по матрице ноутбука и не всегда видно что горит подсветка, и ноутбук на самом деле включен.

    Горят только индикаторы включения и зарядки на корпусе. При нажатии на кнопку включения он будет уходить в спящий режим, и снова просыпаться зависшим, пока его не отключат от БП.

    А уже полежав без дела какие то часы и высадив в 0% аккумулятор, будучи принесенным в сервис, включится и загрузится там как ни в чем не бывало.

    Отсутствие кнопки сброса на ноутах компенсируется зажатием кнопки включения питания более 5 секунд. Происходит полное отключение, эквивалент выдёргивания шнура у десктопа. И не надо ждать разрядки батареи.


    1. gumanzoy Автор
      30.11.2023 06:42
      +1

      Вот вы знаете. И я знаю. А пользователи ноутбуков не знают, несут в сервис и удивляются.

      Я вам больше скажу. На всех Asus начиная где то с 2020-2021гг даже если индикации нет нужно отключить БП, зажать и держать кнопку 30сек, а лучше минуту - это сброс EC. После этого подключить БП и если помогло то индикация появится и ноутбук включится.


      1. Desem
        30.11.2023 06:42

        а что такое ЕС в данном случае ?


        1. gumanzoy Автор
          30.11.2023 06:42

          Embedded Controller. Это такие чипы. Или аналогичный есть на каждой плате.

          Asus FAQ [Notebook/AIO] How to Perform an Embedded Controller (EC) Reset / Hard Reset


      1. HardWrMan
        30.11.2023 06:42
        +1

        Вот вы знаете. И я знаю. А пользователи ноутбуков не знают, несут в сервис и удивляются.

        Это знают все юзеры, кроме русских, потому что русские считают что руководство по эксплуатации для слабаков. Именно поэтому оно в русской секции должно начинаться со слов "Что, придурок, сломал?".


  1. gumanzoy Автор
    30.11.2023 06:42

    Вот пример работы со скрпитом

    Вкратце когда в dmesg: sdc: detected capacity change from 240057409536 to 0
    То ddrescue перестает читать: ddrescue: Can't reopen input file: No medium found

    Происходит DDLOOP #1

    Кусок dmesg

    ata6: hard resetting link
    ata6: COMRESET failed (errno=-16)
    ata6: reset failed, giving up
    ata6.00: disabled
    ...
    sdc: detected capacity change from 240057409536 to 0
    ...
    sd 5:0:0:0: [sdc] Stopping disk
    sd 5:0:0:0: [sdc] Start/Stop Unit failed: Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
    ata6: link is slow to respond, please be patient (ready=0)
    ata6: COMRESET failed (errno=-16)
    ata6: link is slow to respond, please be patient (ready=0)
    ...
    ata6: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
    ata6.00: ATA-10: Western Digital SSD 240GB, ZD0R3G40, max UDMA/133
    ata6.00: 468862128 sectors, multi 1: LBA48 NCQ (depth 32), AA


    1. gumanzoy Автор
      30.11.2023 06:42

      Исправление v0.1.1

      Теперь можно задавать таймаут больше чем установлен по умолчанию в ядре
      Linux. Оказалось что это позволяет ядру дожидаться ответа диска вместо
      оправок команды ataN: hard resetting link

      -act 200 показывает себя хорошо случае с этим SSD Western Digital SSD 240GB.


    1. gumanzoy Автор
      30.11.2023 06:42

      Продолжаю. Перезапустил с размером сектора 16K, вместо 4K. Побыстрее пошло -b 16Ki

      ddrescue-loop -ata 6 -loop 9999 -act 200 /dev/loop0 WD240.log -b 16Ki -O -P -m domain.map -u -r -1 -n


      1. Johan_Palych
        30.11.2023 06:42

        echo "-m <domain.mapfile>"" ""Ограничить область чтения доменом ddru_ntfsbitmap"

        Вычисляете смещение раздела NTFS до запуска скрипта?
        https://sourceforge.net/p/ddrutility/wiki/Home/


        1. gumanzoy Автор
          30.11.2023 06:42

          Вычисляете смещение раздела NTFS до запуска скрипта?

          Разумеется. Еще получаю сразу --mftdomain файл.map и сначала по нему вычитываю. После этого можно уже запустить DMDE и посмотреть что там есть.


      1. gumanzoy Автор
        30.11.2023 06:42

        Еще модификация строки запуска. Вернул размер сектора 4K, но добавил -c 8 то есть читать по 8 секторов за раз. По умолчанию 128 и с этим значением прошивка SSD сильно тупила. 32K за раз отрабатывает стабильно.