Las copias de seguridad de Rsync en btrfs son muy lentas

Las copias de seguridad de Rsync en btrfs son muy lentas

Mi entorno es Ubuntu 15.04 con kernel 3.19.0-28-generic y Btrfs v3.17.

Tengo dos discos duros USB externos idénticos que uso con mi script de respaldo. Uno de ellos está formateado con btrfsy el otro con ext4. El sistema de archivos fuente es siempre ext4. El rsynccomando se ve así:

rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"

Me acabo de dar cuenta de que la copia de seguridad realizada btrfstarda unextremadamentemucho tiempo: Algo más de una hora, en comparación con los 4 minutos que se necesitan para realizar la misma copia en ext4.

Para descartar un mal funcionamiento del disco, realicé algunas pruebas comparativas con ddla "utilidad de disco" incluida con Ubuntu, pero obtuve el mismo rendimiento en ambos discos. La parte lenta parece estar vinculada con la copia de seguridad anterior. Incluso después de desfragmentar y limpiar, el siguiente comando tarda alrededor de 53 minutos btrfs, pero solo 1 minuto ext4:

cp -arl "$previousBackup" "$destDir"

Al investigar en Internet, encontré indicios de que el rendimiento de btrfslos enlaces duros se ve afectado, pero no esperaba esto.enormediferencia. Descubrí que este comando es más rápido, pero aún así tarda más de 30 minutos en completarse:

cp -ar --reflink "$previousBackup" "$destDir"

¿Alguien tiene experiencia con este comportamiento y puede confirmarlo? ¿Existe alguna forma sencilla de corregirlo (por ejemplo, diferentes opciones de montaje) o debería intentar eliminar tantos enlaces físicos como sea posible y simplemente usar enlaces de referencia?

EDITAR

Acabo de descubrir que inclusoeliminandoun directorio btrfsrequiere más de una hora. La misma operación es instantánea en el ext4disco "gemelo". Obviamente aquí hay un problema con los metadatos.

Respuesta1

Dices que estás copiando enlaces duros con tursynccomando, pero ¿dónde está la -Hbandera? No lo veo en tu comando:

rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"

La forma en que entiendo cómo rsyncfunciona, con respecto a los enlaces físicos, es que sin la -Hbandera, los datos reales se copian en lugar del enlace físico, como se explica en elrsyncpágina de manual:

-H, --enlaces duros

Esto le dice a rsync que busque archivos vinculados en la transferencia y vincule los archivos correspondientes en el lado receptor. Sin esta opción, los archivos vinculados en la transferencia se tratan como si fueran archivos separados.

Me imagino que un procedimiento de este tipo en el que muchos archivos similares se copian una y otra vez en lugar de vincularlos provocaría un tiempo de transferencia más lento.

Además, considere usar el indicador -z( --compress):

-z, --comprimir

Con esta opción, rsync comprime los datos del archivo a medida que se envían a la máquina de destino, lo que reduce la cantidad de datos que se transmiten, algo que resulta útil en una conexión lenta.

Sí, se trata de una transferencia de USB a USB en el mismo sistema, por lo que es probable que la velocidad ya esté optimizada, pero no está de más ver que -ztal vez le ayude a superar los cuellos de botella naturales en la transferencia de datos USB.

Un tutorial sencillo y agradable que explica estas banderas, así como otras:se puede encontrar aquí.

información relacionada