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
ou systemtap
descobrir onde o tempo está sendo gasto.