我花了一整天的时间尝试 rsyncexclude-from
和include-from
,没有成功,完全迷失了。我找不到的任何示例或帮助都不能满足我的确切但相当简单的要求,而且,要么我无法使它们发挥作用,要么我没有得到我想要的结果,我也无法理解为什么。
我正在尝试设置每日自动备份,经过前几天的尝试,基于这个非常好的网站,我密切关注了增量备份,并且在测试中一切正常,我已经达到了仅对我的 /home/Harry 目录进行空运行,无需排除和包含,而且效果也很好。我还整理了 cron 作业来为我运行它。
在有人建议使用 rsync 和 cron 以外的其他方法之前,请注意,我将安排它在每天晚上 11 点至 30 点运行,并在几分钟后关闭计算机。这在测试中也效果很好。如果当时计算机没有打开也没关系,因为那天没有任何内容可以备份。
为了进一步取得进展,并使用 Mark Sobell 所著的《Fedora 和 Red Hat LInux 实用指南》第 7 版第 607 页中的建议以及其他来源,我想对其进行改进以包括 /home/
、/var/
和;并排除, , , /sys/ 和./usr/local/
/etc/
/tmp/
/var/tmp/
/usr/tmp/
/proc/,
/var/cache/
请问:首先这些清单合理吗?第二:如何在 rsync 调用中指定此要求?
在回答我的问题后添加。
感谢所有回答我最初问题的人,我现在有了一个可行的解决方案,在下面的脚本中列出。我的经验可能对任何尝试类似事情的人有用,迈克尔霍纳要求我展示出问题的地方。请参阅引用的网站,了解该循环如何工作的完整说明,以及所需的最小存储空间。
我之前的试验是记录在脚本中的注释行中,这就是我用于测试的内容,最初是为了备份一些测试文件,后来尝试将备份保存到外部硬盘驱动器上。我的做法是,当我更改某些内容时,我会通过保留并注释掉原始内容来记录更改,以便在必要时可以再次返回。
以 CA6 开头的长标识符适用于 1 TB 外部硬盘驱动器,我打算在其上存储每日备份,可能以 10 天为一个周期。我还有一个 750 GB 的驱动器,用于每周备份,可能每年一次。您将在脚本接近结尾处看到此循环仍需注意。
我不关心如果发生崩溃是否需要精确恢复系统。我以前拥有三台计算机,没有一台出现故障,但我在外部硬盘驱动器上保留了手动备份,现在只是使用它们作为我仍然需要的任何材料的来源。所以我会从一个简单的安装开始,然后根据需要添加我需要的东西。
正如我的问题所暗示的,我尝试使用 rsyncexclude-from
和include-from
,但无法掌握必要文件的格式。稍后我可能会尝试将长列表放入文件中。
#!/bin/bash
# Adapted from: http://webgnuru.com/linux/rsync_incremental.php
# Website Backup Script
#======================================================================
# Define Variables
# Todays date in ISO-8601 format e.g. 2013-10-19:
DAY0=`date -I`
# Yesterdays date in ISO-8601 format:
DAY1=`date -I -d "1 day ago"`
# The source directory:
SRC="/home/Harry/testrsync/bravo/"
#SRC="/home/Harry/"
# Filename of list of files to include
INC="/home/Harry/testrsync/include"
# Filename of file list to exclude
EXC="/home/Harry/testrsync/exclude"
# The target directory:
#TRG="/home/Harry/testrsync/backups/$DAY0"
TRG="/run/media/Harry/CA6C321E6C32062B/annals/$DAY0"
# The link destination directory:
#LNK="/home/Harry/testrsync/backups/$DAY1"
LNK="/run/media/Harry/CA6C321E6C32062B/$DAY1"
# The log file
#LOG="--logfile="/home/Harry/testrsync/backups/bulog --log-file-format="%t\n";""
LOG="--log-file=/home/Harry/testrsync/backups/bulog"
#The rsync options:
#OPT="--dry-run -avh --delete --link-dest=$LNK"
OPT="-aAXvh --delete --link-dest=$LNK"
#OPT="-ah --delete --link-dest=$LNK"
#======================================================================
#Execute the backup
#rsync -avvv $OPT --include-from=$INC --exclude-from=$EXC $SRC $TRG $LOG
#rsync -avv $OPT --include-from=$INC $SRC $TRG $LOG
#rsync $OPT--delete --stats --exclude-from=$EXC /home/Harry /var /usr/local /etc $TRG $LOG
rsync $OPT --exclude {"/dev/*","/proc/*","/sys/*","/tmp/*","/usr/tmp/*","/run/*","/mnt/*","/media/*","/var/cache/*","var/tmp/*","/","/lost+found"} /* $TRG $LOG
#Delete old backups cyclically
# for my tests I am going to use a three day cycle
DAY4=`date -I -d "4 days ago"`
#Delete the backup from 4 days ago, if it exists
if [ -d /home/Harry/testrsync/backups/$DAY4 ]
then
rm -r /home/Harry/testrsync/backups/$DAY4
#rm -r /run/media/HarryCA6C321E6C32062B/$DAY4
fi
# Cron does not output to a screen, so no result from next line
# zenity --info --text='Backup complete' --title="Backup Test"
Run Code Online (Sandbox Code Playgroud)
因此,--exclude-from文件将是:
var/tmp/
var/cache/
Run Code Online (Sandbox Code Playgroud)
并像这样使用 rsync:
rsync -aAv --delete --stats --exclude-from /excludes /home /var /usr/local /etc /Backup/
Run Code Online (Sandbox Code Playgroud)