我们有一个外部驱动器,我们的服务器每晚都会备份到该驱动器。它被挂载到 /snapshots。我们计划每周更换此磁盘。问题是一个驱动器显示为 /dev/sdc,另一个显示为 /dev/sdd。在 fstab 中,挂载设置为 /dev/sdc。在备份之前,脚本运行以挂载 /snapshots,该脚本从 fstab 获取其挂载点。
我怎样才能让它在一周内挂载 /dev/sdc,在下一周挂载 /dev/sdd。它必须是自动的,因为交换磁盘的人不会进入终端。
答案1
您可以每周创建一个 crontab0 2 * * 2 /usr/local/script.sh
并输入script.sh
:
#!/bin/bash
mark_file=/tmp/job-run-marker
# check whether the job runned last week
if [ -e $mark_file ] ; then
rm -f $mark_file
unmout /snapshots
mount /dev/disk/by-label/even-weeks /snapshots
else
touch $mark_file
unmout /snapshots
mount /dev/disk/by-label/odd-weeks /snapshots
fi
$mark_file
脚本在第一次运行时找不到,因此它将挂载/dev/disk/by-label/even-weeks
。在第二次运行时,脚本将删除$mark_file
然后挂载/dev/disk/by-label/odd-weeks
。第三次运行与第一次运行相同。因此,如果此脚本由 cron 每周运行一次,则作业命令将每两周运行一次。
提示:标记您的磁盘ln -s /dev/disk/by-uuid/UUID /dev/disk/by-label/even-weeks
编辑 :
- 对@Mat 的评论进行更正。
- 来自@nearora 的评论:使用指向 /dev/disk/by-id/ 的链接标记你的文件系统,而不是使用 /dev/sd[az]。
答案2
当我执行此类备份脚本时,我只需挂载当时连接的备份磁盘即可。显然,它们被标记为 BackupDisk1、BackupDisk2...
if mount /dev/disk/by-label/BackupDisk* /snapshots
then
# rest of backup script goes here
else
logmsg "Unable to mount external drive."
fi
这样,磁盘交换的时间就不是那么重要,并且脚本不会与正在使用的磁盘“不同步”。