You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

预挂载samba共享的Cron rsync任务安全风险及防护方案咨询

避免rsync误删备份的防护方案

单纯执行ls判断目录内容的方案不够稳妥:一是如果共享本身确实存在批量删除文件的正常操作,ls校验会正常执行同步,依然会删除备份文件;二是如果挂载成功但共享权限配置异常导致读不到内容,也会出现误判。更可靠的方案如下:

1. 前置校验机制(推荐优先配置)

你可以通过两类校验判断共享是否正常挂载,校验通过才执行同步:

  • 固定标志文件校验:提前在Samba共享的根目录中创建一个专属隐藏文件,比如.samba_marker,注意不要在本地未挂载的/mnt/share目录中放入该文件。每次同步前先判断该文件是否存在,不存在就直接终止同步。
  • 挂载点校验:用mountpoint命令直接判断目录是否为已挂载的网络文件系统,排除挂载失败访问本地空目录的情况。

可以把同步逻辑写成独立脚本,示例如下:

#!/bin/bash
LOG_PATH="/var/log/rsyncbackup.log"
# 同时执行两项校验
if ! mountpoint -q /mnt/share || [ ! -f /mnt/share/.samba_marker ]; then
    echo "$(date "+%Y-%m-%d %H:%M:%S") Samba共享未正常挂载,跳过同步" >> $LOG_PATH
    exit 1
fi
# 校验通过执行同步
/usr/bin/rsync -av --delete /mnt/share/ /mnt/backup/ --log-file=$LOG_PATH

给脚本添加执行权限:
chmod +x /usr/local/bin/rsync_samba_backup.sh
之后把cron任务改成调用该脚本即可:
0 2 * * 7 /usr/local/bin/rsync_samba_backup.sh

2. rsync原生参数限制删除范围

rsync自带--max-delete参数,可以限制单次同步最多删除的文件数量,超过阈值时rsync会直接终止删除操作,避免备份被清空。
比如设置单次最多删除20个文件,修改后的rsync命令如下:
/usr/bin/rsync -av --delete --max-delete=20 /mnt/share/ /mnt/backup/ --log-file=/var/log/rsyncbackup.log
也支持按比例设置,比如--max-delete=10%表示最多删除目标目录10%的文件,适配文件总量变化的场景。

3. 快照兜底机制

如果你的备份分区使用Btrfs、XFS或LVM,可以在每次同步前给备份目录创建快照,就算出现极端情况误删了备份数据,也可以从快照快速恢复。
以Btrfs为例,快照命令示例:
btrfs subvolume snapshot /mnt/backup /mnt/backup_snap/$(date +%Y%m%d_%H%M)
你可以定期清理超过30天的旧快照,避免占用过多磁盘空间。

4. 优化fstab挂载参数降低挂载失败概率

在你现有的fstab挂载参数中添加网络挂载专属参数,减少开机挂载失败的概率:
//ip/share /mnt/share cifs credentials=/home/user/.smbcredentials,uid=user,_netdev,nofail,x-systemd.mount-timeout=30 0 0
参数说明:

  • _netdev:标记为网络设备挂载,系统会等待网络就绪后再执行挂载,避免开机时网络未加载导致挂载失败
  • nofail:挂载失败时不阻塞系统启动
  • x-systemd.mount-timeout=30:设置30秒挂载超时,避免长时间卡住

内容的提问来源于stack exchange,提问作者spm2600

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:45:01