Первая версия 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 устройства в подсистему SCSIsd
- 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
#!/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
Системные требования
Скрипт будет работать только в 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)
kasumiru
30.11.2023 06:42+1Неисправный SSD нужно подключать уже после загрузки системы.
интересно как же быть с M2, который вытесняет на рынке обычный sata.
gumanzoy Автор
30.11.2023 06:42M.2 подключаются через USB3 докстанцию. С ними те же проблемы. То есть отваливаются при ошибках.
Пока помогает только отключение питания. У меня уже есть мысли что попробовать. Например
usb_modeswitch -v 0x152d -p 0x0583 --reset-usb
Но на практике заставить это работать пока не получилось.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
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
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».
Tsurik_ge
30.11.2023 06:42По моему опыту нормально скопировать данные с неисправного SSD при подключении к другому ПК с Windows можно только в некоторых случаях из подгрупп А и Б. Когда диск работает стабильно - то есть не зависает и не пропадает из системы. Это если повезет.
В диспетчере устройств отключается канал. В таком случае работа ведется с прямым доступом на порт с устройством.
gumanzoy Автор
30.11.2023 06:42Интересно. Можно подробней? И какой софт умеет так работать с SSD?
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
gumanzoy Автор
30.11.2023 06:42+1Режим контроллера в BIOS не должен быть AHCI. Это подходит для SATA
Вы это с SSD сами проверяли ? Или просто предположения. В статье я горорил именно о поведении SSD в Windows.
Не спорю что Victoria вполне сносно с жесткими дисками в Windows работает.
и, даже, при желании подлечить ,,Пациента,,
SSD так не лечится. Они прошиваются производственными MPTool (почти все под Windows). Подбирать по модели контроллера и памяти. Обычно нужно замкнуть на плате SSD контакты, чтобы его в ROM Mode перевести.
В общем спасибо за ваш комментарий. Но извините, он и о чем.
Tsurik_ge
30.11.2023 06:42В режиме ACHI невозможно отключить канал IDE, его в диспетчере задач не будет впринципе.
Да, я работаю так, и неважно, твердотельник подключен, или жесткий.
Софт для копирования есть, но платный. Даже WdMarwel заточенная под Western Digital копирует, ибо есть режим без инициализации диска. Проверил только что на Слетевшем A400 (Satafirm S11). Неплохо для SSD
со слетевшим транслятором, но скорее всего половина будет мусор.
Для ddrescue есть GUI. Ими нельзя пользоваться?, есть недостатки?
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 написана. Есть в репозиториях дистрибутивов.
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
gumanzoy Автор
30.11.2023 06:42Доступ полный к пользовательским данным, смарт отдает нормальный, но доступ к данным медленный и рывками.
А разметка в данном случае повреждена или нет ? MBR / GPT ?
Tsurik_ge
30.11.2023 06:42Нет, структуры не видно...
gumanzoy Автор
30.11.2023 06:42Нет, структуры не видно...
Софт для копирования есть, но платный. Даже WdMarwel копирует, ибо есть режим без инициализации диска.
Проверил только что на Слетевшем A400 (Satafirm S11).Так удалось хотя бы начало диска скопировать ? Пробовали анализировать то что получилось c помощью например DMDE ?
Tsurik_ge
30.11.2023 06:42Скопировал весь. Как-то кусками. https://drive.google.com/file/d/1nmoxHFa12LfAP2NnIyJjVjFzMEGm-kiL/view?usp=sharing Здесь другой опыт будет важен. Восстановить, Слить дамп, и сравнить.Но это чуть позже.
Naves
30.11.2023 06:42Когда-то похожий функционал обещали доделать в WHDD
https://www.opennet.ru/opennews/art.shtml?num=37297
Непонятно чем закончилось, как будто все заброшено...
AVX
30.11.2023 06:42Ещë один тип (подтип) неисправностей - может читать, может писать, но при чередовании чтения и записи (да и при обычной работе ОС) - попытки записи вызывают ошибки.
Я такой intel 535 серии сдал по гарантии производителя, 4 года отработал (гарантия была 5 лет). Данные все скопировал без особых проблем (не считая некоторых битых файлов за период когда начал он сбоить и до того, как я с него скопировал всë).
LuxorAB
30.11.2023 06:42В случае неисправности SSD - Windows либо не загружается (висит на лого или заходит в UEFI Setup), либо глючит, зависает, не может установить обновления или корректно завершить работу.
А у меня вот 2ТБ M.2 Mushkin лежит с которым даже до UEFI/BIOS добраться не получается :C
Благо хоть ничего важного на нём не было
gumanzoy Автор
30.11.2023 06:42Да это частая проблема с NVMe. Либо висит на логотипе. Либо даже Linux с флешки в процессе загрузки стопорится.
И кстати это вовсе не значит что он совсем не читается. Ради интереса попробуйте подключить через USB3 бокс/докстанцию. Желательно в Linux.
Ну и можно посмотреть какой там контроллер и поискать на него MPTool, и как его в ROM Mode перевести. Возможно получится оживить.
HardWrMan
30.11.2023 06:42+2Да в компьютерных корпусах эти кнопки до сих пор есть, даже не верится.
Вот современный ноутбук с зависшей Windows 10 так просто не перезагрузишь.
Часто эта ОС зависает так что показывает только черный экран. А по матрице ноутбука и не всегда видно что горит подсветка, и ноутбук на самом деле включен.
Горят только индикаторы включения и зарядки на корпусе. При нажатии на кнопку включения он будет уходить в спящий режим, и снова просыпаться зависшим, пока его не отключат от БП.
А уже полежав без дела какие то часы и высадив в 0% аккумулятор, будучи принесенным в сервис, включится и загрузится там как ни в чем не бывало.
Отсутствие кнопки сброса на ноутах компенсируется зажатием кнопки включения питания более 5 секунд. Происходит полное отключение, эквивалент выдёргивания шнура у десктопа. И не надо ждать разрядки батареи.
gumanzoy Автор
30.11.2023 06:42+1Вот вы знаете. И я знаю. А пользователи ноутбуков не знают, несут в сервис и удивляются.
Я вам больше скажу. На всех Asus начиная где то с 2020-2021гг даже если индикации нет нужно отключить БП, зажать и держать кнопку 30сек, а лучше минуту - это сброс EC. После этого подключить БП и если помогло то индикация появится и ноутбук включится.
Desem
30.11.2023 06:42а что такое ЕС в данном случае ?
gumanzoy Автор
30.11.2023 06:42Embedded Controller. Это такие чипы. Или аналогичный есть на каждой плате.
Asus FAQ [Notebook/AIO] How to Perform an Embedded Controller (EC) Reset / Hard Reset
HardWrMan
30.11.2023 06:42+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), AAgumanzoy Автор
30.11.2023 06:42Исправление v0.1.1
Теперь можно задавать таймаут больше чем установлен по умолчанию в ядре
Linux. Оказалось что это позволяет ядру дожидаться ответа диска вместо
оправок командыataN: hard resetting link
-act 200
показывает себя хорошо случае с этим SSD Western Digital SSD 240GB.
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
Johan_Palych
30.11.2023 06:42echo "-m <domain.mapfile>"" ""Ограничить область чтения доменом ddru_ntfsbitmap"
Вычисляете смещение раздела NTFS до запуска скрипта?
https://sourceforge.net/p/ddrutility/wiki/Home/gumanzoy Автор
30.11.2023 06:42Вычисляете смещение раздела NTFS до запуска скрипта?
Разумеется. Еще получаю сразу
--mftdomain файл.map
и сначала по нему вычитываю. После этого можно уже запустить DMDE и посмотреть что там есть.
gumanzoy Автор
30.11.2023 06:42Еще модификация строки запуска. Вернул размер сектора 4K, но добавил
-c 8
то есть читать по 8 секторов за раз. По умолчанию 128 и с этим значением прошивка SSD сильно тупила. 32K за раз отрабатывает стабильно.
gumanzoy Автор
Вот пример работы со скрпитом
Вкратце когда в 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