我使用 Ubuntu 14.04.4 LTS 作为家庭 NAS 服务器。我已经制定了一些计划的 rsync 脚本来将我的照片、文档等备份到外部驱动器。
我想对整个系统执行相同的操作,例如动态地将“/”分区克隆到该外部驱动器,或者在每周自动重启后克隆。
有没有什么方法可以自动化计划任务工作?
提前致谢!
答案1
您可以使用一个命令完成您想要的操作,但需要注意一些事项。
请继续阅读。
注意:以下内容几乎全部引自这个 archlinux.org wiki。我只是对措辞和格式做了一些修改,但没有什么实质性的变化。所有的功劳都归功于优秀的 wiki.archlinux.org 的维护者和贡献者。
此命令依赖于和bash
shell中可用的括号扩展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 作业中执行此操作(例如在重新启动时),请使用@reboot
cron 作业中的指令而不是特定的日期或时间。例如,以下 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
记住首页是你的朋友!