家庭服务器的定期备份

家庭服务器的定期备份

我使用 Ubuntu 14.04.4 LTS 作为家庭 NAS 服务器。我已经制定了一些计划的 rsync 脚本来将我的照片、文档等备份到外部驱动器。

我想对整个系统执行相同的操作,例如动态地将“/”分区克隆到该外部驱动器,或者在每周自动重启后克隆。

有没有什么方法可以自动化计划任务工作?

提前致谢!

答案1

您可以使用一个命令完成您想要的操作,但需要注意一些事项。
请继续阅读。

注意:以下内容几乎全部引自这个 archlinux.org wiki。我只是对措辞和格式做了一些修改,但没有什么实质性的变化。所有的功劳都归功于优秀的 wiki.archlinux.org 的维护者和贡献者。

此命令依赖于和bashshell中可用的括号扩展zsh。使用不同的 shell 时,--exclude应手动重复模式。

$ rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /path/to/backup/folder

使用-aAX一组选项,文件以存档模式传输,确保符号链接、设备、权限和所有权、修改时间、ACL 和扩展属性得到保留。

--exclude选项将导致排除与给定模式匹配的文件。、、和的
内容被排除,因为它们是在启动时填充的(而文件夹本身并未创建),是文件系统特定的。 引用排除模式将避免 shell 扩展,这在通过 SSH 备份时是必要的。 以 结尾排除的路径仍将确保目录本身被创建(如果尚不存在)。/dev/proc/sys/tmp/run/lost+found

*

注意: - 如果您计划在或
以外的其他地方备份系统,请不要忘记将其添加到排除模式列表中,以避免无限循环。 - 如果系统中有任何绑定挂载,也应将其排除,以便绑定挂载的内容仅复制一次。 - 如果您使用交换文件,请确保也将其排除。 - 还要考虑您是否/mnt/media


真的想要备份/home/文件夹。如果它包含用户数据(例如在桌面操作系统上),它可能比系统本身大得多,并且与备份系统本身无关。-
否则[例如在服务器计算机上]考虑排除不重要的子目录,例如,,,,,,具体/home/*取决于系统上安装的软件。如果安装了 GVFS,则必须排除以防止 rsync 错误。/.thumbnails/*/home/*/.cache/mozilla/*/home/*/.cache/chromium/*/home/*/.local/share/Trash/*/home/*/.gvfs

如果您希望在 cron 作业中执行此操作(例如在重新启动时),请使用@rebootcron 作业中的指令而不是特定的日期或时间。例如,以下 cron 作业script.sh仅在系统重新启动后运行一次脚本文件:

在终端(CTRL+ALT+T)中,从非 root 用户帐户:

$ crontab -e
@reboot /absolute/path/to/script.sh

要将该作业编程为 root cron 作业:

$ sudo -e crontab -e
@reboot /absolute/path/to/script.sh

请记住指定要在 cron 作业中运行的文件的完整路径。
有关该@reboot指令以及您可以在 cron 作业中使用的其他指令的更多信息,请在命令提示符下键入以下命令:

$ man 5 crontab

您的脚本应该可执行。

$ sudo chmod +x /absolute/path/to/script.sh

如果你打算通过 udev 规则触发它您不应该使用 cron 作业,而应该rsync在后台运行 cmd,如下所示:

$ cat script.sh
#!/bin/bash
{
/usr/bin/rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /path/to/backup/folder
} &
exit 0

记住首页是你的朋友!

相关内容