Расхождение в размере пула 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
для последующей синхронизации, чтобы избежать повторной синхронизации всего файла, а не только частей, которые были изменены.