Расхождение в размере пула ZFS после rsync-ing
Я пытаюсь rsync данные одного из томов в пуле ZFS на диск в формате exfat. Объем всего 1,3 ТБ, но rsync встал для синхронизации данных на 3+ ТБ. Я убил rsync чтобы я мог понять, что не так.
Пул 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 -
Тома и их точки монтирования:
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
Размер на диске /backup/vol1:
ubuntu@ubuntu:~$ du -sh /backup/vol1
1.3T /backup/vol1
Сколько данных было скопировано после выполнения rsync на пару дней:
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
Я убил его, увидев, сколько было переведено.
1 ответ
Решение
Просто чтобы расширить мой комментарий выше, это произойдет при двух обстоятельствах, о которых я могу думать:
- Файлы / тома, которые вы отправляете, используют методы сохранения блоков (сжатие, дедупликация или снимки / клоны). ZFS сэкономил вам некоторое внутреннее пространство, поэтому свойство ZFS
usedмаленький, ноrsyncвсе еще должен прочитать все логические (несжатые, недедуплицированные, без обмена снимками) данные, потому что он не имеет представления об этих функциях. Вы можете выяснить, сколько логических данных есть, запустивzfs list -o logicalused(или жеlogicalreferencedесли у вас есть снимки). - Файлы / тома, которые вы пытаетесь отправить, немногочисленны. Из вашего комментария выше, я считаю, что это тот случай, когда вы находитесь.
rsyncотправляет все неписанные блоки вашего тома, даже если все они обнулены (потому что они никогда не записывались). Попробуйте использовать--sparseаргументrsync, как описано в этом ответе, чтобы обойти это поведение, а затем с помощью--in-placeдля последующей синхронизации, чтобы избежать повторной синхронизации всего файла, а не только частей, которые были изменены.