我想在Linux机器上进行增量备份,下一步:
BACKUP1 BACKUP2 | | | | |--- file1 |--- file1 (symlink to file1 in backup1 because it hasn't changed) | | | | |--- file2 |--- file2 (is copied again because it has changed) | | | | |--- file3 |--- file 3 (same as file1, a symlink)
有没有简单的方法来做到这一点? 我正在使用这个脚本:
#!/bin/sh date=`date "+%Y-%m-%dT%H:%M:%S"` rsync -aP --link-dest=~/Backups/current ~/Documents ~/Backups/back-$date rm -f ~/Backups/current ln -s back-$date ~/Backups/current
但是,这只是复制一切。 感谢:D
我使用rsync和cpio使用自写的bash脚本: http : //pastebin.com/uRdH2uQf
所以,我所做的第一件事就是创build一个目录结构。 我这样工作:每天创build一个备份,第七天(星期日)我把最后一个备份(上周的星期日)放在每周一次。 每4个星期我都会每月进行一次备份。
所有这些备份都是增量式的,基于1个完整备份。
我的目录结构基于/ mnt / backups,如下所示:
--- SERVER1 |--- daily | --- 0 | --- 1 | --- 2 | --- 3 | --- 4 | --- 5 | --- 6 |--- weekly |--- 0 |--- 1 |--- 2 |--- 3 |--- monthly | --- 0 | --- 1 | --- 10 | --- 2 | --- 3 | --- 4 | --- 5 | --- 6 | --- 7 | --- 8 | --- 9
我也使用脚本来快速创build这个结构: http : //pastebin.com/LyFLBZGx
所以,我所有的脚本都位于/ root / backup_tools中。 backup.sh脚本放在crontab中以便每天运行。 我有从我的备份服务器到我需要备份的所有服务器的密钥交换。 在我的工具目录,我把我的排除文件(我不想备份的文件夹/文件)以这种格式:
rsync.exclude.server1
这些文件包含不备份的目录:
/proc /sys /tmp
我也使用我的/.ssh/config文件添加主机(fe:server1.example.com被定义为server1 ssh端口xxxx和用户名foo)。 这使得在脚本的第一行中添加要备份的服务器变得更加容易。
Host server1 User root Port 31337 Hostname server1.example.com
该脚本将检查规则SERVERS =“”,并为每个定义的服务器(空间分隔)启动增量备份(排除排除文件中的所有目录)。
它将使用cpio来旋转目录(cpio允许将链接拷贝到磁盘上的实际块中,因此文件将在硬盘上显示两次,而且只能使用一次空间,因为它不是符号链接,因为当您删除原始文件时,重复仍然是可读的)
我希望这有点清楚。 bash脚本并不完美,但它的工作。 我用它来每晚备份4台服务器。 我现在有几个月的备份,他们不大。 这真的是节省空间。
在你的例子中,你提到了符号链接,然而rsync交易在硬链接。 您在评论中提到您不确定链接是什么,所以Reader's Digest版本是:
rsync的“–link-dest”选项为不变的文件创build硬链接。 这使得在试图确定你的脚本是否按照预期工作时有点混乱,因为如果你要检查备份目录中所有文件的大小(例如,使用du -sh [directory]或通过检查GUI中的属性),它会看起来像原来的目录相同的大小,无论有多less这些文件实际上是硬链接,因此不占用任何额外的空间。
使用df或通过查看实际磁盘空间的GUI工具检查磁盘上的空间。 然后,运行你的备份脚本,再次检查 – 如果没有文件改变,磁盘使用不应该改变(好吧,好吧,一点点 – 硬链接本身需要less量的空间)。 如果文件确实发生了变化,则磁盘使用率将会随着文件更改而增加。
在任何一种情况下,rsync的输出都会列出正在检查的文件,不pipe是否真的复制它们。 以“加速”的价值来看,如果这个数字小于1,表明你至less有一些硬链接,因为这代表了rsync估计它将复制所有数据的百分比差异文件。
你真的想用硬链接来做到这一点。 在linux机器上做这种备份的最佳工具是rsnapshot 。 它完全符合你的描述,而且设置起来非常简单。