¿Qué mantiene a un lado de un rsync tan ocupado?

11

Tengo una máquina Debian en mi LAN que sirve como servidor de respaldo para los demás. Tiene cuatro discos duros combinados en un dispositivo RAID 5 md de software, en eso un LVM y en ese btrfs. Las copias de seguridad se realizan utilizando rsync, y para un sistema de archivos de gran tamaño demoran más de una hora. Durante mucho tiempo pensé que habría poco que pudiera hacer al respecto.

Recientemente, sin embargo, noté que la actividad de HDD era muy diferente en ambos extremos de la transferencia. Mientras que el lado emisor, ejecutando Gentoo y principalmente usando ext4, casi no tenía E / S de disco, el lado receptor estaba constantemente ocupado. Como la mayoría de los datos no cambiarían entre transferencias, creo que las lecturas de metadatos deberían constituir la mayor parte de los datos. Pero me sorprendería mucho si leer inodos en btrfs es tanto trabajo que hacer lo mismo en ext4.

iotop lecturas de disco confirmadas de aproximadamente 1-4 MB / s en el lado receptor, mientras que el lado emisor tuvo solo una ráfaga ocasional de 0.5 MB / s.

Mi pregunta es, ¿alguien puede explicar qué está pasando aquí? Preferiblemente con alguna indicación de cómo solucionar el problema si es posible.

Quizás haya algún indicador de ajuste de btrfs que pueda usar, o algo similar. Necesito un FS con capacidades de instantáneas en el servidor de respaldo, y mi intento de usar FreeBSD y ZFS rápidamente condujo a un FS inconsistente, por lo que veo poca alternativa a btrfs en este momento. Por lo tanto, las respuestas que me dicen que use ext4 o zfs pueden recibir votos positivos, pero ninguna marca de verificación.


Opciones de Rsync en uso, según lo solicitado por cjm :

--rsync-path='rsync --fake-super'
--archive               # -rlptgoD
--hard-links            # detect and preserve these
--acls
--xattrs
--sparse
--noatime               # based on patch from samba #7249c1
--delete
--delete-delay
--fuzzy
--human-readable        # size suffixes, base 1000
--stats

Además de un montón de -freglas para omitir algunos archivos.


Las opciones de montaje de los btrfs se informan mountcomo

rw,nosuid,noexec,noatime,nospace_cache

En particular, esto incluye la noatimebandera, por lo que no debería haber ninguna escritura involucrada a menos que realmente haya diferencias en algunos archivos. Agregué esta información en respuesta a la respuesta de Kyle Jones .

MvG
fuente
¿Qué opciones de rsync estás usando?
cjm
Solo tomando una foto en la oscuridad, ¿tiene un disco fallido? Esto podría causar E / S adicionales porque está tratando de reconstruir los datos que faltan de la información de paridad.
bahamat
@bahamat, tengo smartd ejecutándose, y no informó problemas. Tampoco mdadm reportó ningún evento.
MvG
Es realmente difícil decir con certeza qué está mal. Solo un ejemplo son los tamaños de bloque no coincidentes entre las capas. Para diagnosticarlo, lo mejor es usar algo como dtraceo systemtapaveriguar dónde se está gastando el tiempo.
bahamat
@bahamat, esa es una avenida que aún no he investigado. ¿Puedes escribir una respuesta sobre cómo usar estas herramientas para diagnosticar el problema? Eso seria genial. Instrucciones paso a paso si tiene tiempo, pero incluso algunas ideas aproximadas y punteros de documentación serían muy útiles.
MvG

Respuestas:

3

Una posible respuesta es que el sistema de archivos remoto está montado de forma predeterminada con la opción "atime". El tiempo de acceso escribe para todo lo que accede a rsync remoto combinado con la penalización de escritura que sufre con RAID 5 (la paridad informática significa leer todos los discos RAID antes de escribir en uno de ellos) podría explicar el aumento de E / S en el lado remoto.

Si estoy en lo cierto, puede acelerar las cosas montando el sistema de archivos remoto con la opción "noatime".

Kyle Jones
fuente
2
Bien pensado, pero lamentablemente no es la solución: el sistema de archivos ya está montado noatime. Mount informa el conjunto de todas las opciones de montaje como rw,nosuid,noexec,noatime,nospace_cache.
MvG
1

Sospecho que las opciones --fake-super. Eso le dice a rsync que almacene toda la información de metadatos en atributos extendidos en cada archivo. Sospecho que acceder a esos atributos es lento. Pruebe una ejecución de prueba con rsync a una raíz sin --fake-super. No puede reutilizar la misma copia de seguridad ya que los atributos no coincidirán.

Wayne
fuente
Debería considerar ampliar su respuesta para incluir algunos enlaces útiles o referencias a documentación que respalde su afirmación.
HalosGhost 01 de