The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Раздел полезных советов: Cкрипт ddrescue-loop с функцией автоматической остановки/перезапуска диска на SATA порту"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Cкрипт ddrescue-loop с функцией автоматической остановки/перезапуска диска на SATA порту"  +/
Сообщение от auto_tips (??), 29-Ноя-23, 20:01 
Cкрипт [[https://vk.com/doc14960727_670930009 ddrescue-loop v0.1]] с функцией автоматической остановки/перезапуска диска на SATA порту.

Предназначен для упрощения процесса восстановления данных с неисправных SATA SSD. В случаях когда после ошибок чтения - SSD перестает возвращать данные и требует остановки/перезапуска.

Для работы не требуется реле для отключения питания.
Использует интерфейсы ядра udev /dev и sysfs /sys.

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

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

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

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

Функция циклической остановки/перезапуска диска на SATA порту:

   -loop N Предельное число попыток N целое число. Указывать обязательно.

Таймер ожидания остановки/перезапуска диска:
   -wait N Время в секундах. 10 по умолчанию.

В конце после mapfile можно указать опции запуска ddrescue

Код ddrescue-loop:

#!/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

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> [1..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 -a "$2" -lt 30 ]; 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


URL: https://vk.com/doc14960727_670930009
Обсуждается: http://www.opennet.dev/tips/info/3236.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от Аноним (1), 29-Ноя-23, 20:01   –3 +/
>ixbt.com

Сразу ффтопку.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #2

2. Сообщение от gumanzoyemail (?), 29-Ноя-23, 20:37   +3 +/
Зря вы так. Это ссылка на форум а не на новостной сайт.
Прочитайте тему там дельные рекомендации и кейсы успешных восстановлений.
https://forum.ixbt.com/topic.cgi?id=11:47589
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #3, #6

3. Сообщение от Аноним (3), 29-Ноя-23, 22:42   +1 +/
> кейсы

Примеры, случаи, истории.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #4

4. Сообщение от Аноним (4), 30-Ноя-23, 00:37   +/
Примечательнее, что код небрежно без отступов. Небрежно - небрежение к читателю.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #5

5. Сообщение от gumanzoyemail (?), 30-Ноя-23, 00:56   –4 +/
Если нет вложенных if 2 и более уровня. То не делаю отступы.
Мне наоборот так больше нравится. Тут уже на вкус и цвет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4

6. Сообщение от Аноним (-), 30-Ноя-23, 01:35   +/
> Зря вы так. Это ссылка на форум а не на новостной сайт.

Хобот нынче не работает без JS. И вообще - изг@внякали форум до полной непригодности как по мне. И регистрация требуется в обязаловку. Когда-то был прикольный форум - но сейчас скатился куда-то.

И кстати еще для линуксоидов стоит упомянуть (открытую) программу WHDD для тестирования поверхности и чтения. Имеет жирное преимущество: умеет работать через SCSI команды в обход обычного интерфейса кернела. А также понимает как читать побитые диски правильно. И ... есть недостаток: размер блока все ж здоровый. Урон неоптимальный. Но иногда очень полезно SCSI командами вместо насилования кернела, он довольно криво реагирует на побитые диски временами.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #7

7. Сообщение от gumanzoyemail (?), 30-Ноя-23, 08:50   +1 +/
Про WHDD знаю и использую. Но она тут ни причем. Все же больше для диагностики.

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #9

8. Сообщение от gumanzoyemail (?), 30-Ноя-23, 09:22   +/
Вот пример работы скрпита и выхлоп dmesg

https://dpaste.org/wBgp2/raw

Когда в 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
ata6.00: configured for UDMA/133
scsi 5:0:0:0: Direct-Access     ATA      Western Digital  3G40 PQ: 0 ANSI: 5
sd 5:0:0:0: [sdc] 468862128 512-byte logical blocks: (240 GB/224 GiB)
sd 5:0:0:0: [sdc] Write Protect is off
sd 5:0:0:0: [sdc] Mode Sense: 00 3a 00 00
sd 5:0:0:0: Attached scsi generic sg3 type 0
sd 5:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
sdc: sdc1 sdc2 sdc3
sd 5:0:0:0: [sdc] Attached SCSI removable disk

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #10, #15

9. Сообщение от Аноним (-), 30-Ноя-23, 09:38   +/
> Про WHDD знаю и использую. Но она тут ни причем. Все же
> больше для диагностики.

В некоторых случаях - и для вычитки бывает полезна, если диск тупит и кернел постоянно пытается его ресетнуть - чем делает только хуже. Эта штука писана кем-то практикующим DataRecovery, по образу и подобию Виктории. Откуда и такое вот умение. Чем и интересно.

>> Но вообще реинециализацию девайсов без острой нужды лучше не делать, если
>> служебка не прочтется девайс может не выйти на режим - и гудбай, тогда с него вообще
>> нифига не прочитать уже.
> Данный скрит только для SSD о чем написал в самом начале. С
> ними нет такой проблемы как что то читалось, а затем перестанет
> читаться. Все стабильно.

Ну это да, для SSD - причин к такому раскладу сильно меньше.

> Для неисправных жестких дисков такой метод и не поможет скорее всего. Диск
> не остановится и нужно будет пере-подключать питание.

Я пару раз делал ремотно вон то - там не вариант, пришлось выкручиваться ресетами и ресканами если девайс уходил в себя насовсем.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7 Ответы: #13

10. Сообщение от Аноним (-), 30-Ноя-23, 10:49   +/
> 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)

Если девайс со временем вышел из комы сам то может катить что-то типа...

echo "- - -" > /sys/class/scsi_host/host1/scan
// Это вообще рескан на нужном scsi-контроллере чтобы найти отпавший девайс.

echo 1 > /sys/block/sdb/device/rescan
// А это вернет ему правильную емкость...


Разумеется девайс и scsi_host надо заменить на актуальные.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8 Ответы: #11, #12

11. Сообщение от gumanzoyemail (?), 30-Ноя-23, 10:57   +/
Вы почти пересказали то что делает мой скрипт.

Но я сначала удаляет echo 1 > /sys/block/sdb/device/delete
Затем echo '0 0 0' > /sys/class/scsi_host/host1/scan

А пути по которым писать в /sys получает из /sys/class/ata_port/ataN по номеру SATA порта.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10

12. Сообщение от gumanzoyemail (?), 30-Ноя-23, 11:01   +/
> Если девайс со временем вышел из комы сам то может катить что-то

Нет сам не оживает. В примере он ожил как раз из за удаления и повторного сканирования хоста скрпитом.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10 Ответы: #18

13. Сообщение от gumanzoyemail (?), 30-Ноя-23, 11:26   +1 +/
> если диск тупит и кернел постоянно пытается его ресетнуть - чем делает только хуже.

А не пробовали увеличивать /sys/block/sdb/device/timeout ? По умолчанию 30. Я наоборот уменьшаю для моих случаев.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #14, #16

14. Сообщение от gumanzoyemail (?), 30-Ноя-23, 12:07   +/
Блин. Выставил 200 оказалось что лучше дело пошло. Без лишних hard resetting link

Тогда нужно скрипт чуть поправить

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

Убрать ограничение -a "$2" -lt 30

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #13

15. Сообщение от gumanzoyemail (?), 30-Ноя-23, 17:31   +/
Продолжаю. Перезапустил с размером сектора 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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8 Ответы: #19

16. Сообщение от Аноним (-), 30-Ноя-23, 23:56   +1 +/
>> если диск тупит и кернел постоянно пытается его ресетнуть - чем делает только хуже.
> А не пробовали увеличивать /sys/block/sdb/device/timeout ? По умолчанию 30.
> Я наоборот уменьшаю для моих случаев.

В ряде случаев это может сработать. Суть проблемы:
1) Кернел кидает команду.
2) Девайс испытывает проблемы, скажем нечитаемый сектор, и надолго задумывается, пытаясь retry дофига раз или что там еще, кто ж его фирмвару знает что она там делает внутрях столько.
3) Кернел начинает истерить, ресетя девайс.
4) Поскольку интерфейс рюхается тоже фирмрварью (сюрприз!) это может иметь не совсем тот эффект и зачастую ведет к "рассинхрону".
5) Кернел пытается в ресет и рескан.
6) фирмвар все еще занят командой из 1) - и ему все эти потуги похрен.
7) Кернел теряет девайс, recovery failed.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #13 Ответы: #17

17. Сообщение от Аноним (-), 01-Дек-23, 00:02   +1 +/
> 7) Кернел теряет девайс, recovery failed.
> А если таки погодить энное время и пнуть рескан, девайс зачастую сам
> выходит из комы. Скан его находит, рескан блочного девайса возвращает размер.

А, главное забыл: при чтении через SCSI команды вся эта чудная логика ядра - не у дел, так что причуд может быть сильно меньше. Но зачем у WHDD такие большие блоки - вопрос. Или я перфекционист, который чаще всего заканчивает тем что потеряно лишь с десяток намертво нечитаемых секторов на 4К, если не 512 байтов, и рекавери - flawless или крайне близок к этому.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #16

18. Сообщение от Аноним (-), 01-Дек-23, 00:08   +1 +/
>> Если девайс со временем вышел из комы сам то может катить что-то
> Нет сам не оживает. В примере он ожил как раз из за
> удаления и повторного сканирования хоста скрпитом.

Про оживание девайса я насчет фирмварного уровня имел в виду. Кернел сам это не прочухает без таких пинков - вон то по сути десинк протокольной логики, когда фимвар долго жует команду, с пофигом на все, а кернел пытается истерить и в результате потуг делает еще хуже и вообще теряет девайс - который не отвечает на все эти потуги. Ибо фирмвар все еще жует вон ту команду.

Я просто заметил что через несколько минут девайс таки зачастую попускает, видимо команда таки таймаутится и вот тут уже рескан все возвращает в виде как надо, кернел радостно находит девайс.... но вообще это все и показывает зачем надо режим чтения через SCSI команды. Чтобы с обычной логикой кернела в IO поменьше общаться. Если девайс битый, она - таки "не очень", особенно в дефолтном виде.

А передерг девайса кернелом таки часто не срабатывает если девайс задумался и ведет к протокольному десинку с потерей девайса. Другое дело что у кернела и выбора так то не сильно много что делать с "зависшим" девайсом.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12

19. Сообщение от Аноним (-), 01-Дек-23, 00:16   +/
> Продолжаю. Перезапустил с размером сектора 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

Я разок смухлевал выччитав whdd большие блоки а потом сконвертив его логи чтения в формат myrescue, кажется, только там уже вместо тех больших блоков - мелкие нативные сектора. Идея такая что при конверсии битмапы мы маркируем все сектора большого блока как успешные в терминах адресата конверсии(с мелкими блоками), а неуспешные - ну, как неуспешные. И вон то более мелкими блоками дожать остатки. И там было просто, типа конверсии битмапа в битмап с раздуванием в эн раз. Так можно попытаться состыковать более разумное время bulk чтения с высоким КПД recovery в целом. И накодить такое не сильно долго.

В любом случае, удачи в рекавери. Поклацав по вашему профайлу и посмотрев новость про открытие некоей проги - я там и в профайле гитхаба автора нашел интереснейших ссылей. За что и спасибо.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15 Ответы: #20, #21

20. Сообщение от gumanzoyemail (?), 01-Дек-23, 00:52   +/
> В любом случае, удачи в рекавери. Поклацав по вашему профайлу и посмотрев новость про открытие некоей проги - я там и в профайле гитхаба автора нашел интереснейших ссылей. За что и спасибо.

Про hddsuperclone и форк opensuperclone ?

Странно что раньше не знали. Но вообще разочарование.
Модуль собирается, но
Режим Direct AHCI не видит диски на моей плате. Проверял с ядром 5.10

Режим Direct IDE использовал 1 раз в бесплатной версии еще до открытия.
С 32bit ядром 4.4

Тогда удалось с особо медленного жесткого диска инфу выдернуть успешно. Недели 2-3 заняло.

Для жестких дисков некоторых Passthrough auto detect был быстрее чем ddrescue

Для SSD последнее время сколько ни пробовал - они отваливаются в Passthrough auto detect режиме
Причем или на окне выбора источника все зависает либо если удалось выбрать то уже в процессе
Этот GUI дурацкий каждый раз все заново тыкать выбирать.

SSD все восстанавливаю ddrescue

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19 Ответы: #24

21. Сообщение от gumanzoyemail (?), 01-Дек-23, 11:20   +/
> Я разок смухлевал выччитав whdd большие блоки а потом сконвертив его логи чтения в формат myrescue, кажется, только там уже вместо тех больших блоков - мелкие нативные сектора. Идея такая что при конверсии битмапы мы маркируем все сектора большого блока как успешные в терминах адресата конверсии(с мелкими блоками), а неуспешные - ну, как неуспешные. И вон то более мелкими блоками дожать остатки. И там было просто, типа конверсии битмапа в битмап с раздуванием в эн раз. Так можно попытаться состыковать более разумное время bulk чтения с высоким КПД recovery в целом. И накодить такое не сильно долго.

Теоретически можно так:
Первый проход запускаем ddrescue -d -b 64Ki in out 1pass.map
Вычитываем полностью со scrapping
Затем инвертируем полученный mapфайл чтобы превратить его в файл домена для ограничения по чтению.
ddrescuelog --invert-mapfile 1pass.map > 2pass.dom.map
То есть все бэды которые там есть станут финишед и только по ним будем читать второй проход.
ddrescue -d -b 4096 in out 2pass.map -m 2pass.dom.map

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19

22. Сообщение от Kuromi (ok), 03-Дек-23, 01:42   +/
Все это здорово, но мне попадались материнки (причем не древние) у которых не было Hot Swap вообще. Может он и есть, но в UEFI\BIOS настройки нет. Почему - непонятно, возможно производители считают что это никому не нужно.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #23

23. Сообщение от gumanzoyemail (?), 03-Дек-23, 10:20   +/
Какой чипсет ?

Вообще на старых чипсетах они и без Hot Swap работает. На современных нужно включать.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #22 Ответы: #25, #27

24. Сообщение от Аноним (24), 04-Дек-23, 15:00   +/
> Про hddsuperclone и форк opensuperclone ?

Да, там в профайле гитхаба его автора нашлось немало забавных артефактов. Например какой-то "типа сервистул" для alcor чтоли. Я питаю определенную слабость к таким артефактам.

> Для жестких дисков некоторых Passthrough auto detect был быстрее чем ddrescue

Я поймал себя на том что часто юзал MyRescue. А пару раз даже корябал утилитки под местные нужды. Скажем какой-то SD карте я по приколу вправил транслятор переписав всю площадь несколькими паттернами несколько раз. До сих пор пашет. Но памятуя о слете транслятора - выдергивать ЭТО на ходу ессно ненене, уже проверено кем-то что голимая идея :). А мне было интересно проверить теорию перестроится ли трансляция если несколько раз проехать по всей площади. Вроде прокатило.

> Для SSD последнее время сколько ни пробовал - они отваливаются в Passthrough
> auto detect режиме Причем или на окне выбора источника все зависает либо если
> удалось выбрать то уже в процессе Этот GUI дурацкий каждый раз все заново тыкать
> выбирать. SSD все восстанавливаю ddrescue

Если честно я вообще не особый фанат GUI для подобных вещей, текстовые штуки проще при случае немного скриптануть под какие-то странные причуды и проч. Которых в таких случаях разумеется можно отхватить.

А кстати не знаете? Я как-то WDшник вбил в safe mode по заполнению дефект листа, он при таком зарубает все кроме 1-секторного чтения. Интересно линухкернел/libata реально заставить такое жрать? Ему можно мультисекторный DMA READ запретить? Я правда доигрался уже когда образа нормально отстроил и пытался в перфекционизм, минимищацию урона, так что на рекавери не повлияло, но интересно стало.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #20 Ответы: #26

25. Сообщение от Аноним (24), 04-Дек-23, 15:04   +/
> Какой чипсет ? Вообще на старых чипсетах они и без Hot Swap работает.
> На современных нужно включать.

Может от контроллера зависит? Линух зачастую довольно брутально реинициализирует многие чипы, вплоть до того что в BIOS как IDE mode, но кернел видит кто это, переключает в AHCI - и работает с ним как обычно с AHCI, клав на эти настройки bios.

Но это все - не всегда. Некоторые чипы так не умеет. И видит как, реально, IDE в таком случае. Я так понимаю степень реинициализации чипа после системного фирмваре - "варьируется".

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #23

26. Сообщение от gumanzoyemail (?), 05-Дек-23, 07:54   +/
> А кстати не знаете? Я как-то WDшник вбил в safe mode по заполнению дефект листа, он при таком зарубает все кроме 1-секторного чтения. Интересно линухкернел/libata реально заставить такое жрать? Ему можно мультисекторный DMA READ запретить? Я правда доигрался уже когда образа нормально отстроил и пытался в перфекционизм, минимищацию урона, так что на рекавери не повлияло, но интересно стало.

hddsuperclone --tool -t /dev/sdX -f /usr/local/bin/hddscripts/ata_disable_look_ahead

Возможно то же самое можно сделать hdparm -a или hdparm -A0

И ddrescue запускать с ключем -c 1 тогда будет по одному сектору читать.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #24

27. Сообщение от n80 (?), 07-Дек-23, 00:25   +/
Тут не в чипсете дело, а в дурном BIOS. Например, Dell на своих фирменных десктопах таким грешит, обидно было.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #23

28. Сообщение от gumanzoyemail (?), 25-Дек-23, 14:21   +/
Скрипт ddrescue-loop v0.2.1 https://vk.com/doc-204653987_671457736
С поддержкой восстановления с USB и Power-off and power-on cycle посредством USB Relay Module LCUS-1 CH340 либо uhubctl
https://forum.ixbt.com/topic.cgi?id=11:47589:736#736
Ответить | Правка | Наверх | Cообщить модератору

29. Сообщение от gumanzoyemail (?), 11-Окт-24, 19:30   +/
Скрипт ddrescue-loop v0.2.3 https://vk.com/doc-204653987_681378719
Добавлен перевод showhelp на английский язык.
Исправление для возможности работы с SATA устройствами при отсутствии /dev/disk/by-path/ (наблюдается при использовании eudev вместо udev).
Ответить | Правка | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру