Clonagem rápida de disco [fechado]
-
09-06-2019 - |
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).
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
.
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.