如何让 rsync 备份脚本仅在安装外部驱动器时执行备份?

如何让 rsync 备份脚本仅在安装外部驱动器时执行备份?

我有一个外置 SSD。有时插上,有时不插。我已经解决了启动时挂起的 FSTAB 问题 - 一切都很好。我有一个使用 RSYNC 将我的主驱动器备份到该驱动器的脚本。

  • 当驱动器连接时 - 运行完美。
  • 当驱动器未连接时,Fstab 会创建挂载点,并且 RSYNC 会备份到本地驱动器。

我不想这样。我要么不想创建挂载点(如果驱动器不存在),要么只让 RSYNC 备份到驱动器 - 而不是挂载点。

由于挂载点从技术上讲是在本地挂载的 - 我无法弄清楚 RSYNC 如何知道其中的差异。

答案1

否,fstab 不会创建挂载点。fstab在系统启动期间执行定义的挂载。此后,fstab 将不执行任何操作。外部驱动器通常不会在 fstab 中声明,因此由可移动驱动器的自动挂载机制处理。

要解决您的问题,请在继续执行命令之前在脚本中包含一个测试。您可以简单地测试移除驱动器上的目标文件夹是否存在,然后再继续执行 rsync 命令。或者,您可以使用或或(相当于)rsync测试驱动器是否已安装。findmntmountpointmountcat /proc/mounts

答案2

我的 rsync 脚本包含此检查和挂载,因为我错误地复制到了 /,然后数据被隐藏在另一个挂载点下,这使得查找和删除变得更加困难。我还在 rsync 备份中运行了一些其他命令来记录系统配置,并按版本将这些文件复制到子文件夹中。

LOG=/var/log/backup.log
echo "* $(date -R) *" >> $LOG
# HOSTNAME=$(hostname -s)
SYSFOLDER="z690"
VERFOLDER="jammy"
if grep -qs /mnt/backup /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."
  mount -t ext4 /dev/sda3 /mnt/backup
  if [ $? -eq 0 ]; then
   echo "Mount success!"
  else
   echo "Something went wrong with the mount..."
   exit $?
  fi
fi

相关内容