我花了一整天的时间尝试 rsyncexclude-from
和include-from
,没有成功,完全迷失了。我找不到的任何示例或帮助都无法回答我的确切但相当简单的要求,而且,要么我无法使它们发挥作用,要么我没有得到我想要的结果,我也无法理解为什么。
我正在尝试设置每日自动备份,经过前几天的尝试,基于这个非常好的网站,我密切关注增量备份,并且在测试中一切正常,我已经达到了仅对我的 /home/Harry 目录进行空运行的阶段,没有排除和包含,而且它也工作得很好。我还整理了 cron 作业来为我运行它。
在有人建议使用 rsync 和 cron 以外的其他方法之前,请注意,我将安排它在每天晚上 11 点至 30 点运行,并在几分钟后关闭计算机。这在测试中也效果很好。如果当时计算机没有打开也没关系,因为那天没有任何内容可以备份。
为了进一步取得进展,并使用 Mark Sobell 所著的“Fedora 和 Red Hat LInux 实用指南”中的建议,第 7 版第 607 页,以及我想对其进行改进的其他来源包括 /home/
,/var/
,/usr/local/
和/etc/
;和排除 /tmp/
、/var/tmp/
、/usr/tmp/
、/proc/,
/sys/ 和/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"
答案1
包括/
(根文件系统),并包括您要备份的任何其他文件系统的根(例如,如果/home
位于单独的分区上,也包括它)。使用该-x
选项排除所有其他文件系统:内存中的文件系统(例如/proc
和 )/sys
、已安装的可移动媒体、远程文件系统等。
排除您不想备份的文件。/tmp
是一个常见的候选者,也许还有,等/var/tmp
下的一些目录。/var/cache
备份空间非常昂贵,因此您可能不想备份易于恢复的文件,例如从软件包安装的程序。所以你应该排除/usr
except /usr/local
。看Rsync 过滤器:仅复制一种模式有关 rsync 包含和排除列表的介绍性指南。你会想要类似的东西
rsync -ax --exclude='/tmp/*' --include=/usr/local --exclude=/usr / backup:
答案2
您可以使用 rsync 进行完整系统备份。您可以对所有不需要的目录使用 --exlude=PATTERN 。
rsync——一种快速、多功能、远程(和本地)文件复制工具
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
-A, --acls preserve ACLs (implies -p)
-X, --xattrs preserve extended attributes
-v, --verbose increase verbosity
例子 :
rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/usr/tmp/*","/run/*","/mnt/*","/media/*","/var/cache/*","/","/lost+found"} /* /path/to/some/backup/folder
答案3
所以--排除文件,将是:
var/tmp/
var/cache/
并像这样使用 rsync:
rsync -aAv --delete --stats --exclude-from /excludes /home /var /usr/local /etc /Backup/
答案4
基于备份中包含哪些文件夹?,我选择排除显示的文件夹/文件:
#!/bin/bash
sudo rsync -aAXvlH --delete --exclude={"/bin/*","/boot/*","/dev/*","/home/*","/lib/*","/lib32/*","/lib64/*","/media/*","/mnt/*","/NAS/*","/Pool-1tb/*","/Pool-500gb/*","/proc/*","/run/*","/sbin/*","/srv/*","/sys/*","/tmp/*","/usr/bin/*","/usr/games/*","/usr/include/*","/usr/lib/*","/usr/lib32/*","/usr/libexec/*","/usr/sbin/*","/usr/share/*","/usr/src/*",".Trash*"} / /NAS/System\ Files/
这是我使用的标志:
-a - Archive mode includes among other things, the options -o and -g, which preserves owners and groups. This requires that you run rsync as root.
-A - Preserve Access Control List.
-X - Preserve extended attributes.
-v - It will show the progress of the backup.
-l - Copy symlinks as symlinks.
-H - Preserve hard links.
然后我为包含上述代码的文件创建了一个 cron 作业。
为了解决我在 Synology 上运行 rsync 时遇到的大量符号链接错误,我必须转到Control Panel / File Services / SMB / Advanced Settings
并选中“允许共享文件夹中的符号链接”旁边的框。根据您使用的 NAS,您可能有类似的设置。
如果您觉得这有帮助,请考虑投票。任何建设性的批评也将受到赞赏。谢谢!