由于公司网盘搭建在内网服务器,为避免单点故障,需要定期将此文件夹备份到另一台服务器上面做冷备。
1、系统环境
2、在windows上面创建共享文件夹
在Windows服务器上创建一个专用文件夹,例如
F:\OA_system_backup。右键该文件夹 -> 属性 -> 共享 -> 高级共享 -> 勾选“共享此文件夹”。
点击权限,为你的备份操作创建一个专用的Windows用户(例如
backup_user),并赋予其完全控制权限。为了安全,建议移除非必要的用户权限(如Everyone)。记下Windows服务器的IP地址和共享名,例如//SLWFILESERVER/OA_system_backup。
3、在Linux上挂载Windows共享文件夹
安装CIFS客户端工具(用于挂载SMB共享):
Debian/Ubuntu:
sudo apt update && sudo apt install cifs-utilsCentOS/RHEL:
sudo yum install cifs-utils
创建一个挂载点目录:
sudo mkdir /mnt/OA_system_backup执行挂载命令,将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参数说明:
uid和gid使用$(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、编写自动化脚本,每天定时增量备份
创建自动化脚本
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给脚本添加执行权限:
chmod +x backup_to_windows.sh使用
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 进行验证。