rsync 后 ZFS 池大小出现差异

rsync 后 ZFS 池大小出现差异

我正在尝试将rsyncZFS 池中的一个卷的数据复制到 exfat 格式的驱动器。该卷只有 1.3 TB,但最多rsync可以同步 3+ TB 的数据。我关闭了它,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 logicalusedlogicalreferenced
  • 您尝试发送的文件/卷很稀疏。从上面的评论来看,我相信您遇到的情况就是这样。rsync正在发送卷中所有未写入的块,即使它们都被清零(因为它们从未被写入过)。尝试使用 参数--sparsersync如中所述这个答案,来解决此行为,然后用于--in-place后续同步,以避免重新同步整个文件而不仅仅是已更改的部分。

相关内容