Existem alternativas para `dd`?

13

Quais outras ferramentas devo usar para ler e gravar arquivos com truncamento, buscando e pulando. As opções de linha de comando do dd parecem inconvenientes e estranhas e eu não gosto de escolher entre o modo de busca lento, mas preciso ( bs=1) e o modo rápido, mas inflexível ( bs=4kou o que seja).

Existem ferramentas mais modernas para ler 555 bytes de um arquivo (ou tubo ou soquete ou dev) da posição 31337 e gravá-los no outro arquivo na posição 128205 (usando os blocos 512 + 43), com ou sem truncamento?

Vi.
fonte
2
Ainda não vejo o que há de errado dd. Você sempre pode colocar um wrapper de script de shell em volta se não gostar da interface. ddestá no padrão POSIX , que é uma enorme vantagem.
Jw013 31/07/12
2
A principal coisa errada é a incapacidade de procurar ou pular blocos fracionários. Segunda coisa errada que status=noxfernão é padrão e está quebrada e que eu preciso iflag=fullblock(omitir em algum script => dados quebrados).
Vi.
4
1. bs=1=> todo o pipeline está lento. Por exemplo, talvez eu queira despejar o arquivo de vídeo a partir de algum quadro exato. 2. "Demora um pouco de aritmética" => não é muito adequado para oneliners e comandos de rotina de shell.
Vi.
1
PSA: dd conv=seek_bytesfará o seektrabalho com precisão de bytes.
I336_ 06/06/19
1
@ i336_ Acho que isso significa apenas que a opção mais segura para nós seria evitar o uso de um shell script e escrever um executável autônomo vinculado estaticamente. Eu estava apenas procurando alternativas, porque de tempos em tempos eu ouvia coisas loucas serem possíveis diretamente no bash e me perguntava se o acesso direto a arquivos poderia ser uma daquelas coisas loucas.
Trejkaz

Respostas:

4

Existe a ferramenta ddrescue(cuidado, também dd_rescueexiste um programa diferente com quase a mesma funcionalidade). Ele usa a sintaxe mais familiar com o traço único para traço curto ou duplo para opções longas. Na página do manual:

   -i, --input-position=<bytes>
          starting position in input file [0]

   -K, --skip-size=<bytes>
          initial size to skip on read error [64 KiB]

   -M, --retrim
          mark all failed blocks as non-trimmed

   -o, --output-position=<bytes>
          starting position in output file [ipos]
Marco
fonte
1
ddrescue - --> Infile and outfile are the same., ddrescue /dev/stdin /dev/stdout-> Infile and outfile are the same.. Mau começo da história ...
Vi.
Eu apenas tentei dd_rescue. Emite um aviso de que o arquivo (stdin) não é procurável, mas continua. Você pode tentar. No entanto, ddrescueparece mais completo e maduro.
31412 Marco Marco
1
@ Vi: Não atire no mensageiro. ddrescueestá certo, tubos não são procuráveis. Se você deseja começar a ler em um ponto específico de um arquivo, precisará conceder acesso ao arquivo em questão, não aos dados canalizados de outro programa. Lembre-se também de que o uso de canos luta contra esse seu desejo para obter a velocidade máxima, pois a única maneira de simular a busca em um cano é ler e jogar fora as peças que você não deseja processar. Buscar dentro de um arquivo real é muito mais eficiente.
Warren Young
De fato, como a ferramenta foi projetada para resgatar dados quebrados, não capacidade de canalização. É uma pena que você queira a flexibilidade de procurar por um arquivo de entrada, mas apenas queira canalizar o resultado para o stdout. Para a finalidade pretendida, porém, é ótimo.
Lightness Races com Monica
2

dcfldd é outra alternativa dd. Ele não aborda a pergunta do OP sobre flexibilidade de busca de entrada / saída, mas pode ser útil para outras pessoas que chegam aqui por meio da pesquisa no Google.

É baseado no gnu dd, com os seguintes recursos adicionais:

  • Hashing on-the-fly - o dcfldd pode fazer o hash dos dados de entrada durante a transferência, ajudando a garantir a integridade dos dados.
  • Saída de status - o dcfldd pode atualizar o usuário sobre seu progresso em termos da quantidade de dados transferidos e quanto tempo a operação levará.
  • Toalhetes flexíveis de disco - o dcfldd pode ser usado para limpar discos rapidamente e com um padrão conhecido, se desejado.
  • Imagem / limpe Verificar - O dcfldd pode verificar se uma unidade de destino é uma correspondência bit a bit do arquivo ou padrão de entrada especificado.
  • Múltiplas saídas - o dcfldd pode gerar vários arquivos ou discos ao mesmo tempo.
  • Saída dividida - o dcfldd pode dividir a saída em vários arquivos com mais configurabilidade do que o comando split.
  • Saída e logs canalizados - o dcfldd pode enviar todos os seus dados e saídas de log para comandos e arquivos nativamente.
Dan Pritts
fonte
2

Uma boa alternativa é pv. Não apenas calcula automaticamente o tamanho de bloco mais eficiente, acelerando as coisas, mas também fornece progresso, entre outras coisas. Seu uso é simples:

pv < /dev/sda > sda.img

Também funciona bem com a compressão. Uma maneira rápida de fazer backup e compactar um disco de uma vez é a seguinte:

pv < /dev/sdb | pigz -9 > disk.img.gz

Você pode aprender mais aqui .

Bobby
fonte
O principal recurso esperado é a busca nos arquivos de saída e entrada, que o pv (exibição de canal) não fornece, pois não há busca por tubos.
Vi.