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 -f
reglas para omitir algunos archivos.
Las opciones de montaje de los btrfs se informan mount
como
rw,nosuid,noexec,noatime,nospace_cache
En particular, esto incluye la noatime
bandera, 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 .
dtrace
osystemtap
averiguar dónde se está gastando el tiempo.Respuestas:
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".
fuente
rw,nosuid,noexec,noatime,nospace_cache
.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.
fuente
--xattrs
/-X
era extremadamente lento antes de una confirmación ascendente (aún no en una versión) que se seleccionó en rsync 3.1.2-2 de Debian:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=799143#20
https://bugzilla.samba.org/show_bug.cgi?id=5324
fuente