Gibt es Alternativen für "dd"?

13

Welche anderen Tools sollte ich verwenden, um Dateien mit Kürzung, Suche und Überspringen zu lesen und zu schreiben. Die Befehlszeilenoptionen von dd scheinen unpraktisch und fremd und ich mag es nicht, zwischen langsamem, aber präzisem Suchmodus ( bs=1) und schnellem, aber unflexiblem Modus ( bs=4koder was auch immer) zu wählen .

Gibt es modernere Tools zum Lesen von 555 Bytes aus einer Datei (oder Pipe oder Socket oder Dev) von Position 31337 und zum Schreiben in die andere Datei an Position 128205 (unter Verwendung der Blöcke 512 + 43), mit oder ohne Kürzung?

Vi.
quelle
2
Ich sehe immer noch nicht, woran es liegt dd. Sie können immer einen Shell-Script-Wrapper darum legen, wenn Sie die Oberfläche nicht mögen. ddist im POSIX-Standard , was ein großes Plus ist.
JW013
2
Die Hauptfehlsache ist die Unfähigkeit, nach Bruchblöcken zu suchen oder diese zu überspringen. Zweite falsche Sache, status=noxferdie nicht standardmäßig ist und kaputt ist und die ich brauche iflag=fullblock(in einigen Skripten weglassen => kaputte Daten).
Vi.
4
1. bs=1=> Die gesamte Pipeline ist langsam. Zum Beispiel möchte ich vielleicht die Videodatei ab einem bestimmten Frame sichern. 2. "Es braucht etwas Arithmetik" => nicht sehr geeignet für Oneliners und Routine-Shell-Befehle.
Vi.
1
PSA: dd conv=seek_bytesmacht die seekArbeit mit Byte Präzision.
i336_
1
@ i336_ Ich denke, es bedeutet nur, dass die sicherste Option für uns darin besteht, die Verwendung eines Shell-Skripts zu vermeiden und eine eigenständige statisch verknüpfte ausführbare Datei zu schreiben. Ich habe nur nach Alternativen gesucht, weil ich von Zeit zu Zeit erfahre, dass verrücktes Zeug direkt in der Bash möglich ist, und mich gefragt habe, ob der direkte Dateizugriff vielleicht eines dieser verrückten Dinge ist.
Trejkaz

Antworten:

4

Es gibt das Tool ddrescue(aufgepasst, es gibt auch dd_rescueein anderes Programm mit fast der gleichen Funktionalität). Es wird die bekanntere Syntax mit dem einfachen Bindestrich für kurze oder dem doppelten Bindestrich für lange Optionen verwendet. Von der Manpage:

   -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
quelle
1
ddrescue - --> Infile and outfile are the same., ddrescue /dev/stdin /dev/stdout-> Infile and outfile are the same.. Schlechter Anfang der Geschichte ...
Vi.
Ich habe es nur mit versucht dd_rescue. Es wird eine Warnung ausgegeben, dass die Datei (stdin) nicht suchbar ist, sondern fortgesetzt wird. Du kannst es versuchen. Fühlt ddrescuesich jedoch voller und ausgereifter an.
Marco
1
@Vi .: Schieß nicht auf den Boten. ddrescueStimmt, Pfeifen sind nicht suchbar. Wenn Sie an einer bestimmten Stelle in einer Datei mit dem Lesen beginnen möchten, müssen Sie ihr Zugriff auf die betreffende Datei gewähren, nicht auf Daten, die von einem anderen Programm weitergeleitet wurden. Beachten Sie auch, dass die Verwendung von Pipes Ihrem Wunsch nach höchster Geschwindigkeit widerspricht, da die einzige Möglichkeit, die Suche in einer Pipe zu emulieren, darin besteht, die Teile zu lesen und wegzuwerfen, die Sie nicht verarbeiten möchten. Das Suchen in einer tatsächlichen Datei ist weitaus effizienter.
Warren Young
In der Tat gibt es keine Pipe-Funktion , da das Tool für die Rettung defekter Daten ausgelegt ist . Dies ist etwas schade, wenn Sie die Flexibilität haben möchten, eine Eingabedatei zu durchsuchen, das Ergebnis jedoch nur an stdout weiterleiten möchten. Für den vorgesehenen Zweck ist es jedoch großartig.
Leichtigkeit Rennen mit Monica
2

dcfldd ist eine weitere Alternative von dd. Es geht nicht auf die Frage des OP nach der Flexibilität der Eingabe- / Ausgabesuche ein, kann jedoch für andere nützlich sein, die hier über die Google-Suche ankommen.

Es basiert auf gnu dd mit den folgenden zusätzlichen Funktionen:

  • Schnelles Hashing - dcfldd kann die Eingabedaten während der Übertragung hashen und so die Datenintegrität sicherstellen.
  • Statusausgabe - dcfldd kann den Benutzer über den Fortschritt in Bezug auf die übertragene Datenmenge und die Dauer des Vorgangs auf dem Laufenden halten.
  • Flexible Disk Wipes - dcfldd kann verwendet werden, um Disks schnell und mit einem bekannten Muster zu löschen, falls dies gewünscht wird.
  • Image / Wipe Verify - Mit dcfldd kann überprüft werden, ob ein Ziellaufwerk bitweise mit der angegebenen Eingabedatei oder dem angegebenen Eingabemuster übereinstimmt.
  • Mehrere Ausgaben - dcfldd kann gleichzeitig auf mehrere Dateien oder Festplatten ausgeben.
  • Ausgabe aufteilen - dcfldd kann die Ausgabe in mehrere Dateien aufteilen, die konfigurierbarer sind als der Befehl split.
  • Weitergeleitete Ausgabe und Protokolle - dcfldd kann alle seine Protokolldaten und Ausgaben sowohl an Befehle als auch an Dateien senden.
Dan Pritts
quelle
2

Eine gute Alternative ist pv . Es berechnet nicht nur automatisch die effizienteste Blockgröße, was die Dinge wesentlich beschleunigt, sondern liefert auch unter anderem Fortschritte. Die Verwendung ist einfach:

pv < /dev/sda > sda.img

Es spielt auch gut mit Komprimierung. Eine schnelle Methode zum Sichern und Komprimieren einer Festplatte in einem Schritt lautet wie folgt:

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

Sie können erfahren Sie mehr hier .

Bobby
quelle
Die wichtigste erwartete Funktion ist das Suchen in Ausgabe- und Eingabedateien, die pv (pipe view) nicht bietet, da keine Suche nach Pipes erfolgt.
Vi.