Estou tentando rsync
dados um dos volumes em um pool ZFS para uma unidade formatada exfat. O volume é de apenas 1,3 TB, mas rsync
chegou a sincronizar mais de 3 TB de dados. Eu matei o rsync
para que eu pudesse descobrir o que está errado.
O conjunto ZFS:
ubuntu@ubuntu:~$ zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
backup 7.25T 3.59T 3.66T - 0% 49% 1.00x ONLINE -
Os volumes e seus pontos de montagem:
ubuntu@ubuntu:~$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
backup 2.61T 2.49T 35.4M /backup
backup/.system 1.97M 2.49T 140K legacy
backup/.system/configs-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 593K 2.49T 593K legacy
backup/.system/cores 692K 2.49T 692K legacy
backup/.system/rrd-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 128K 2.49T 128K legacy
backup/.system/samba4 337K 2.49T 337K legacy
backup/.system/syslog-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 128K 2.49T 128K legacy
backup/vol1 1.26T 2.49T 1.26T /backup/vol1
backup/vol2 128K 2.49T 128K /backup/vol2
backup/vol3 1.78G 2.49T 1.78G /backup/vol3
backup/vol4 1.34T 2.49T 1.34T /backup/vol4
backup/vol5 4.51G 2.49T 4.51G /backup/vol5
O tamanho no disco de /backup/vol1
:
ubuntu@ubuntu:~$ du -sh /backup/vol1
1.3T /backup/vol1
Quantos dados foram copiados depois rsync
de alguns dias:
ubuntu@ubuntu:~$ rsync -avzh --progress --no-o --no-g /backup/vol1 /media/ubuntu/external_drive/freenas/
...
...
ubuntu@ubuntu:~$ du -sh /media/ubuntu/external_drive/freenas/vol1
3.2T /media/ubuntu/external_drive/freenas/vol1
Eu matei depois de ver quanto foi transferido.
Apenas para expandir meu comentário acima, isso acontecerá em duas circunstâncias que posso pensar:
used
é pequena, masrsync
ainda precisa ler todos os dados lógicos (descompactados, não duplicados, não-snapshot-sharing) porque não tem ideia sobre esses recursos. Você pode descobrir quantos dados lógicos existem executandozfs list -o logicalused
(oulogicalreferenced
se tiver instantâneos).rsync
enviando todos os blocos não gravados do seu volume, mesmo que todos estejam zerados (porque nunca foram gravados). Tente usar o--sparse
argumento torsync
, conforme descrito nesta resposta , para contornar esse comportamento e, em seguida, usar--in-place
para sincronizações subsequentes para evitar a ressincronização do arquivo inteiro em vez de apenas as partes que foram alteradas.