为什么 rsync 仍尝试复制并抱怨空间不足?

为什么 rsync 仍尝试复制并抱怨空间不足?

我正在使用 rsync 将一个大文件(> 4 GB)从硬盘复制到 USB 驱动器,并使用“-av --progress”选项。在此之前,该文件已经存在于 USB 上,并且与磁盘上的文件相同。所以基本上我在做一个测试。我的假设是,如果 rsync 足够智能,它就不应该进行真正的复制。

但是,它仍然尝试复制(至少从进度和 USB 闪烁来看)。这是我不明白的第一件事。

然后它抱怨空间不足(USB 上的可用空间为 2 GB)。这不应该发生,因为它只需要替换占用相同空间的文件,对吗?我甚至使用了“--delete-before”,它仍然抱怨。

谢谢你的提示。

答案1

对于您的第一个问题,USB 上的文件系统是什么?它可能不包含有关文件的足够信息,因此 rsync 无法确定时间戳、权限等。

至于你的第二点,--partial 选项会导致 rsync 在复制时创建一个临时文件,该文件在传输完成后被重命名。

例如,我现在在 Ubuntu 14.04 系统上运行此命令:

/usr/bin/rsync -avzh --partial --progress 192.168.42.40:/Users/Shared/bsd /srv/share/distros

这将产生以下输出:

receiving file list ... 
36 files to consider
bsd/
bsd/FreeBSD-10.0-RELEASE-i386-dvd1.iso
        738.41M  31%   11.20MB/s    0:02:17

但正在创建的文件是:

15:28:57 file01 lnelson:/srv/share/distros/bsd> ls -al
drwxr-xr-x 3 lnelson lnelson       4096 Sep 17 15:28 .
drwxr-xr-x 4 lnelson lnelson       4096 Sep 14 23:12 ..
-rw------- 1 lnelson lnelson  242745344 Sep 17 15:28 .FreeBSD-10.0-RELEASE-i386-dvd1.iso.Xo0LH8

操作完成后,我得到:

15:28:58 file01 lnelson:/srv/share/distros/bsd> ls -al
drwxr-xr-x 3 lnelson lnelson       4096 Sep 17 15:31 .
drwxr-xr-x 4 lnelson lnelson       4096 Sep 14 23:12 ..
-rw-r----- 1 lnelson lnelson 2317000704 Sep 15 23:36 FreeBSD-10.0-RELEASE-i386-dvd1.iso

如果 rsync 确实在重新复制文件,并且您使用了 --partial 标志,那么它将创建一个临时的新文件,该文件的.第一个字符为,因此只有在 rsync 进行过程中执行ls -als -al时,您才能看到它。这意味着您需要在 USB 驱动器上有足够的可用空间来处理现有的 4GB 副本和新的 4GB 临时文件,直到复制完成,届时临时文件将替换原始文件,您将回到仅使用 USB 驱动器上的 4GB 空间。在 rsync 期间,您需要 8GB 的​​存储空间才能完成操作。

相关内容