我想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
链接数、%i
inode 号%D
、设备文件已打开,%p
路径名。具有相同 inode 号和设备的行是硬链接。仅当目录树中有挂载点时,该设备才有用(因为不同设备上的相同 inode 不是同一个文件)。当然,即使通过 rsync,也无法处理到树外部文件的硬链接。
答案2
ext4
文件系统中目录树的备份
对于要写入备份的 NTFS 文件系统,将系统备份到压缩文件可能效果更好tar
存档文件。这样,所有权和权限将被保存,并可以在提取到 Linux 文件系统时恢复。并且小文件和稀疏文件不应该占用太多空间。
如果你还想使用rsync
,最好复制到linux文件系统中,例如ext4
.这样,它应该能够以正确的方式复制硬链接、小文件和稀疏文件,并避免备份大小大于源大小。
事实是我确实想要一个增加的我家的备份。是否有一种增量构建 tarball 的技术(因为 rsync 仅同步更改的文件)?
是的,有使用 tar 进行增量备份的工具
使用这样的工具是最简单的,如 meuh 的答案中所述,但您也可以查看基础知识,例如这个链接,其中增量备份的关键附加选项是
--listed-incremental=snapshot-file