Ci sono alternative per `dd`?


14

Quali altri strumenti dovrei usare per leggere e scrivere file con troncamento, ricerca e salto. Le opzioni della riga di comando di dd sembrano scomode ed estranee e non mi piace scegliere tra la modalità di ricerca lenta, ma precisa ( bs=1) e la modalità veloce, ma non flessibile ( bs=4ko qualsiasi altra cosa).

Esistono strumenti più moderni per leggere 555 byte da un file (o pipe o socket o dev) dalla posizione 31337 e scriverli nell'altro file nella posizione 128205 (usando i blocchi 512 + 43), con o senza troncamento?


2
Continuo a non vedere cosa c'è che non va dd. Puoi sempre mettere un involucro di script di shell attorno ad esso se non ti piace l'interfaccia. ddè nello standard POSIX , che è un grande vantaggio.
jw013

2
La principale cosa sbagliata è l'incapacità di cercare o saltare blocchi frazionari. Seconda cosa sbagliata che status=noxfernon è predefinita e non funziona e di cui ho bisogno iflag=fullblock(ometto in alcuni script => dati non funzionanti).
Vi.

4
1. bs=1=> l'intera pipeline è lenta. Ad esempio, potrei voler scaricare il file video partendo da un frame esatto. 2. "Richiede un po 'di aritmetica" => non molto adatto per oneliners e comandi shell di routine.
Vi.

1
PSA: dd conv=seek_bytesfarà seekil lavoro con precisione di byte.
i336_

1
@ i336_ Penso che significhi solo che l'opzione più sicura per noi sarebbe quella di evitare l'uso di uno script di shell e scrivere un eseguibile autonomo collegato staticamente. Stavo solo cercando alternative perché di tanto in tanto ho sentito parlare di cose folli direttamente a Bash e mi chiedevo se l'accesso diretto ai file potesse essere una di quelle cose folli.
Trejkaz,

Risposte:


4

C'è lo strumento ddrescue(attenzione, c'è anche dd_rescueun programma diverso con quasi le stesse funzionalità). Utilizza la sintassi più familiare con il trattino singolo per trattino breve o doppio per opzioni lunghe. Dalla pagina man:

   -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]

1
ddrescue - --> Infile and outfile are the same., ddrescue /dev/stdin /dev/stdout-> Infile and outfile are the same.. Brutto inizio della storia ...
Vi.

Ci ho appena provato dd_rescue. Emette un avviso che il file (stdin) non è ricercabile, ma procede. Puoi provare. Tuttavia, ddrescuesembra più completo e maturo.
Marco

1
@Vi .: non sparare al messaggero. ddrescueè giusto, le pipe non sono ricercabili. Se si desidera iniziare a leggere in un punto specifico di un file, è necessario dargli accesso al file in questione, non ai dati inviati da un altro programma. Fai anche attenzione che l'uso di pipe combatte contro questo tuo desiderio per la massima velocità, poiché l'unico modo per emulare la ricerca in una pipe è leggere e buttare via le parti che non vuoi elaborare. La ricerca all'interno di un file reale è molto più efficiente.
Warren Young

Infatti, poiché lo strumento è progettato per il salvataggio di dati non funzionanti , non è disponibile alcuna pipe. Questo è un po 'un peccato quando si desidera la flessibilità di cercare un file di input ma si desidera semplicemente convogliare il risultato su stdout. Per lo scopo previsto, tuttavia, è fantastico.
Corse di leggerezza con Monica il

2

dcfldd è un'altra alternativa a dd. Non affronta la domanda del PO sulla flessibilità della ricerca di input / output, ma può essere utile per gli altri che arrivano qui tramite la ricerca di Google.

È basato su gnu dd, con le seguenti funzionalità aggiuntive:

  • Hashing al volo - dcfldd può eseguire l'hashing dei dati di input mentre vengono trasferiti, contribuendo a garantire l'integrità dei dati.
  • Output di stato - dcfldd può aggiornare l'utente dei suoi progressi in termini di quantità di dati trasferiti e di quanto tempo impiegherà più tempo.
  • Salviette disco flessibili - dcfldd può essere usato per cancellare i dischi rapidamente e con uno schema noto, se lo si desidera.
  • Verifica immagine / cancellazione: dcfldd può verificare che un'unità di destinazione corrisponda bit per bit del file o modello di input specificato.
  • Output multipli: dcfldd può eseguire l'output su più file o dischi contemporaneamente.
  • Dividi output: dcfldd può dividere l'output in più file con una maggiore configurabilità rispetto al comando split.
  • Output e log convogliati: dcfldd può inviare tutti i suoi dati di log e l'output ai comandi e ai file in modo nativo.

2

Una buona alternativa è pv. Non solo calcola automaticamente la dimensione del blocco più efficiente, essenzialmente accelerando le cose, ma fornisce anche progressi, tra le altre cose. Il suo utilizzo è semplice:

pv < /dev/sda > sda.img

Gioca bene anche con la compressione. Un modo rapido per eseguire il backup e comprimere un disco in una mossa è il seguente:

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

Puoi saperne di più qui .


1
La principale funzionalità prevista è la ricerca nei file di output e di input, che pv (vista pipe) non fornisce, in quanto non è disponibile la ricerca di pipe.
Vi.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.