s-blog

CentOS 磁盘镜像备份并 SFTP 上传脚本

ssssmy · 2026-06-05 · 2 min · CentOS

用 Bash 脚本定时(每周一 23 点)用 dd 制作磁盘镜像并压缩,再通过 SFTP 上传到指定服务器。

⚠️ 磁盘镜像操作有风险,运行前务必备份重要数据。

备份压缩并上传

#!/bin/bash
backup_directory="/path/to/backup"

# SFTP 目标服务器信息(按需替换)
sftp_host="<目标服务器IP>"
sftp_port="<端口>"
sftp_user="<用户>"
sftp_password="<密码>"

# 仅在周一 23:00 执行
if [ "$(date +%u)" -eq 1 ] && [ "$(date +%H:%M)" == "23:00" ]; then
    current_datetime=$(date +"%Y%m%d%H%M%S")
    backup_dir="${backup_directory}/backup_${current_datetime}"
    mkdir -p "$backup_dir"

    # dd 制作磁盘镜像
    sudo dd if=/dev/sda of="${backup_dir}/sda_backup.img" bs=4M
    # 压缩为 tar.gz
    tar -czf "${backup_dir}/sda_backup.tar.gz" -C "$backup_dir" "sda_backup.img"

    # sftp 上传
    sftp -P "$sftp_port" "$sftp_user@$sftp_host" <<EOF
    cd /remote/backup/directory
    put "${backup_dir}/sda_backup.tar.gz"
    bye
EOF

    rm -rf "$backup_dir"
    echo "备份并上传完成于 $(date +'%Y-%m-%d %H:%M:%S')."
fi

加入 crontab 定时执行:

crontab -e
# 每周一 23:00 执行
0 23 * * 1 /path/to/backup_script.sh

边备份边上传(dd 管道 + ssh)

# dd 输出通过管道传给 ssh,直接写入远程文件(需先配置 SSH 密钥认证)
sudo dd if=/dev/sda bs=4M | ssh -p "<端口>" "<用户>@<目标服务器IP>" "cat > /remote/backup/directory/sda_backup.img"

边备份边上传需谨慎,网络中断可能导致失败。

原文链接:https://www.ssssmy.com/notes/centos-ci-pan-jing-xiang-bei-fen-bing-sftp-shang-chuan-jiao-ben