Eu tenho uma máquina Debian na minha LAN que serve como servidor de backup para os outros. Ele possui quatro HDDs combinados em um dispositivo RAID de 5 md de software, naquele LVM e nesse btrfs. Os backups são feitos usando o rsync e, para um sistema de arquivos grande, leva mais de uma hora. Durante muito tempo, pensei que haveria pouco que eu pudesse fazer sobre isso.
Recentemente, no entanto, notei que a atividade do disco rígido era muito diferente nos dois extremos da transferência. Enquanto o lado de envio, executando o Gentoo e usando principalmente o ext4, praticamente não tinha E / S de disco, o lado de recebimento estava constantemente ocupado. Como a maioria dos dados não muda entre as transferências, acredito que as leituras de metadados devem compor a maior parte dos dados. Mas eu ficaria realmente surpreso se ler inodes no btrfs for mais trabalhoso do que fazer o mesmo no ext4.
iotop
leituras de disco confirmadas de cerca de 1 a 4 MB / s no lado de recebimento, enquanto o lado de envio teve apenas uma explosão ocasional de 0,5 MB / s.
Minha pergunta é: alguém pode explicar o que está acontecendo aqui? De preferência com alguma indicação de como solucionar o problema, se possível.
Talvez haja alguma bandeira de ajuste do btrfs que eu possa usar, ou algo semelhante. Eu preciso de um FS com recursos de instantâneo no servidor de backup, e minha tentativa de usar o FreeBSD e o ZFS rapidamente leva a um FS inconsistente, por isso vejo pouca alternativa ao btrfs no momento. Portanto, as respostas que me dizem para usar ext4 ou zfs podem receber votos positivos, mas nenhuma marca de seleção.
Opções de Rsync em uso, conforme solicitado pelo 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
Bem como várias -f
regras para omitir alguns arquivos.
As opções de montagem dos btrfs são relatados por mount
enquanto
rw,nosuid,noexec,noatime,nospace_cache
Em particular, isso inclui o noatime
sinalizador, portanto, não deve haver nenhuma gravação envolvida, a menos que haja realmente diferenças em alguns arquivos. Eu adicionei esta informação em resposta à resposta de Kyle Jones .
dtrace
ousystemtap
descobrir onde o tempo está sendo gasto.Respostas:
Uma resposta possível é que o sistema de arquivos remoto seja montado por padrão com a opção "atime". As gravações no tempo de acesso para tudo o que o rsync remoto acessa, combinadas com a penalidade de gravação que você sofre com o RAID 5 (paridade de computação significa ler todos os discos RAID antes de gravar em um deles) podem explicar a ampliação de E / S no lado remoto.
Se eu estiver certo, você pode acelerar as coisas montando o sistema de arquivos remoto com a opção "noatime".
fonte
rw,nosuid,noexec,noatime,nospace_cache
.Eu suspeito que as opções --fake-super. Isso diz ao rsync para armazenar todas as informações de metadados em atributos estendidos em cada arquivo. Eu suspeito que acessar esses atributos seja lento. Tente executar um teste com o rsync em uma raiz sem --fake-super. Você não pode reutilizar o mesmo backup, pois os atributos não coincidem.
fonte
--xattrs
/-X
foi extremamente lento antes de um commit upstream (ainda não lançado) que foi escolhido no rsync 3.1.2-2 do Debian:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=799143#20
https://bugzilla.samba.org/show_bug.cgi?id=5324
fonte