Pergunta

Existe uma maneira de fazer com que o Linux leia antecipadamente ao clonar um disco?Eu uso o programa chamado “dd” para clonar discos.A última vez que fiz isso, parecia que o sistema operacional estava lendo e depois escrevendo, mas nunca ao mesmo tempo.Idealmente, o disco de destino estaria constantemente gravando sem esperar, é claro, se o disco de origem conseguir acompanhar.

ATUALIZAR:Normalmente escolho um tamanho de bloco grande ao clonar (ex.16M ou 32MB).

Foi útil?

Solução

O Comodoro Jaeger está certo sobre:

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

Além disso, ajustar o "readahead" nas unidades geralmente melhora o desempenho.O padrão pode ser algo como 256 e o ​​ideal 1024.Cada configuração é diferente, então você teria que executar benchmarks para encontrar o melhor valor.

# 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)
#

Outras dicas

Você pode tentar aumentar o tamanho do bloco usando o argumento bs;por padrão, acredito que dd usa um tamanho de bloco igual ao tamanho de bloco preferido do disco, o que significará muito mais leituras e gravações para copiar um disco inteiro.O dd do Linux suporta sufixos legíveis por humanos:

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

O mais rápido para mim:

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

atinge ~100MiB/s, enquanto outras opções (processo único, sem direto, tamanho de bloco padrão de 512b, ...) nem chegam a 30MiB/s...

Para observar o progresso, execute em outro console:

watch -n 60 killall -USR1 dd

Talvez você possa usar dois processos

dd if=indevfile | dd of=outdevfile

Presumo que você possa definir as outras opções do dd conforme desejar.Isso tem alguma sobrecarga, mas deve permitir a assincronia entre ler um disco e escrever o outro.

se os dois discos usarem canais diferentes (por exemplo, SATA), você poderá usar uma ferramenta de alto desempenho como o fastDD.Os autores afirmam:

"Neste trabalho, revisamos o problema de copiar dados de maneira confiável e eficiente, lembrando todos os mecanismos de hardware e software que intervêm e interferem no processo de cópia.Nossa consideração foi codificada no FASTDD, um programa C ++ capaz de copiar dados com muita eficiência, como mostramos em nosso teste ".

Além disso a ferramenta mantém uma sintaxe muito semelhante à antiga dd.

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

https://github.com/zagonico86/fastdd

Tem certeza de que não está fazendo isso ao mesmo tempo?Eu esperaria que os caches de disco garantissem que isso acontecesse.Caso contrário, leituras/gravações sem bloqueio ou mesmo assíncronas podem ajudar,

Sobre sua atualização:Qual o tamanho dos caches dos seus HDs?(especialmente o de escrita).Pode ser que isso seja demais e você precise reduzi-lo para evitar bloqueios desnecessários.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top