生成的 Rsync 目标目录似乎太大

生成的 Rsync 目标目录似乎太大

我使用一个简单的脚本通过 rsync 从本地 linux 站(XFS 文件系统)到附加的外部 HD(NTFS 文件系统)创建增量备份:

#!/bin/sh
TIMESTAMP=`date "+%Y-%m-%dT%H-%M-%S"`
USER=USER1
SOURCEDIR=/data
TARGETDIR=/run/media/sbembenek/easystore1

# Create new backup using rsync and output to log
rsync -avPh --delete --link-dest=$TARGETDIR/$USER-Current $SOURCEDIR/$USER/ $TARGETDIR/$USER-$TIMESTAMP > /archive/Backup-Logs/$USER-$TIMESTAMP.log 2>&1
# check exit status to see if backup failed
    if [ "$?" = 0 ]; then
# Remove link to current backup
        rm -f $TARGETDIR/$USER-Current
# Create link to the newest backup
        ln -s $TARGETDIR/$USER-$TIMESTAMP $TARGETDIR/$USER-Current
    else
# Rename directory if failed
        mv $TARGETDIR/$USER-$TIMESTAMP $TARGETDIR/failed-$USER-$TIMESTAMP
    fi

我使用“du -h -d1”检查了以这种方式创建的备份目录。我发现创建的第一个备份目录确实是最大的,之后的较小,但是后面的目录大小都差不多。也就是说,我从未发现后一个目录比前一个目录小得多,即使它们之间“基本上”没有文件发生变化。根据大小,我发现备份似乎比增量备份更具差异性(与第一个备份相比)。

更糟糕的是,对于我的其他备份集,每个备份目录都与初始备份相同。我缺少什么?

答案1

我想说你的解决方案可能正在做它应该做的事情。

有一些代码问题 - 您应该将所有变量放在双引号内,例如ln -s "$TARGETDIR/$USER-$TIMESTAMP" "$TARGETDIR/$USER-Current"。据我所知,你已经彻底改造了rsnapshot

我认为混乱来自于文件硬链接。硬链接不仅会使文件看起来像是在目录中,而且实际上它在该目录中。您的每个备份看起来像是整个备份集的副本,但是当您仔细观察时,会发现备份集之间未更改的文件仅使用一个存储实例。如果您有一个 100GB 的备份,并且 90% 保持不变,那么您最终可能会得到两个备份集,它们之间仅占用 110GB - 但单独测量时,每个备份集都使用 100GB。

du命令只会对文件使用情况进行一次计数,因此您可以在整个备份层次结构中使用它来查看备份集之间的实际差异。

例子

# The same file, linked
ls -l top/dir?/*
-rwxrwx---+ 2 roaima roaima 1690442768 May  2 17:56 top/dir1/file.mp4
-rwxrwx---+ 2 roaima roaima 1690442768 May  2 17:56 top/dir2/file.mp4

# First directory
du -hs top/dir1
1.6G    top/dir1

# Second directory
du -hs top/dir2
1.6G    top/dir2

# Both directories, but each file is counted only once
du -hs top/dir?
1.6G    top/dir1
0       top/dir2

# All directories, but each file is counted only once
du -hs top
1.6G    top

在你的例子中尝试这个

du -hs "$TARGETDIR"/*

答案2

在进行 rsync 之前,对于增量,我执行 cp -al ,它为 rsync 提供了参考点。 cp -al(使用硬链接存档而不是复制)。只要您有一个或多个硬链接指向原始文件,该文件就会保留下来。

例如。 cp -al lastbkup newbackup 然后与 newbackup 进行 rsync

答案3

rsync 到 NTFS-3g 时会出现问题,因为默认情况下文件权限通常全部转换为 777(rwx 为全部)。因此,也许当您使用权限 644 复制文件 A 时,第一个副本将变为 777 A。后来的副本将无法链接到此文件,因为原始文件仍然是 644 A,即使第二个副本是 777 A。rsync 必须将源权限与链接目标进行比较并找到不匹配的地方。

一种选择是将-a其中包括保留用户、组和权限的内容替换为-rlt.

或者,使用额外的选项挂载文件系统permissions(或使用 window-linux 用户映射文件),以保留 Posix 权限。

答案4

感谢大家的帮助。我决定将外部驱动器格式化为 XFS,这与源驱动器相同。它成功了!我可以确认第一个和后续备份的大小(通过du -h -d1):

117G    ./Apps-2020-05-04T14-19-42
3.5G    ./Apps-2020-05-04T15-07-12
121G    .

相关内容