Копирование вывода dd на консоль в файл, а также в консоль

224
Ansel Pol

Я пытаюсь создать образ жесткого диска, используя 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 ГБ).

Спасибо!

0
Даже если вы остановите `dd`, он все равно должен генерировать сообщения завершения с входящими и исходящими записями и количеством скопированных байтов, если вы не используете` kill -15`. AFH 6 лет назад 0
Я знаю об этом и только что завершил его с помощью ^ C. Ansel Pol 6 лет назад 0
Тогда вы должны были получить сводные строки, если только [Атти] (https://superuser.com/users/707676/attie) не будет верным предположением, что `dd` никогда не запускается, хотя я не могу воспроизвести прогон без вывод - я всегда получаю итоговые строки. AFH 6 лет назад 0
Вы можете проверить, действительно ли `dd` запущен после запуска команды` sudo`, набрав `ps -efl | grep "dd" в другом терминале. AFH 6 лет назад 1

1 ответ на вопрос

1
Attie

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

Вызов прост:

Первый забег:

  • -p - предварительно выделить место
  • -b 4M - использовать большой размер сектора для скорости
ddrescue -p -b 4M $ $ $ 

Последующие запуски: (в отличие от этого dd, вы можете запустить его несколько раз, и он продолжит с того места, на котором остановился, обращаясь к файлу журнала)

  • -b 512 - использовать меньший размер сектора, чтобы попытаться заполнить пробелы
  • -r 10 - использовать несколько повторов
ddrescue -b 512 -r 10 $ $ $ 

Разделы с ошибками чтения будут (по умолчанию) содержать нули, и вы получите файл журнала, подобный приведенному ниже:

# 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 

В прямой ответ на ваш вопрос:

  1. Вы, вероятно, столкнулись с проблемой буферизации ... вы, вероятно, увидите, что сразу появляется много строк, а потом ничего больше - посмотрите на unbuffer
  2. sudo возможно, спрашивает пароль, но вы перенаправили приглашение прочь ... так что ничего не происходит.
Разве опция -p не займет много времени (около пары часов, в зависимости от скорости, которую я получаю с dd: около 70 МБ / с по USB3), чтобы создать файл 500 ГБ на целевом диске до запуска спасти? Если бы это была проблема с приглашением `sudo`, разве приглашение` sudo` не передавалось бы терминалу, а также файлу журнала из-за `tee`? Ansel Pol 6 лет назад 0
Я собирался ответить "_no, потому что редкие файлы_", но потом вспомнил, что `ddrescue` будет избегать создания разреженных файлов, если не получено указание сделать это ... Я был бы признателен, если бы вы могли попробовать с / без и посмотреть, что результат есть! Attie 6 лет назад 0
Re `sudo` - я не могу вспомнить, если он умен и повторно открывает tty, то все будет в порядке ... в противном случае, он будет перенаправлен на стандартный вывод и затем помещен в буфер между` sudo` и `tee` до тех пор, пока буфер не станет достаточно полным для записи ... так что, возможно, нет. Attie 6 лет назад 0

Похожие вопросы