Das Kopieren von Daten aus einer Datei an einen bestimmten Speicherort einer anderen Datei mit dd kürzt die Ausgabedatei

Das Kopieren von Daten aus einer Datei an einen bestimmten Speicherort einer anderen Datei mit dd kürzt die Ausgabedatei

Ich habe eine Loopback-Datei, die ein einzelnes Dateisystem enthält, nennen wir sie fs.image. Ich habe eine andere, viel größere Loopback-Datei, die mehrere Partitionen und mehrere Dateisysteme enthält, nennen wir sie disk.image.

fs.imageist genau so groß wie eine der Partitionen in disk.image. Ich möchte die Daten daraus in die disk.imageDatei an den richtigen Ort kopieren.

Ich habe ein Skript, das den richtigen Offset berechnet und dies mit versucht dd. Ich nahm an, dass dies funktionieren würde, da es mit einem Blockgerät funktioniert, aber das ist nicht der Fall. disk.imagewird an der Position abgeschnitten, die unmittelbar auf die gerade hineingeschriebenen Daten folgt.

Gibt es eine Möglichkeit, dddas Abschneiden der Datei zu verhindern?

fs.imageist komprimiert als fs.image.bz2, und der Befehl, den ich ausführe, sieht folgendermaßen aus:

bzcat fs.image.bz2 | dd of=disk.image bs=4M seek=$OFFSET

wo $OFFSETist mein berechneter Offset.

Ich habe über andere Möglichkeiten nachgedacht, dies zu erreichen, aber dies scheint die einfachste zu sein (wenn es funktioniert). Eine Möglichkeit wäre, Daten bis zum Einfügepunkt in eine andere Datei zu kopieren, das Dateisystem anzuhängen und schließlich den Rest der Originaldatei anzuhängen. Dies wäre jedoch langsam, da ich viele Daten kopieren würde, die ich nicht wirklich brauche. Ich bin offen für andere Optionen.

Antwort1

GNU dd(ab Version 8.23) hat folgendesKonvertierungsflag

nichtrunc die Ausgabedatei nicht kürzen

das macht genau das, was Sie wollen; hier ist ein kleines Beispiel:

$ cat foo
foobar
$ echo -n XX | dd of=foo bs=1c seek=1 conv=notrunc
2+0 records in
2+0 records out
2 bytes (2 B) copied, 0.000283698 s, 7.0 kB/s
$ cat foo
fXXbar

verwandte Informationen