由于公司网盘搭建在内网服务器,为避免单点故障,需要定期将此文件夹备份到另一台服务器上面做冷备。

1、系统环境

系统

目录

kylinV10 SP3

/opt/docker/slw-iot/free-fs/data/upload

win server 2019

//SLWFILESERVER/OA_system_backup

2、在windows上面创建共享文件夹

  1. 在Windows服务器上创建一个专用文件夹,例如F:\OA_system_backup

  2. 右键该文件夹 -> 属性 -> 共享 -> 高级共享 -> 勾选“共享此文件夹”。

  3. 点击权限,为你的备份操作创建一个专用的Windows用户(例如backup_user),并赋予其完全控制权限。为了安全,建议移除非必要的用户权限(如Everyone)。

  4. 记下Windows服务器的IP地址和共享名,例如//SLWFILESERVER/OA_system_backup。

3、在Linux上挂载Windows共享文件夹

  1. 安装CIFS客户端工具(用于挂载SMB共享):

    • Debian/Ubuntu: sudo apt update && sudo apt install cifs-utils

    • CentOS/RHEL: sudo yum install cifs-utils

  2. 创建一个挂载点目录:sudo mkdir /mnt/OA_system_backup

  3. 执行挂载命令,将Windows共享文件夹挂载到本地:

    bash

    sudo mount -t cifs -o username=backup_user,password=你的密码,uid=$(id -u),gid=$(id -g),file_mode=0777,dir_mode=0777 //SLWFILESERVER/OA_system_backup /mnt/OA_system_backup

    参数说明uidgid使用$(id -u)$(id -g)可以让挂载的文件夹归属于当前Linux用户,避免权限问题。如果担心密码暴露,可以将密码保存在一个只有root可读的文件中,用credentials=/path/to/cred.file替代password=

4、使用rsync执行增量备份

挂载成功后,/mnt/windows_backup在Linux看来就如同一个本地文件夹。此时,使用rsync即可轻松完成增量备份:

bash

rsync -avzu --progress /opt/docker/slw-iot/free-fs/data/upload /mnt/OA_system_backup
  • -a:归档模式,保持文件属性,并递归同步子目录,是增量备份的基础。

  • -v:显示详细过程。

  • -z:传输时压缩,节省带宽。

  • -u等同于 --update,只更新更新的文件,不删除任何已有文件。

  • --progress:显示传输进度。

第一次运行会进行全量拷贝,之后再次运行就只会同步发生变化的文件了。

5、编写自动化脚本,每天定时增量备份

  1. 创建自动化脚本 backup_to_windows.sh

    bash

    #!/bin/bash
    # 确保挂载点存在,如果没挂载则尝试挂载(可选)
    if ! mountpoint -q /mnt/OA_system_backup; then
        mount -t cifs -o username=backup_user,password=DeltaVE1,uid=$(id -u),gid=$(id -g),file_mode=0777,dir_mode=0777 //SLWFILESERVER/OA_system_backup /mnt/OA_system_backup
    fi
    # 执行rsync备份
    rsync -avuz /opt/docker/slw-iot/free-fs/data/upload /mnt/OA_system_backup
  2. 给脚本添加执行权限:chmod +x backup_to_windows.sh

  3. 使用crontab -e添加定时任务,例如每天凌晨3点执行:

    bash

    0 3 * * * /path/to/backup_to_windows.sh

6、(可选)开机自动挂载

配置开机自动挂载 Windows 共享文件夹,最规范的做法是修改 Linux 系统的 /etc/fstab 文件。

为了避免在配置文件中明文暴露你的 Windows 账号和密码,同时防止开机时因网络未就绪导致挂载失败,建议按照以下安全且稳定的步骤进行配置:

第一步:创建安全的凭据文件(Credentials)

将你的 Windows 账号密码保存在一个独立的文件中,并限制只有 root 用户可读:

# 创建并编辑凭据文件
sudo nano /etc/smb-credentials

# 在文件中输入以下内容(替换为你的实际信息):
username=你的Windows用户名
password=你的Windows密码
domain=WORKGROUP  # 如果不在域内,可以填 WORKGROUP 或留空

# 保存退出后,修改文件权限(极其重要)
sudo chmod 600 /etc/smb-credentials

第二步:配置 /etc/fstab 实现开机自动挂载

在修改前,建议先备份配置文件以防写错导致系统无法启动:

sudo cp /etc/fstab /etc/fstab.bak

然后打开 fstab 文件进行编辑:

sudo nano /etc/fstab

在文件末尾添加以下一行(请替换为你的实际 IP、共享名和挂载点):

//192.168.1.100/LinuxBackup /mnt/win_backup cifs credentials=/etc/smb-credentials,iocharset=utf8,vers=3.0,_netdev,nofail 0 0

关键参数解析:

  • credentials=/etc/smb-credentials:指定刚才创建的密码文件路径。

  • iocharset=utf8:解决中文文件名可能出现的乱码问题。

  • vers=3.0:指定使用 SMB 3.0 协议,兼容性和安全性更好。

  • _netdev(核心参数) 告诉系统这是一个网络设备,必须等待网络完全就绪后再执行挂载,避免开机时因网络未通而挂载失败。

  • nofail(核心参数) 即使挂载失败(例如 Windows 关机了或网络断开),也不会阻止 Linux 系统正常启动。

第三步:测试配置是否正确

千万不要直接重启测试! 如果 fstab 配置有误,可能会导致系统无法开机。请在当前终端执行以下命令:

sudo mount -a
  • 如果没有任何报错信息,说明配置完全正确,下次开机就会自动挂载了。

  • 如果报错,请根据提示检查 IP、共享名、密码文件路径或网络连通性。

💡 补充提示

如果你之前已经手动执行过 mount 命令挂载了该目录,在执行 mount -a 前,请先手动卸载:

sudo umount /mnt/win_backup

然后再执行 sudo mount -a 进行验证。