备份脚本 #

一、基本备份 #

bash
#!/bin/bash

backup_file() {
    local source="$1"
    local backup_dir="${2:-/backup}"
    local date=$(date +%Y%m%d)
    local filename=$(basename "$source")
    
    cp "$source" "${backup_dir}/${filename}.${date}.bak"
}

二、目录备份 #

bash
#!/bin/bash

backup_directory() {
    local source="$1"
    local backup_dir="${2:-/backup}"
    local date=$(date +%Y%m%d_%H%M%S)
    local dirname=$(basename "$source")
    
    tar -czf "${backup_dir}/${dirname}_${date}.tar.gz" -C "$(dirname "$source")" "$dirname"
}

三、增量备份 #

bash
#!/bin/bash

incremental_backup() {
    local source="$1"
    local backup_dir="$2"
    local date=$(date +%Y%m%d)
    local logfile="${backup_dir}/backup.log"
    
    rsync -av --delete \
        --log-file="$logfile" \
        "$source/" "${backup_dir}/current/"
    
    # 创建硬链接快照
    cp -al "${backup_dir}/current" "${backup_dir}/${date}"
}

四、完整备份脚本 #

bash
#!/bin/bash

set -e

BACKUP_DIR="/backup"
SOURCE_DIR="/data"
RETENTION_DAYS=7

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}

backup() {
    local date=$(date +%Y%m%d_%H%M%S)
    local backup_file="${BACKUP_DIR}/backup_${date}.tar.gz"
    
    log "开始备份: $SOURCE_DIR"
    
    tar -czf "$backup_file" "$SOURCE_DIR"
    
    log "备份完成: $backup_file"
    
    # 清理旧备份
    find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete
    
    log "清理完成"
}

backup

下一步 #

你已经掌握了备份脚本,接下来让我们学习 自动化部署

最后更新:2026-03-27