Linux。每周将不同的备份驱动器备份到相同的挂载点

Linux。每周将不同的备份驱动器备份到相同的挂载点

我们有一个外部驱动器,我们的服务器每晚都会备份到该驱动器。它被挂载到 /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

这样,磁盘交换的时间就不是那么重要,并且脚本不会与正在使用的磁盘“不同步”。

相关内容