Linux NFS文件夹同步脚本

Linux NFS文件夹同步脚本

#!/bin/bash
# NFS 同步脚本:挂载NFS并同步文件夹(添加/删除内容)
# 作者:Aux
# 注意:替换变量值,并在测试环境验证。

set -e                              # 任何命令失败时退出脚本

# 定义变量(根据您的环境修改)
NFS_SERVER=""                       # NFS服务器IP,例如您的PVE服务器IP
NFS_PATH=""                         # NFS共享路径
LOCAL_MOUNT=""                      # 本地挂载点目录
SOURCE_DIR=""                       # 源文件夹(本地)
TARGET_DIR="${LOCAL_MOUNT}"         # 目标文件夹(在NFS挂载点内)
LOG_FILE="/var/log/nfs_sync.log"    # 日志文件路径

# 检查挂载点是否存在,如不存在则创建
if [ ! -d "$LOCAL_MOUNT" ]; then
  sudo mkdir -p "$LOCAL_MOUNT"
  echo "创建挂载点目录: $LOCAL_MOUNT" | sudo tee -a "$LOG_FILE"
fi

# 挂载NFS共享
echo "开始挂载NFS共享..." | sudo tee -a "$LOG_FILE"
if ! sudo mount -t nfs "${NFS_SERVER}:${NFS_PATH}" "$LOCAL_MOUNT"; then
  echo "错误:挂载NFS失败!请检查网络或权限。退出脚本。" | sudo tee -a "$LOG_FILE"
  exit 1
fi
echo "NFS挂载成功:${NFS_SERVER}:${NFS_PATH} -> $LOCAL_MOUNT" | sudo tee -a "$LOG_FILE"

# 同步文件夹(添加和删除内容)
echo "开始同步文件夹:$SOURCE_DIR -> $TARGET_DIR" | sudo tee -a "$LOG_FILE"
#sudo rsync -av --dry-run --delete "$SOURCE_DIR/" "$TARGET_DIR/" | sudo tee -a "$LOG_FILE"
rsync -av --delete "$SOURCE_DIR/" "$TARGET_DIR/" | sudo tee -a "$LOG_FILE"
if [ $? -eq 0 ]; then
  echo "同步成功完成!" | sudo tee -a "$LOG_FILE"
else
  echo "警告:同步过程中出错。请检查日志。" | sudo tee -a "$LOG_FILE"
fi

# 卸载NFS共享
echo "卸载NFS共享..." | sudo tee -a "$LOG_FILE"
if sudo umount "$LOCAL_MOUNT"; then
  echo "NFS卸载成功。" | sudo tee -a "$LOG_FILE"
else
  echo "警告:卸载失败。请手动检查:umount $LOCAL_MOUNT" | sudo tee -a "$LOG_FILE"
fi

# echo "脚本执行结束。详细日志见:$LOG_FILE"