Ubuntu FTP Server 数据备份实用方案
一 备份范围与准备
二 本地全量与增量备份脚本
#!/usr/bin/env bash
set -Eeuo pipefail
DATE=$(date +%F_%H%M%S)
BACKUP_DIR="/backup"
DATA_SRC="/home/ftpuser /var/ftp" # 按需调整
CONF_SRC="/etc/vsftpd.conf /etc/vsftpd.userlist"
LOG_SRC="/var/log/vsftpd.log* /var/log/proftpd/error.log*"
mkdir -p "$BACKUP_DIR"
# 打包数据、配置、日志
tar czf "$BACKUP_DIR/ftp_full_$DATE.tar.gz" \
--exclude="$BACKUP_DIR" \
$DATA_SRC $CONF_SRC $LOG_SRC
# 可选:保留最近 N 天
find "$BACKUP_DIR" -name "ftp_full_*.tar.gz" -mtime +7 -delete
sudo chmod +x /usr/local/bin/ftp_full_backup.sh
sudo /usr/local/bin/ftp_full_backup.sh
sudo rsync -aAX --info=progress2 /home/ftpuser /backup/ftp_current
sudo rsync -aAX --info=progress2 --delete \
/home/ftpuser /backup/ftp_current
# 归档一份时间戳快照
sudo tar czf "/backup/ftp_incr_$(date +%F_%H%M%S).tar.gz" -C /backup/ftp_current .
三 远程备份与自动化调度
sudo apt-get update && sudo apt-get install -y lftp
#!/usr/bin/env bash
HOST="ftp.example.com"
USER="backup"
PASS="YourPass"
LOCAL_DIR="/backup/ftp_current"
REMOTE_DIR="/remote/backup"
lftp -u "$USER,$PASS" "$HOST" <<'EOF'
set ftp:ssl-force true
set ftp:ssl-protect-data true
mirror -R --delete --verbose "$LOCAL_DIR" "$REMOTE_DIR"
bye
EOF
lftp -u "$USER,$PASS" "$HOST" <<'EOF'
set ftp:ssl-force true
set ftp:ssl-protect-data true
mirror --delete --verbose "$REMOTE_DIR" "$LOCAL_DIR"
bye
EOF
sudo crontab -e
# 0 2 * * * /usr/local/bin/ftp_full_backup.sh >>/var/log/ftp_backup.log 2>&1
# 0 */6 * * * /usr/bin/rsync -aAX --delete /home/ftpuser /backup/ftp_current >>/var/log/ftp_backup.log 2>&1
四 安全与加固要点
五 恢复与验证
sudo tar xzf /backup/ftp_full_2025-09-01_020000.tar.gz -C /
# 先清空或准备目标目录
sudo rm -rf /restore/ftp_current/*
sudo tar xzf /backup/ftp_incr_2025-09-02_020000.tar.gz -C /restore/ftp_current
# 如需覆盖回生产目录,先停服务再 rsync/覆盖
sudo cp /backup/vsftpd.conf.bak /etc/vsftpd.conf
sudo systemctl restart vsftpd