如何实现Linux机器目录向Windows电脑的自动定时备份?
可行备份方案建议
一、解决Linux到Windows无密码传输的核心问题
因为禁止使用频繁变更的密码,推荐两种无密码传输方案:
1. SSH密钥认证(优先推荐,适配Windows 10/11)
- 在Windows上开启OpenSSH服务器:进入「设置→应用→可选功能→添加功能」,找到并安装OpenSSH服务器,启动服务后设置为自动运行。
- 在Linux生成无密码密钥对:执行
ssh-keygen -t ed25519,全程回车跳过密码设置。 - 将Linux的公钥(路径
~/.ssh/id_ed25519.pub)内容复制到Windows的C:\Users\<你的用户名>\.ssh\authorized_keys文件中,注意Windows端需确保该文件仅当前用户拥有读写权限。
2. SMB共享无密码访问
- 在Windows创建共享目录,开启匿名访问权限(需评估环境安全性)。
- Linux端安装依赖工具:Debian/Ubuntu执行
sudo apt install cifs-utils,RHEL/CentOS执行sudo yum install cifs-utils。 - 创建本地挂载点:
mkdir /mnt/win_backup,挂载共享目录:mount -t cifs //<Windows_IP>/<共享目录名> /mnt/win_backup -o guest,vers=3.0。
二、优化后的备份脚本
针对你的需求修改脚本,解决原脚本的本地备份局限、参数混乱等问题,支持直接备份到Windows:
#!/bin/bash set -euo pipefail # 开启严格模式,命令出错或变量未定义时立即退出 TIMESTAMP=$(date +"%Y%m%d%H%M%S") SOURCE_PATH="/LOG" # 二选一配置目标路径: # SSH方式格式:Windows用户名@WindowsIP:远程备份目录 DESTINATION="win_user@192.168.1.100:/backups" # SMB挂载方式:本地挂载点路径 # DESTINATION="/mnt/win_backup" # 压缩并传输备份的核心函数 backup_process() { # 创建临时目录存储压缩包,避免本地残留冗余文件 TMP_DIR=$(mktemp -d) COMPRESSED_FILE="${TMP_DIR}/${TIMESTAMP}_log_backup.tar.gz" echo "开始压缩目录 ${SOURCE_PATH}" # 切换到源目录父级,避免压缩包包含全路径 tar -czf "${COMPRESSED_FILE}" -C "${SOURCE_PATH}/.." "$(basename ${SOURCE_PATH})" echo "开始传输备份文件到Windows" if [[ "${DESTINATION}" == *":"* ]]; then # SSH方式用rsync传输,支持增量优化 rsync -avz "${COMPRESSED_FILE}" "${DESTINATION}/" else # SMB挂载方式直接复制文件 cp "${COMPRESSED_FILE}" "${DESTINATION}/" fi # 清理临时文件 rm -rf "${TMP_DIR}" echo "备份完成,生成文件:${TIMESTAMP}_log_backup.tar.gz" } # 执行备份流程 echo "---------------备份脚本启动---------------" date backup_process echo "---------------备份脚本结束---------------"
脚本关键优化点:
- 启用严格模式
set -euo pipefail,避免静默错误导致无效备份 - 用临时目录存储压缩包,自动清理无残留
- 压缩时剔除冗余路径,让Windows端的备份文件结构更清晰
- 兼容两种无密码传输方式,按需切换配置
三、实现每日00:00:01定时执行
利用Linux的cron任务实现定时触发:
- 编辑crontab任务:执行
crontab -e - 添加以下配置行:
1 0 * * * /path/to/your/backup_script.sh >> /var/log/backup_log.log 2>&1
- 说明:
1 0 * * *代表每日00:01执行(cron最小单位为分钟,若需精确到00:00:01,可在脚本开头添加sleep 1) - 日志输出到
/var/log/backup_log.log,方便后续排查问题
四、额外优化建议
- 日志轮转:用
logrotate工具管理备份日志,避免日志文件无限膨胀 - 备份校验:传输完成后可在Windows端校验压缩包MD5值,确保备份完整性
- 旧备份清理:在脚本中添加逻辑,自动删除Windows端超过7天的旧备份,节省存储空间
- 错误告警:若备份失败,可通过
mail命令发送告警邮件到指定邮箱
内容的提问来源于stack exchange,提问作者Akram Hossain Rahat
相关产品推荐
相关产品推荐

