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