2008-09-10 19 views
7

Gibt es eine Möglichkeit, Linux beim Klonen einer Festplatte vorauslesen zu lassen? Ich benutze das Programm "dd" um Platten zu klonen. Das letzte Mal, als ich das tat, schien es, als würde das Betriebssystem lesen und dann schreiben, aber niemals zur selben Zeit. Idealerweise würde die Zielfestplatte ständig schreiben, ohne zu warten, wenn die Quellfestplatte mithalten kann.Fast Disk Cloning

UPDATE: Normalerweise wähle ich eine große Blockgröße beim Klonen (zB 16M oder 32MB).

Antwort

11

Commodore Jaeger ist recht:

dd if=/dev/sda of=/dev/sdb bs=1M 

Auch "readahead" auf den Laufwerken Einstellung in der Regel die Leistung verbessert. Der Standardwert kann etwa 256 und optimal 1024 sein. Jedes Setup ist anders, also müssten Sie Benchmarks ausführen, um den besten Wert zu finden.

# blockdev --getra /dev/sda 
256 
# blockdev --setra 1024 /dev/sda 
# blockdev --getra /dev/sda 
1024 
# blockdev --help 
Usage: 
    blockdev -V 
    blockdev --report [devices] 
    blockdev [-v|-q] commands devices 
Available commands: 
    --getsz (get size in 512-byte sectors) 
    --setro (set read-only) 
    --setrw (set read-write) 
    --getro (get read-only) 
    --getss (get sectorsize) 
    --getbsz (get blocksize) 
    --setbsz BLOCKSIZE (set blocksize) 
    --getsize (get 32-bit sector count) 
    --getsize64 (get size in bytes) 
    --setra READAHEAD (set readahead) 
    --getra (get readahead) 
    --flushbufs (flush buffers) 
    --rereadpt (reread partition table) 
    --rmpart PARTNO (disable partition) 
    --rmparts (disable all partitions) 
# 
1

Vielleicht können Sie zwei Prozesse verwenden

dd if=indevfile | dd of=outdevfile 

Ich nehme an, Sie die anderen dd Optionen festlegen können, wie es Ihnen passt. Dies hat einige Overhead, aber sollte asynchron zwischen dem Lesen von einer Festplatte und Schreiben der anderen ermöglichen.

0

Sind Sie sicher, dass es nicht gleichzeitig geschieht? Ich würde erwarten, dass die Festplatten-Caches dafür sorgen, dass es passiert. Wenn nicht, asynchronen nicht-blockierenden oder sogar liest/schreibt helfen kann,

+0

Ich glaube, die Lese/Schreib-Swap auftreten, weil der Töne die Scheiben machen wurden. – Mike

7

Sie könnten versuchen, die Blockgröße Erhöhung der bs Argument; Standardmäßig glaube ich, dass dd eine Blockgröße verwendet, die der bevorzugten Blockgröße der Platte entspricht, was viel mehr Lese- und Schreibvorgänge bedeutet, um eine ganze Platte zu kopieren. Linux dd unterstützt menschenlesbare Suffixe:

0

Über Ihr Update: Wie groß sind die Caches Ihrer HDs? (besonders das Schreiben). Es kann sein, dass das zu viel ist und Sie es möglicherweise reduzieren müssen, um unnötiges Blockieren zu verhindern.

+0

Ich kann mich nicht an die Cache-Größe einer der beiden Festplatten erinnern. – Mike

5

Die schnellste für mich:

dd if=/dev/sda bs=1M iflag=direct | dd of=/dev/sdb bs=1M oflag=direct 

erreicht ~ 100MiB/s, während andere Optionen (einzigen Prozesses, ohne direkte, Standard-512b-Blockgröße, ...) nicht erreichen, sogar 30MiB/s ...

den Fortschritt sehen zu können, in einer anderen Konsole ausführen:

watch -n 60 killall -USR1 dd 
+0

Eigentlich ist 'dd if =/dev/sda von =/dev/sdb bs = 1M' für mich gefastet. – pevik

1

wenn die beiden Scheiben anderen Kanal (e verwenden. B. SATA) können Sie Hochleistungswerkzeuge wie fastDD verwenden. Die Autoren behaupten:

„In dieser Arbeit haben wir das Problem, zuverlässig und effizient Kopieren von Daten überprüft, alle Hardware- und Software-Mechanismen unter Hinweis auf die eingreifen und in den Kopiervorgang interferieren Unsere Überlegung haben codiert worden. in fastdd, einem C++ Programm, das Daten sehr effizient kopieren kann, wie wir in unserem Test zeigen. "

Darüber hinaus behält das Tool eine Syntax sehr ähnlich der alten dd.

http://www.dei.unipd.it/~zagonico/fastdd/

https://github.com/zagonico86/fastdd