%20en%20comparaci%C3%B3n%20con%20cp%20al%20copiar%20archivos%20de%20nfs-share%20al%20directorio%20local.png)
Tengo un servidor Ubuntu recién instalado que debería ser el nuevo servidor de respaldo para nuestro almacenamiento de VM. El servidor tiene 4 NIC, 2 de ellas de 10 Gbit (de hecho, una Intel x540-T2 con el controlador más nuevo disponible) que se utilizan para conectarse a la SAN. Tengo el recurso compartido nfs montado localmente y comparé las diferencias de velocidad mientras copiaba un directorio con ~30 archivos, alrededor de 15 imágenes vm y los archivos de registro correspondientes. Las imágenes tienen un tamaño de entre 8 GB y 600 GB.
Usando:
cp -rf /mnt/nfs-share /backup-storage/
bmon muestra en consecuencia alrededor de 600 MiB/s.
Usando
rsync -av /mnt/nfs-share /backup-storage/
bmon muestra algunos paquetes en los primeros segundos, se detiene durante unos 30 segundos y luego aumenta hasta unos 60-75 MiB/s. La CPU ronda el 60%.
¿Qué debería/podría cambiar para usarlo rsync
con el mismo rendimiento que cp
?
Respuesta1
Creo que estas diferencias están bastante bien establecidas entre cp
y rsync
. Vea este artículo como referencia, titulado:Una mirada al rendimiento de rsync.
The four commands tested were:
rsync $SRC $DEST
echo $SRC | cpio -p $DEST
cp $SRC $DEST
cat $SRC > $DEST/$SRC
The results for rsync, cpio, cp, and cat were:
user sys elapsed hog MiB/s test
5.24 77.92 101.86 81% 100.53 cpio
0.85 53.77 101.12 54% 101.27 cp
1.73 59.47 100.84 60% 101.55 cat
139.69 93.50 280.40 83% 36.52 rsync
Lo uso rsync
a diario. Hay cosas que puedes hacer para mejorar la situación.
Por ejemplo, puedes intentar usar el -W
interruptor:
-W, --whole-file copy files whole (w/o delta-xfer algorithm)
También sugeriría asegurarse de tener las versiones 3.x de rsync
. Hubo mejoras notables cuando pasamos a las versiones más nuevas.
Respuesta2
La forma de hacer que rsync tenga el mismo rendimiento que cp es escribirlo "cp".
La diferencia entre los dos comandos es significativa aunque el efecto neto pueda ser el mismo. En particular, rsync realiza muchas lecturas para ver si algún archivo o parte de un archivo debe copiarse o no.
¿Hay alguna razón por la que quieras usar rsync? Debido a que cp copia "a ciegas", verá un mayor rendimiento sin procesar. Si, para un conjunto de condiciones desencadenantes, se utiliza el mecanismo de "transferencia delta" de rsync, verá que las tasas de transferencia disminuyen y el uso de la CPU aumenta prácticamente de la manera que informa.
Respuesta3
Para este caso de uso, rsync
es una máquina innecesariamente compleja. Si está de acuerdo con la sincronización basada en la comparación de tiempos de modificación de archivos y tamaños de archivos, entonces solo se deben recopilar metadatos del sistema de archivos en ambos extremos, compararlos y los archivos modificados (o nuevos) se deben copiar mediante el cp
comando (local).
Quizás te interese este pequeño y sencillo sincronizador que hace esto:Fitus/Zaloha.sh
Se utiliza de la siguiente manera:
$ Zaloha.sh --sourceDir="test_source" --backupDir="test_backup"
Para obtener la máxima velocidad de la fase de análisis, es posible que desee omitir la generación de los scripts de restauración: use la opción --noRestore
. Además, si tienes mawk
instalado el fast, dale la opción --mawk
de usarlo.
Zaloha.sh
recopila metadatos del sistema de archivos mediante find
comandos. Una pregunta pendiente es sobre el rendimiento de find
su recurso compartido NFS...