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 btrfs
y el otro con ext4
. El sistema de archivos fuente es siempre ext4
. El rsync
comando 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 btrfs
tarda 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 dd
la "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 btrfs
los 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 btrfs
requiere más de una hora. La misma operación es instantánea en el ext4
disco "gemelo". Obviamente aquí hay un problema con los metadatos.
Respuesta1
Dices que estás copiando enlaces duros con tursync
comando, pero ¿dónde está la -H
bandera? No lo veo en tu comando:
rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"
La forma en que entiendo cómo rsync
funciona, con respecto a los enlaces físicos, es que sin la -H
bandera, los datos reales se copian en lugar del enlace físico, como se explica en elrsync
pá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 -z
tal 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í.