我应该使用 rsync 包含和排除哪些内容来备份我的系统?

我应该使用 rsync 包含和排除哪些内容来备份我的系统?

我花了一整天的时间尝试 rsyncexclude-frominclude-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-frominclude-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

备份空间非常昂贵,因此您可能不想备份易于恢复的文件,例如从软件包安装的程序。所以你应该排除/usrexcept /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,您可能有类似的设置。

如果您觉得这有帮助,请考虑投票。任何建设性的批评也将受到赞赏。谢谢!

相关内容