You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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任务实现定时触发:

  1. 编辑crontab任务:执行crontab -e
  2. 添加以下配置行:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:05:24