CONTEXTO : Estou copiando uma imagem esparsa da VM qcow2 com tamanho de 200 GB, mas com 16 GB de blocos alocados. Eu tentei vários métodos para copiar esse arquivo esparso no mesmo servidor e obter alguns resultados preliminares. O ambiente é RHEL 6.6 ou CentOS 6.6 x64.
ls -lhs srcFile
16G -rw-r--r-- 1 qemu qemu 201G Feb 4 11:50 srcFile
Via cp - melhor velocidade
cp --sparse=always srcFile dstFile
Performance Notes:
Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
Copy time: 1:02 (mm:ss)
Via dd - melhor desempenho geral
dd if=srcFile of=dstFile iflag=direct oflag=direct bs=4M conv=sparse
Performance Notes:
Copied 200GB max/16GB actual VM as 200GB max/21GB actual, bloat: 5GB
Copy time: 2:02 (mm:ss)
Via cpio
mkdir tmp$$
echo srcFile | cpio -p --sparse tmp$$; mv tmp$$/srcFile dstFile
rmdir tmp$$
Performance Notes:
Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
Copy time: 9:26 (mm:ss)
Via rsync
rsync --ignore-existing -aS srcFile dstFile
Performance Notes:
Copied 200GB max/16GB actual VM as 200GB max/26GB actual, bloat: 10GB
Copy time: 24:49 (mm:ss)
Via virt-sparsify - melhor tamanho
virt-sparsify srcFile dstFile
Copied 200GB max/16GB actual VM as 200GB max/16GB actual, bloat: 0
Copy time: 17:37 (mm:ss)
Tamanho de bloco variável
Fiquei preocupado com o 'inchaço' durante a cópia do dd (aumento do tamanho do arquivo em relação ao original), então variei o tamanho do bloco. Eu usei 'time' para obter também o tempo total e a% da CPU. O arquivo original nesse caso é um arquivo esparso de 7.3GB de 200GB:
4K: 5:54.64, 56%, 7.3GB
8K: 3:43.25, 58%, 7.3GB
16K: 2:23.20, 59%, 7.3GB
32K: 1:49.25, 62%, 7.3GB
64K: 1:33.62, 64%, 7.3GB
128K: 1:40.83, 55%, 7.4GB
256K: 1:22.73, 64%, 7.5GB
512K: 1:44.84, 74%, 7.6GB
1M: 1:16.59, 70%, 7.9GB
2M: 1:21.58, 66%, 8.4GB
4M: 1:17.52, 69%, 9.5GB
8M: 1:10.92, 76%, 12GB
16M: 1:17.09, 78%, 16GB
32M: 2:54.10, 90%, 22GB
PERGUNTA : Você pode verificar se identifiquei os melhores métodos para copiar um arquivo esparso para obter o melhor desempenho geral? Todas as sugestões sobre como fazer isso melhor são bem-vindas, assim como quaisquer preocupações que você possa ter com os métodos que estou usando.
fonte
Respostas:
A partir dos testes comparativos acima, parece que usar dd em nosso hardware de destino com um tamanho de bloco de 64K nos dá o melhor resultado geral, considerando o tempo de cópia e o inchaço:
fonte