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

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

Я пытаюсь создать образ жесткого диска с помощью 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

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

  1. Вероятно, вы столкнулись с проблемой буферизации... вы, скорее всего, увидите множество строк, появляющихся одновременно, а затем снова ничего — посмотрите наunbuffer
  2. sudoвозможно, запрашивается пароль, но вы перенаправили запрос... поэтому ничего не происходит.

Связанный контент