从 ext4 复制到 NTFS-3G 时,rsync 使大小加倍

从 ext4 复制到 NTFS-3G 时,rsync 使大小加倍

我想home使用 . 将我的目录备份到外部 SSD 驱动器rsync

我在 Arch Linux 上。我家的是ext4(251G),SSDNTFS-3G安装的是fuseblk(512G)。

确切的rsync调用是:

rsync -aSh --info=progress2 --delete --exclude=/me/.cache /home/me /run/media/me/Samsung_T5/

最终,它失败了,这是它的最后一句话:

        218.76G  99%   25.08MB/s    2:18:36 (xfr#2093188, ir-chk=1368/2286507)
rsync: write failed on "/run/media/me/Samsung_T5/me/a_file": No space left on device (28)

因此,rsync据称复制了大约 218G 的数据,但由于我的 SSD 已满,无法继续复制。

当我询问du我的 SSD 目标上有多少数据时rsync,它说 466G。

$ du -hs /run/media/me/Samsung_T5/me
466G    /run/media/me/Samsung_T5/me

这很奇怪。rsync尝试复制281G,但复制了218G,失败了,因为实际上复制了466G。

我在这里犯了什么错?

我确实知道这一点NTFS并且ext4与众不同。但它们的差异是否足以使我的文件增大 2 倍以上?我复制的内容是否超出了我的实际内容home

rsync将我的 ~280G 备份home到 SSD 的正确步骤是什么home

更新[感谢以下评论]:

我的源目录中有大量的小文件和一定数量的稀疏文件。例如,源中有一个 4K 大的文件,目标中有一个 128K 大的文件。还有一个稀疏文件,源中为 12K,目标中为 128K。

另外,我确实有 244 个到不同可执行文件(例如共享库)的硬链接。其中一些硬链接指向一些相对较大的文件。例如,binutils链接器(ld)的一个版本大约有7M,我有4个硬链接到它。

答案1

你可能会看看表里不一和它的图形用户界面似曾相识。它使用 tar 文件进行增量备份,可以选择加密,也可以选择将其备份到远程服务器。

它使用 librsync 及其滚动校验和算法,以便每个增量存档仅保存文件的更改部分。

主页上说它处理 Unix 权限、符号链接、fifo 和设备文件,但是不保留硬链接。如果您有许多大型硬链接文件,则在存档中可能不是最佳选择,但更重要的是,您可能还需要单独记下哪些文件是相互链接的,以便在需要恢复它们时可以放回链接。如果可能的话,转换为符号链接可以解决这个问题。


您可以寻找类似的硬链接

find /home/me -links +1 -type f -printf '%n %i %D %p\n' | sort -n 

其中格式字符串显示%n链接数、%iinode 号%D设备文件已打开,%p路径名。具有相同 inode 号和设备的行是硬链接。仅当目录树中有挂载点时,该设备才有用(因为不同设备上的相同 inode 不是同一个文件)。当然,即使通过 rsync,也无法处理到树外部文件的硬链接。

答案2

ext4文件系统中目录树的备份

对于要写入备份的 NTFS 文件系统,将系统备份到压缩文件可能效果更好tar存档文件。这样,所有权和权限将被保存,并可以在提取到 Linux 文件系统时恢复。并且小文件和稀疏文件不应该占用太多空间。

如果你还想使用rsync,最好复制到linux文件系统中,例如ext4.这样,它应该能够以正确的方式复制硬链接、小文件和稀疏文件,并避免备份大小大于源大小。

事实是我确实想要一个增加的我家的备份。是否有一种增量构建 tarball 的技术(因为 rsync 仅同步更改的文件)?

是的,有使用 tar 进行增量备份的工具

使用这样的工具是最简单的,如 meuh 的答案中所述,但您也可以查看基础知识,例如这个链接,其中增量备份的关键附加选项是

--listed-incremental=snapshot-file

相关内容