Appearance
数据备份同步及共享
WSB(windows server backup)
windows server系统自带的备份和还原工具
多设备之间文件同步
Windows:192.168.0.15centos:192.168.0.20
将Windows中E:\AAvscode\AAown目录备份到linux的/dnc20/www/目录下
法1:使用rsync+SMB/CIFS共享
1、在Windows中设置共享目录
在Windows将E:\AAvscode\AAown目录设置共享
2、挂载共享目录
安装cifs-utils(如果未安装),并挂载Windows共享目录到本地路径,例如/mnt/windows
bash
sudo yum install -y cifs-utils
sudo mount -t cifs -o username=<你的共享用户名>,password=<你的共享密码> //192.168.0.15/<共享名> /mnt/windows
sudo vim /etc/smb-user
username=USERNAME
password=PASSWORD
sudo chmod 600 /etc/smb-user
sudo vim /etc/fstab //在文件末尾添加以下内容
//192.168.0.15/<共享名> /mnt/windows cifs credentials=/etc/smb-user,uid=1000,gid=1000,iocharset=utf8,vers=3.0 0 0
sudo mount -a //如果没有报错,说明挂载配置正确,系统重启后会自动挂载。<共享名> 是Windows上配置的共享名称。iocharset=utf8用于支持中文等特殊字符。
不指定uid和gid时,挂载的共享目录默认归属于root用户,普通用户可能无法访问或修改其中的内容。vers=3.0表示使用SMBv3协议(适用于较新的Windows系统),不确定可以不写。
3、使用rsync实现同步
使用rsync将/mnt/windows中的内容实时同步到/dnc20/www/
bash
sudo yum install -y rsync
rsync -avz --delete /mnt/windows/ /dnc20/www/4、设置定时任务实现实时备份
使用 inotify-tools(监听文件变化并实时同步)或 cron(定时同步)。
bash
sudo yum install -y inotify-tools
sudo vim /usr/local/bin/real_time_sync.sh
#!/bin/bash
# 定义源目录和目标目录
SRC_DIR="/mnt/windows" # Windows 挂载目录
DEST_DIR="/dnc20/www/" # 同步到的目标目录
LOCK_FILE="/tmp/rsync.lock" # 临时文件锁
LOG_FILE="/var/log/real_time_sync.log" # 日志文件
# 检查是否已有其他脚本实例在运行
if [ -f "$LOCK_FILE" ]; then
echo "$(date): Another instance is running. Exiting." >> "$LOG_FILE"
exit 1
fi
# 创建锁文件,防止并发运行
touch "$LOCK_FILE"
# 捕获退出信号,清理锁文件
trap "rm -f $LOCK_FILE; exit" INT TERM EXIT
# 检测是否有最近 1 分钟修改过的文件
if find "$SRC_DIR" -type f -mmin -1 | grep -q .; then
echo "$(date): Files are being modified. Skipping sync." >> "$LOG_FILE"
else
# 如果没有最近修改的文件,执行 rsync 同步
echo "$(date): Starting rsync." >> "$LOG_FILE"
rsync -avz --delete --temp-dir=/tmp "$SRC_DIR/" "$DEST_DIR/" >> "$LOG_FILE" 2>&1
echo "$(date): Sync completed." >> "$LOG_FILE"
fi
# 删除锁文件
rm -f "$LOCK_FILE"脚本功能说明
bash
find "$SRC_DIR" -type f -mmin -1-type f:只查找普通文件(忽略目录)。-mmin -1:查找最近 1 分钟内被修改的文件。
如果有任何文件满足条件,则跳过同步任务,并记录日志。
bash
if find "$SRC_DIR" -type f -mmin -1 | grep -q .; then
echo "$(date): Files are being modified. Skipping sync." >> "$LOG_FILE"
else
rsync ...
figrep -q .:检测find是否输出内容,表示是否有最近修改的文件。
如果有内容,记录日志并退出同步流程。
如果没有文件在最近1分钟内被修改,执行rsync同步
bash
rsync -avz --delete --temp-dir=/tmp "$SRC_DIR/" "$DEST_DIR/"--temp-dir=/tmp:使用临时目录存放传输中的文件,传输完成后才覆盖目标文件,避免生成不完整的文件。
5、手动运行脚本进行测试
bash
sudo chmod +x /usr/local/bin/real_time_sync.sh
/usr/local/bin/real_time_sync.sh6、设置为后台运行
可以使用nohup或screen将脚本放入后台
bash
nohup /usr/local/bin/real_time_sync.sh > /var/log/real_time_sync.log 2>&1 &2>&1:将标准错误输出(stderr)重定向到标准输出(stdout)。
也就是说,任何错误信息都会一起写入/var/log/real_time_sync.log
&:将命令放入后台运行。
如果不加&,命令会在前台运行,你需要等到命令完成后才能继续操作。
7、使用systemd管理服务systemd是现代Linux系统推荐的服务管理工具,配置后更灵活且易于调试。
bash
sudo vim /etc/systemd/system/real_time_sync.service
[Unit]
Description=Real-Time Sync Service
After=network.target
[Service]
ExecStart=/usr/local/bin/real_time_sync.sh
Restart=always
StandardOutput=file:/var/log/real_time_sync.log
StandardError=file:/var/log/real_time_sync.log
[Install]
WantedBy=multi-user.targetExecStart: 指定运行的脚本路径。Restart=always: 如果脚本异常退出,自动重启。StandardOutput/StandardError: 日志输出路径。
bash
sudo systemctl daemon-reload
sudo systemctl enable real_time_sync.service
sudo systemctl start real_time_sync.service
sudo systemctl status real_time_sync.service法2:使用同步工具(如Syncthing)
1、安装Syncthing
在Windows和CentOS上都安装Syncthing,到syncthing官网下载安装,并进行配置。
2、在Syncthing Web界面中,添加Windows和CentOS设备。
设置文件夹同步关系,将Windows的E:\AAvscode\AAown同步到CentOS的/dnc20/www/。
