无法使用 TAR 执行增量备份

无法使用 TAR 执行增量备份

环境:Azure 中的 Ubuntu 16.04

我正在尝试备份特定文件夹。我使用一个简单的 tar 命令,没有压缩。我的目标是将文件保留一个月,每天逐步添加一次更改,然后每月压缩一次 tar 并启动一个新文件。

我的问题是:本地备份对我来说没有意义,因为如果本地文件系统死机或出现错误,原始文件系统和备份文件系统都会死机。(似乎很明显,但为了清楚起见我这样说)

我尝试使用 SMB 连接备份到单独的 Azure 存储容器,并通过 NFS 备份到另一台相同的 Ubuntu 机器。

我尝试了第二种选择,因为我读了这篇文章: tar 增量备份每次在 Dropbox 目录上使用时都会备份所有内容

因此,无论我做什么,tar 似乎都会在发出以下命令时忽略 -u 标志:

cd /savelocation; sudo /bin/tar --ignore-failed-read -up -f /savelocation/backupfoldername.tar /var/www/foldertobackup

我得到的不是额外的几兆(代表添加或更改的文件),而是一个 44GB 的文件,是原始文件大小的两倍。

任何想法或问题都将受到热烈欢迎。

答案1

根据我在这里的测试。


第一的:我认为这cd对于执行命令来说不是必需的。

第二:您应该--listed-incremental在您的命令中使用。

-g, --列出增量文件

处理新的 GNU 格式增量备份


--listed-incremental根据我的测试以及评论中列出的其中一条观察结果,似乎只有当您已经拥有 TAR 文件时才有效。

含有空文件的文件夹

$ ll folder
total 8,0K
-rw-rw-r-- 1 ivanleon ivanleon 9 Jun  6 11:32 file1
-rw-rw-r-- 1 ivanleon ivanleon 9 Jun  6 11:32 file2
-rw-rw-r-- 1 ivanleon ivanleon 0 Jun  6 11:27 file3

创建磁带档案文件

$ sudo /bin/tar -cvf folder.tar folder
folder/
folder/file2
folder/file3
folder/file1

列出磁带档案文件

$ tar tvf folder.tar 
drwxrwxr-x ivanleon/ivanleon 0 2017-06-06 11:27 folder/
-rw-rw-r-- ivanleon/ivanleon 0 2017-06-06 11:27 folder/file2
-rw-rw-r-- ivanleon/ivanleon 0 2017-06-06 11:27 folder/file3
-rw-rw-r-- ivanleon/ivanleon 0 2017-06-06 11:27 folder/file1

添加/修改文件夹中某些文件的数据

$ echo "newdata1" >> folder/file1
$ echo "newdata2" >> folder/file2

生成新的磁带档案文件(进行增量备份)

$ sudo /bin/tar -cvf --listed-incremental folder.tar folder
folder.tar
folder/
folder/file2
folder/file3
folder/file1

列出磁带档案文件(文件被替换)

$ tar -tvf folder.tar 
drwxrwxr-x ivanleon/ivanleon 0 2017-06-06 11:27 folder/
-rw-rw-r-- ivanleon/ivanleon 0 2017-06-06 11:27 folder/file2
-rw-rw-r-- ivanleon/ivanleon 0 2017-06-06 11:27 folder/file3
-rw-rw-r-- ivanleon/ivanleon 0 2017-06-06 11:27 folder/file1

答案2

我对 --listed-incremental 做了一些研究。大多数文章充其量是令人困惑的,细节不够详细,无法完全理解。然后我发现了下面的文章,解释得很清楚:

http://paulwhippconsulting.com/blog/using-tar-for-full-and-incremental-backups/

我唯一想补充的是,我向作者询问过,如果你在一个小目标上进行测试,那么如果你立即进行测试,看起来你不会得到一个像样的增量,因为增量中存在很大的开销。但是,一旦你在更大的备份上实施它,它就会运行完美。

我没有备份到通过 SMB 连接的单独 Azure 存储帐户,而是创建了第二个相同的服务器并通过 nfs 连接它。它更加稳定,并且没有文件系统差异,不会造成混乱。我正在设置一个脚本,它将压缩每个备份,然后在每次备份完成后将其复制到 Azure 存储容器。通过在备份服务器上执行 zip,可以节省生产服务器的处理时间和功耗。我希望这对某些人有帮助。

相关内容