
Я пытаюсь создать образ жесткого диска с помощью dd, который выдает ошибки ввода-вывода. В результате я добавил параметр 'noerror', но я хотел бы отслеживать ошибки, чтобы попытаться восстановить их.
Моя текущая попытка такова:
sudo dd if=/dev/sdb bs=1M conv=sync,noerror of=output.img 2>&1 | tee output.log
При этом создаются как output.img, так и output.log, но оба имеют размер 0 байт, и при завершении dd на терминал не выводится никакой вывод.
Я бы предпочел попробовать dd с опцией «noerror» перед такими инструментами, как ddrescue, поскольку я более знаком с dd.
Кроме того, этот диск содержит один раздел NTFS, поэтому были бы признательны за указания о том, как восстановить раздел NTFS с отсутствующими битами (объем диска составляет 500 ГБ, а первая ошибка, с которой я столкнулся, была около 30 ГБ).
Спасибо!
решение1
Я настоятельно рекомендую вам просто использоватьddrescue
- не избегайте инструмента, который подходит для работы, работать с ним несложно, и вы сэкономите себе нервы.
Вызов прост:
Первый забег:
-p
- предварительно распределить пространство-b 4M
- используйте большой размер сектора для скорости
ddrescue -p -b 4M ${SRC_DISK} ${DST_IMAGE} ${DST_LOGFILE}
Последующие запуски: (в отличие от dd
, вы можете запустить его несколько раз, и он продолжится с того места, на котором остановился, ссылаясь на файл журнала)
-b 512
- используйте меньший размер сектора, чтобы попытаться заполнить пробелы-r 10
- использовать несколько повторных проходов
ddrescue -b 512 -r 10 ${SRC_DISK} ${DST_IMAGE} ${DST_LOGFILE}
Разделы с ошибками чтения будут (по умолчанию) содержать нули, и вы получите файл журнала, подобный следующему:
# pos size status
0x00000000 0x00014E00 +
0x00014E00 0x00000200 -
0x00015000 0x00005800 +
0x0001A800 0x00000200 -
0x0001AA00 0x00028000 +
0x00042A00 0x00000200 -
0x00042C00 0x00125400 +
Отмеченные линии +
— это регионы без ошибок, отмеченные линии -
— это регионы с ошибками.
В зависимости от характера ошибок чтения вам, возможно, придется рассмотреть некоторые из следующих вариантов:
-d, --direct
use direct disc access for input file
-K, --skip-size=<min>[,<max>]
initial size to skip on read error [64 KiB]
-M, --retrim
mark all failed blocks as non-trimmed
-O, --reopen-on-error
reopen input file after every read error
-r, --retry-passes=<n>
exit after <n> retry passes (-1=infinity) [0]
-R, --reverse
reverse the direction of all passes
Прямой ответ на ваш вопрос:
- Вероятно, вы столкнулись с проблемой буферизации... вы, скорее всего, увидите множество строк, появляющихся одновременно, а затем снова ничего — посмотрите на
unbuffer
sudo
возможно, запрашивается пароль, но вы перенаправили запрос... поэтому ничего не происходит.