2008-09-10 11 views
7

Есть ли способ, чтобы Linux читал вперед при клонировании диска? Я использую программу с именем «dd» для клонирования дисков. В прошлый раз, когда я это делал, казалось, что ОС читает, а затем пишет, но никогда в одно и то же время. В идеале целевой диск будет постоянно писать, не дожидаясь, конечно, если исходный диск может не отставать.Быстрое клонирование диска

ОБНОВЛЕНИЕ: Я обычно выбираю большой размер блока при клонировании (например, 16 М или 32 МБ).

ответ

11

Commodore Jaeger прямо о:

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

Кроме того, настройка "Readahead" на дисках обычно повышает производительность. По умолчанию может быть что-то вроде 256 и оптимальным 1024. Каждая настройка отличается, поэтому вам нужно будет запускать тесты, чтобы найти лучшее значение.

# 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

Может быть, вы можете использовать два процесса

dd if=indevfile | dd of=outdevfile 

Я предполагаю, что вы можете установить другие параметры Dd, как он вам подходит. У этого есть некоторые накладные расходы, но должно позволить асинхронность между чтением одного диска и написанием другого.

0

Вы уверены, что это не так? Я бы ожидал, что кэширует диск, чтобы это произошло. Если нет, небезопасные или даже асинхронные чтения/записи могут помочь,

+0

Я считаю, что обмен на чтение/запись происходила из-за звуков диски делали. – Mike 2008-09-10 17:02:12

7

Возможно, вы попытаетесь увеличить размер блока с помощью аргумента bs; По умолчанию я полагаю, что dd использует размер блока, равный размеру блока, размер которого будет означать гораздо больше операций чтения и записи для копирования всего диска. дд Linux поддерживает удобочитаемых суффиксы:

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

О вашем обновлении: Насколько велики кэши вашего HDs? (особенно написание). Возможно, это слишком много, и вам может понадобиться уменьшить его, чтобы предотвратить ненужную блокировку.

+0

Я не могу вспомнить размер кеша любого диска. – Mike 2008-09-10 17:00:26

5

Самый быстрый для меня:

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

достигает ~ 100MiB/с, в то время как другие варианты (единый процесс, без прямой, по умолчанию размер блока 512b, ...) не достигает даже 30MiB/с ...

Чтобы наблюдать за ходом, бегите в другой консоли:

watch -n 60 killall -USR1 dd 
+0

Фактически `dd if =/dev/sda of =/dev/sdb bs = 1M` постится для меня. – pevik 2013-09-21 11:09:38

1

, если два диска использовать другой канал (е. g., SATA) вы можете использовать высокопроизводительный инструмент, такой как fastDD. Авторы утверждают:

«В этой работе мы рассмотрели проблему надежно и эффективно копирования данных, ссылаясь на все аппаратные и программные механизмы, которые вмешиваются и INTERFER в процессе копирования Нашего внимания было закодированы. в fastdd, программа на C++, способная эффективно копировать данные , как мы показываем в нашем тесте ».

Кроме того, инструмент сохраняет синтаксис, очень похожий на старый dd.

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

https://github.com/zagonico86/fastdd