Copiando a saída do console do dd para o arquivo e também para o console

Copiando a saída do console do dd para o arquivo e também para o console

Estou tentando criar uma imagem de um disco rígido usando o dd, que está apresentando erros de E/S. Como resultado, adicionei o parâmetro 'noerror', mas gostaria de acompanhar os erros para tentar a recuperação.

Minha tentativa atual é a seguinte:

sudo dd if=/dev/sdb bs=1M conv=sync,noerror of=output.img 2>&1 | tee output.log

Com isso, tanto output.img quanto output.log são criados, mas ambos têm tamanho de 0 bytes e, ao finalizar o dd, nenhuma saída é ecoada para o terminal.

Eu prefiro tentar o dd com a opção 'noerror' antes de ferramentas como o ddrescue porque estou mais familiarizado com o dd.

Além disso, esta unidade contém uma única partição NTFS, portanto, serão apreciadas dicas sobre como recuperar uma partição NTFS com bits ausentes (a unidade tem 500 GB e o primeiro erro que encontrei foi de cerca de 30 GB).

Obrigado!

Responder1

Eu recomendo fortemente que você apenas useddrescue- não evite uma ferramenta adequada ao trabalho, executá-la não é difícil e você evitará algum estresse.

A invocação é simples:

Primeira corrida:

  • -p- pré-alocar espaço
  • -b 4M- use tamanho de setor grande para velocidade
ddrescue -p -b 4M ${SRC_DISK} ${DST_IMAGE} ${DST_LOGFILE}

Execuções subsequentes: (ao contrário dd, você pode executá-lo várias vezes e ele continuará de onde parou, consultando o arquivo de log)

  • -b 512- use um tamanho de setor menor para tentar preencher as lacunas
  • -r 10- use vários passes de repetição
ddrescue -b 512 -r 10 ${SRC_DISK} ${DST_IMAGE} ${DST_LOGFILE}

Seções com erros de leitura (por padrão) conterão zeros e você terminará com um arquivo de log semelhante ao abaixo:

#      pos        size  status
0x00000000  0x00014E00  +
0x00014E00  0x00000200  -
0x00015000  0x00005800  +
0x0001A800  0x00000200  -
0x0001AA00  0x00028000  +
0x00042A00  0x00000200  -
0x00042C00  0x00125400  +

As linhas marcadas +são regiões sem erros, as linhas marcadas -são regiões com erros.


Talvez seja necessário examinar algumas das opções a seguir, dependendo da natureza dos erros de leitura:

   -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

Em resposta direta à sua pergunta:

  1. Você provavelmente está enfrentando um problema de buffer... provavelmente verá muitas linhas aparecendo de uma só vez e nada novamente - vejaunbuffer
  2. sudopode estar pedindo uma senha, mas você redirecionou o prompt... então nada está acontecendo.

informação relacionada