Kopieren an zwei Speicherorte gleichzeitig

7

Ich bin nicht sehr fließend mit Bash ... Ich möchte den Inhalt einer DVD-R auf schnellstmögliche Weise auf zwei verschiedene Festplatten kopieren.

(UI-basierte Lösungen sind ebenfalls willkommen)

Vielen Dank!

Diego Mijelshon
quelle

Antworten:

13

Der Engpass wird wahrscheinlich vom DVD-Laufwerk gelesen, daher müssen wir sicherstellen, dass er entweder nur einmal oder zweimal gelesen wird, jedoch in ausreichend engen Intervallen, damit sich die Daten weiterhin im Cache befinden. Letzteres klingt schwierig, also lasst uns zum ersten gehen.

Wir müssen irgendwo einen Kopierer haben. Wenn wir uns auf grundlegende Shell-Befehle beschränken, ist die einzige Wahl tee. Wir müssen also die Eingabe (einen Dateibaum) in einen Stream teekonvertieren , den Stream an einen Stream weitergeben und jeden Ausgabestream zurück in einen Dateibaum konvertieren. Das Werkzeug dafür ist ein Archivierer. Die Komprimierung von etwas, das im Speicher verbleibt, ist eine Verschwendung tar. Verwenden wir also einfach .

Mit Pipes ( command0 | command1) können wir die Ausgabe eines Befehls in einen anderen Befehl einspeisen. Wir müssen die Ausgabe von teein zwei andere Befehle einspeisen, daher ist ein anderes Bash-Konstrukt nützlich: command1 >(command2)Erstellt eine Pipe, die command1als erster Befehl übergeben wird, anstatt zur Standardausgabe von zu werden command2. (Schlagen Sie die Prozessersetzung im Bash-Handbuch nach.)

Hier ist der Befehl (ungetestet):

mkdir /media/disk0/copy_of_dvd /media/disk1/copy_of_dvd
cd /media/cdrom
tar cf - . | tee >(tar xf - -C /media/disk0/copy_of_dvd) | tar xf - -C /media/disk1/copy_of_dvd
Gilles 'SO - hör auf böse zu sein'
quelle
Genau das war ich. Vielen Dank! Ich nur hinzufügen hatte *mit dem ersten tar.
Diego Mijelshon
Hmmm ... das sieht nicht gut aus : tar: one_of_the_files_being_copied: File shrank by 131757636 bytes; padding with zeros. Ideen?
Diego Mijelshon
@Diego: Entschuldigung für das fehlende Argument, ich habe gesagt, .das ist etwas besser. Ich habe diese Fehlermeldung noch nie gesehen. Nachdem ich ein wenig gegoogelt habe, frage ich mich, ob es an einem Kopierschutzschema liegen könnte, das ich auf einigen DVDs gesehen habe: Die Dateisystemstruktur ist ungültig, wobei einige Dateien über den beanspruchten Umfang der DVD hinausgehen. Wenn Sie beide duund dfauf der DVD ausführen , geben sie ungefähr die gleiche Größe an (letzte Zeile du, ganz links stehende numerische Spalte von df)?
Gilles 'SO - hör auf böse zu sein'
Es stellt sich heraus, dass die DVD ein wenig beschädigt ist (es ist kein Kopierschutz - ich habe die [Daten] DVD von Ubuntu erstellt)
Diego Mijelshon
1

Eine Shell-basierte Lösung besteht darin, ein Terminal zu öffnen und Folgendes einzugeben:

cp -r /location/of/DVD /hard/drive/a &
cp -r /location/of/DVD /hard/drive/b

Der Befehl cpdient zum Kopieren von Dateien und der -rSwitch kopiert alle Dateien rekursiv. Sie müssen das Verzeichnis eingeben, in dem sich Ihre DVD befindet (normalerweise /media/dvdoder ähnlich), und die Stelle auf der Festplatte, an der Sie die Dateien haben möchten (dh /home/diego/mydvd). Der &sendet den ersten Prozess in den Hintergrund und Sie können sofort einen zweiten Befehl eingeben und ausführen.

qbi
quelle
1
Dies ist wahrscheinlich die langsamste Methode zum Kopieren, da die DVD-Laufwerke sehr langsame Suchzeiten haben, sodass diese Methode den Kopf des Laufwerks hin und her schlagen würde. Ich denke, einmal auf eine Festplatte zu kopieren und dann (rsync?) Auf die andere zu kopieren ist schneller.
Li Lo
Aus Gründen der Geschwindigkeit scheint es an der Zeit zu sein, dass jemand ein 1-in-Multiple-out-Kopiertool erfindet, falls so etwas noch nicht existiert. Oder eine einzigartige Möglichkeit, Streams aus einem der integrierten Programme zu verwenden, um die Ausgabe zu "multiplexen".
John K
2
@jdk: Der teeBefehl wurde vor über 40 Jahren erfunden :-)
Gilles 'SO- hör auf böse zu sein'
@ Gilles: Nicht wenn du neu in der * nix Welt bist - in diesem Fall ist es so gut wie neu!. Und ich sehe, dass OP von Ihrer Antwort gleichermaßen beeindruckt ist. Gutes Zeug.
John K
1

Wie in Li Los Kommentar zur Antwort von qbi erwähnt, sind optische Laufwerke (CD, DVD usw.) die langsamste Art von Laufwerk. Daher möchten Sie den Lesevorgang auf dem DVD-Laufwerk minimieren. Die naheliegende Lösung wäre, die Daten von der DVD an einen Ort auf der Festplatte zu kopieren und sie dann von diesem Ort auf die andere Festplatte zu kopieren.

cp -r /media/cdrom /location1
cp -r /location1 /location2
David Z.
quelle