Копирование вывода 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
В прямой ответ на ваш вопрос:
- Вы, вероятно, столкнулись с проблемой буферизации... вы, вероятно, увидите, что сразу появляется много строк, а потом ничего больше - посмотрите на
unbuffer
sudo
возможно, спрашивает пароль, но вы перенаправили приглашение прочь... так что ничего не происходит.