我正在寻找如何将 CentOs 7 中的用户主目录自动备份到远程主机或 NAS 或仅备份到 ~/.snapshot。在某些 Linux 设置中,我在用户的主目录 (~/.snapshot/) 中看到了一个 .snapshot 文件夹,其中保存了其主目录每小时、每晚和每周的备份(即 ~/.snapshot/weekly1 ,用于保存其主目录的副本) 1 周前位于用户的主目录中)。
/home/username/.snapshot/ 目录对于用户来说是只读的。它不是为了防止硬件故障而进行的备份。如果您不喜欢所做的更改,那么能够恢复昨天或今天早上的文件真是太好了。
我看过几篇有关堆栈溢出的相关帖子,但到目前为止,我还没有看到解释完整工作流程的指南。
这是我目前所知道的:
- 用于
rsync
将给定文件夹的内容复制到远程主机、NAS 或 (~/.snapshot/hourly0) - 创建shell脚本来执行
rsync
命令
#!/bin/bash sudo rsync -av --progress --delete --log-file=/home/username/$(date +%Y%m%d)_rsync.log --exclude "/home/username/.snapshot" /home/username/ /home/username/.snapshot/hourly1
- 更改脚本的权限以使其可执行
sudo chmod +x /home/username/myscript.sh
用于
crontab
按所需的备份间隔安排 rsync 命令在运行计划的每小时 rsync 之前,以某种方式将 hourly0 移动到 hourly1
rsync 成功完成后删除最旧的备份
是否有任何指南介绍如何执行此操作?我不明白如何随着时间的推移自动重命名文件夹(即 Week1 到 Week2),或者如果我决定只保留最多 9 周,如何删除“week10”。这是另一项cron
工作吗?
更新:经过更多谷歌搜索后,我发现 NetApp 创建了快照文件夹。我只是目前没有 NetApp NAS。https://library.netapp.com/ecmdocs/ECMP1635994/html/GUID-FB79BB68-B88D-4212-A401-9694296BECCA.html
答案1
这篇指南怎么样:
创建脚本:创建新文件并调用它
myrsync.sh
,复制/粘贴以下行:#!/bin/bash sudo rsync -av --progress --delete --log-file=/home/您的用户名/桌面/$(日期 +%Y%m%d)rsync.log --排除“/home/您的用户名/.folder”/home/data/media/dataBackup$(日期+%Y%m%d_%T)
标志的含义:
-av bit: 'a' means archive, or copy everything recursively, preserving things like permissions, ownership and time stamps.
-'v' is verbose, so it tells you what its doing, either in the terminal, in this case, in the log file.
--progress gives you more specific info about progress.
--delete checks for changes between source and destination, and deletes any files at the destination that you've deleted at the source.
--log-file saves a copy of the rsync result to a date-stamped file on my desktop.
--exclude leaves out any files or directories you don't want copied. In the command above, the .folder directory
/home/data is the directory I want copied. /home/data copies the directory and its contents, /home/data would just copy the contents.
/media/dataBackup_$(date +%Y%m%d_%T) is the separate drive. Change this to whatever your backup location is. Note that `rsync` will name every sync differently based on day/time of sync
保存
myrsync.sh
在 ~$HOME 中并通过键入以下命令使其可执行:sudo chmod +x /home/您的用户名/Desktop/rsync-shell.sh
现在,您可以双击该 .sh 文件,选择“在终端中运行”,它会询问您的密码并运行,然后在桌面上留下一个日志文件。或者,您可以创建一个 cron 作业来为您完成此操作!
- 计划任务
通过键入以下内容将myrsync.sh
文件复制到 /root:
sudo cp /home/your-username/Desktop/myrsync.sh /root
然后输入:
sudo crontab -e
您将看到一行内容:分钟小时日月年命令
在其下,输入: 0 22 * * * /root/myrsync.sh > $HOME/readme.log 2>&1
这意味着:
The minute
The hour in military time (24 hour) format (0 to 23)
The day of the month (1 to 31)
The month (1 to 12)
The day of the week(0 or 7 is Sun, or use name)
The command to run
So at 22:00 (10pm) every day root will run the shell script, without prompting you for sudo password (because its running as root already).
现在按 Control-X,然后键入“Y”,然后按 Enter
为了删除较旧的备份,一种方法是创建一个文件,其中包含每次同步的时间戳。例如rsync
在命令后面添加以下命令myrsync.sh
date +%Y%m%d_%T >> time.txt
使用该命令find
删除与时间戳匹配的备份 例如:在date +%Y%m%d_%T >> time.txt
in之后添加此命令myrsync.sh
find . -type f ! -newer /tmp/timestamp -delete
或者
find . ! -newermt $date ! -type d -delete
这将删除特定日期/时间之前的备份。
可以找到每小时/每天/每月备份的更多详细信息和示例代码这里