rdiff patch mit stdin (Pipe)

30/07/2010 - 15:55 von Volker Boehm | Report spam
Hallo,
in der - zugegebenermaßen sehr kurzen - Man-Page zu rdiff steht, dass man
für jeden Parameter, der einen Dateinamen darstellt, auch '-' für
Standard-Ein- oder -Ausgabe benutzen kann.

Das funktioniert aber leider nicht für
zcat basisdatei.gz | rdiff -- patch - deltaname.rdiff ausgabename

Das Programm beklagt sich dann mit
rdiff: ERROR: (rs_file_copy_cb) seek failed: Illegal seek
rdiff: ERROR: (rs_job_complete) patch job failed: IO error
rdiff: ERROR: IO error

Es sieht also so aus, als würde rdiff versuchen, in der Basisdatei zu
positionieren und deshalb nicht mit einer Pipe arbeiten können.

Das ist besonders àrgerlich, da die Basisdatei ja schließlich eine der
beiden _großen_ Dateien (bei mir 20 - 50 GB, komprimiert knapp 10 GB) bei
dieser Operation ist. Wenn man die Ausgabe in eine weitere Pipe führt,
was zumindest bei meinen Datenbank-Backups der Normalfall ist, ist die
Basisdatei sogar die _einzige_ große Datei. Dass die Delta-Datei (wenige
MB) nicht komprimierbar ist, kann man meist verschmerzen.
Aber ich habe nicht auf jedem Datenbankrechner annàhernd den gleichen
Platz wie für die Datenbank _noch_ _einmal_ zur Verfügung.

Deshalb meine Frage:
Gibt es noch irgendeinen Trick oder eine neuere Version (mein rdiff sagt:
rdiff (librsync 0.9.7) [i486-pc-linux-gnu]), mit der man diesen Fehler
umschiffen kann?

mfg Volker
 

Lesen sie die antworten

#1 Christian Garbs
30/07/2010 - 19:45 | Warnen spam
Mahlzeit!

Volker Boehm wrote:

in der - zugegebenermaßen sehr kurzen - Man-Page zu rdiff steht,
dass man für jeden Parameter, der einen Dateinamen darstellt, auch
'-' für Standard-Ein- oder -Ausgabe benutzen kann.



Ich musste gerade nachgucken, was rdiff genau ist, und bin hier drauf
gestoßen: http://librsync.sourcefrog.net/doc/rdiff.html

Da steht unter "patch" explizit:

| The basis file must allow random access. This means it must be a
| regular file rather than a pipe or socket.


Gibt es noch irgendeinen Trick oder eine neuere Version (mein rdiff
sagt: rdiff (librsync 0.9.7) [i486-pc-linux-gnu]), mit der man
diesen Fehler umschiffen kann?



Ich fürchte, das ist prinzipbedingt so und kein Fehler, sondern kommt
halt durch das Design.

Da ich jetzt weiß, was Du da vorhast, fallen mir leider auch keine
Alternativen ein.

Gruß
Christian
Christian.Garbs.http://www.cgarbs.de
We have guided missiles, and misguided men. (Martin Luther King)

Ähnliche fragen