1. 首页 > Linux教程 > 正文

Linux教程FG158-存储备份与恢复

内容大纲

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

1. 备份概述

备份是保护数据安全的重要措施。根据备份策略的不同,可以分为完全备份、增量备份和差异备份。选择合适的备份工具和策略对于数据恢复至关重要。

学习交流加群风哥QQ113257174

# 备份类型
# 完全备份:备份所有数据
# 增量备份:只备份自上次备份以来修改的数据
# 差异备份:备份自上次完全备份以来修改的数据

# 备份工具
# tar:归档工具,适合文件级备份
# rsync:同步工具,适合增量备份
# dd:块级复制工具,适合磁盘级备份

2. 使用tar备份

风哥提示:

使用tar命令创建和恢复备份。

# 使用tar备份

# 1. 创建完全备份
[root@localhost ~]# tar -czvf /backup/full-backup-$(date +%Y%m%d).tar.gz /data
tar: Removing leading `/’ from member names
/data/
/data/file1.txt
/data/file2.txt
/data/file3.txt
/data/dir1/
/data/dir1/file4.txt
/data/dir1/file5.txt

# 2. 查看备份内容
[root@localhost ~]# tar -tzvf /backup/full-backup-20260403.tar.gz | head -10
drwxr-xr-x root/root 0 2026-04-03 10:00 /data/
-rw-r–r– root/root 0 2026-04-03 10:00 /data/file1.txt
-rw-r–r– root/root 0 2026-04-03 10:00 /data/file2.txt
-rw-r–r– root/root 0 2026-04-03 10:00 /data/file3.txt
drwxr-xr-x root/root 0 2026-04-03 10:00 /data/dir1/
-rw-r–r– root/root 0 2026-04-03 10:00 /data/dir1/file4.txt
-rw-r–r– root/root 0 2026-04-03 10:00 /data/dir1/file5.txt

# 3. 恢复备份
[root@localhost ~]# tar -xzvf /backup/full-backup-20260403.tar.gz -C /restore
/data/
/data/file1.txt
/data/file2.txt
/data/file3.txt
/data/dir1/
/data/dir1/file4.txt
/data/dir1/file5.txt

# 4. 创建增量备份
[root@localhost ~]# tar -czvf /backup/incremental-backup-$(date +%Y%m%d).tar.gz -g /backup/backup.snar /data
tar: Removing leading `/’ from member names
/data/
/data/file6.txt

# 5. 查看备份文件大小
[root@localhost ~]# ls -lh /backup/
total 200M
-rw-r–r– 1 root root 100M Apr 3 10:00 full-backup-20260403.tar.gz
-rw-r–r– 1 root root 50M Apr 3 10:10 incremental-backup-20260403.tar.gz
-rw-r–r– 1 root root 50M Apr 3 10:20 incremental-backup-20260403-2.tar.gz

# 6. 恢复增量备份
[root@localhost ~]# tar -xzvf /backup/full-backup-20260403.tar.gz -C /restore
[root@localhost ~]# tar -xzvf /backup/incremental-backup-20260403.tar.gz -g /backup/backup.snar -C /restore
tar: Removing leading `/’ from member names
/data/
/data/file6.txt

3. 使用rsync备份

使用rsync命令进行增量备份和同步。

# 使用rsync备份

# 1. 创建rsync备份
[root@localhost ~]# rsync -avz /data/ /backup/data-backup/
sending incremental file list
./
file1.txt
file2.txt
file3.txt
dir1/
dir1/file4.txt
dir1/file5.txt

sent 1,234 bytes received 87 bytes 2,642.00 bytes/sec
total size is 1,234 speedup is 0.97

# 2. 查看备份内容
[root@localhost ~]# ls -la /backup/data-backup/
total 8
drwxr-xr-x 3 root root 4096 Apr 3 10:00 .
drwxr-xr-x 3 root root 4096 Apr 3 10:00 ..
drwxr-xr-x 2 root root 4096 Apr 3 10:00 dir1
-rw-r–r– 1 root root 0 Apr 3 10:00 file1.txt
-rw-r–r– 1 root root 0 Apr 3 10:00 file2.txt
-rw-r–r– 1 root root 0 Apr 3 10:00 file3.txt

# 3. 增量同步
[root@localhost ~]# echo “new content” > /data/file6.txt
[root@localhost ~]# rsync -avz –delete /data/ /backup/data-backup/
sending incremental file list
deleting file5.txt
./
file6.txt

sent 234 bytes received 48 bytes 564.00 bytes/sec
total size is 1,234 speedup is 4.42

# 4. 使用rsync进行远程备份
[root@localhost ~]# rsync -avz -e ssh /data/ user@backup-server:/backup/data-backup/
sending incremental file list
./
file1.txt
file2.txt
file3.txt
file6.txt
dir1/
dir1/file4.txt

sent 1,234 bytes received 87 bytes 2,642.00 bytes/sec
total size is 1,234 speedup is 0.97

# 5. 查看rsync传输统计
[root@localhost ~]# rsync -avz –stats /data/ /backup/data-backup/
sending incremental file list
Number of files: 6
Number of files transferred: 1
Total file size: 1,234 bytes
Total transferred file size: 12 bytes
Literal data: 12 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 1,234
Total bytes received: 48

sent 1,234 bytes received 48 bytes 2,564.00 bytes/sec
total size is 1,234 speedup is 0.97

# 6. 使用rsync进行镜像备份
[root@localhost ~]# rsync -avz –delete –backup –backup-dir=/backup/deleted-$(date +%Y%m%d) /data/ /backup/data-backup/
sending incremental file list
deleting file5.txt
./
file6.txt

sent 234 bytes received 48 bytes 564.00 bytes/sec
total size is 1,234 speedup is 4.42

4. 使用dd备份

使用dd命令进行磁盘级备份。

# 使用dd备份

# 1. 备份整个磁盘
[root@localhost ~]# dd if=/dev/sda of=/backup/sda-backup.img bs=4M status=progress
5242880000 bytes (5.2 GB, 4.8 GiB) copied, 120 s, 43.7 MB/s
1305+1 records in
1305+1 records out
5476083200 bytes (5.5 GB) transferred in 120.001 s, 45.6 MB/s

# 2. 查看备份文件大小
[root@localhost ~]# ls -lh /backup/sda-backup.img
-rw-r–r– 1 root root 5.1G Apr 3 10:00 /backup/sda-backup.img

# 3. 压缩备份文件
[root@localhost ~]# gzip /backup/sda-backup.img
[root@localhost ~]# ls -lh /backup/sda-backup.img.gz
-rw-r–r– 1 root root 2.5G Apr 3 10:05 /backup/sda-backup.img.gz

# 4. 备份分区
[root@localhost ~]# dd if=/dev/sda1 of=/backup/sda1-backup.img bs=4M status=progress
1048576000 bytes (1.0 GB, 1000 MiB) copied, 30 s, 34.9 MB/s
250+1 records in
250+1 records out
1048576000 bytes (1.0 GB) transferred in 30.001 s, 34.9 MB/s

# 5. 恢复磁盘备份
[root@localhost ~]# dd if=/backup/sda-backup.img of=/dev/sdb bs=4M status=progress
5476083200 bytes (5.5 GB, 5.1 GiB) copied, 120 s, 45.6 MB/s
1305+1 records in
1305+1 records out
5476083200 bytes (5.5 GB) transferred in 120.001 s, 45.6 MB/s

# 6. 验证备份完整性
[root@localhost ~]# md5sum /backup/sda-backup.img
abc123def456789012345678901234ab /backup/sda-backup.img

5. 自动化备份

配置自动化备份脚本和定时任务。

学习交流加群风哥微信: itpux-com

# 自动化备份

# 1. 创建备份脚本
[root@localhost ~]# cat > /usr/local/bin/backup.sh << 'EOF' #!/bin/bash # script.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn # 备份脚本 BACKUP_DIR="/backup" DATA_DIR="/data" LOG_FILE="/var/log/backup.log" # 记录日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}

# 创建备份目录
mkdir -p $BACKUP_DIR

# 完全备份
full_backup() {
log “Starting full backup…”
tar -czvf $BACKUP_DIR/full-backup-$(date +%Y%m%d).tar.gz $DATA_DIR >> $LOG_FILE 2>&1
log “Full backup completed.”
}

# 增量备份
incremental_backup() {
log “Starting incremental backup…”
tar -czvf $BACKUP_DIR/incremental-backup-$(date +%Y%m%d).tar.gz -g $BACKUP_DIR/backup.snar $DATA_DIR >> $LOG_FILE 2>&1
log “Incremental backup completed.”
}

# 清理旧备份
cleanup_old_backups() {
log “Cleaning up old backups…”
find $BACKUP_DIR -name “*.tar.gz” -mtime +7 -delete
log “Old backups cleaned up.”
}

# 主函数
main() {
case “$1” in
full)
full_backup
;;
incremental)
incremental_backup
;;
cleanup)
cleanup_old_backups
;;
*)
echo “Usage: $0 {full|incremental|cleanup}”
exit 1
;;
esac
}

# 执行主函数
main “$@”
EOF

# 2. 设置脚本执行权限
[root@localhost ~]# chmod +x /usr/local/bin/backup.sh

# 3. 创建日志文件
[root@localhost ~]# touch /var/log/backup.log
[root@localhost ~]# chmod 644 /var/log/backup.log

# 4. 配置定时任务
[root@localhost ~]# cat > /etc/cron.d/backup << 'EOF' # 备份定时任务 0 2 * * 0 root /usr/local/bin/backup.sh full 0 2 * * 1-6 root /usr/local/bin/backup.sh incremental 0 3 * * * root /usr/local/bin/backup.sh cleanup EOF # 5. 重启cron服务 [root@localhost ~]# systemctl restart crond # 6. 测试备份脚本 [root@localhost ~]# /usr/local/bin/backup.sh full # 7. 查看日志 [root@localhost ~]# tail -f /var/log/backup.log [2026-04-03 10:00:00] Starting full backup... [2026-04-03 10:00:10] Full backup completed. # 8. 查看备份文件 [root@localhost ~]# ls -lh /backup/ total 100M -rw-r--r-- 1 root root 100M Apr 3 10:00 full-backup-20260403.tar.gz -rw-r--r-- 1 root root 50 Apr 3 10:00 backup.snar # 9. 配置日志轮转 [root@localhost ~]# cat > /etc/logrotate.d/backup << 'EOF' /var/log/backup.log { daily rotate 7 compress delaycompress missingok notifempty create 0644 root root } EOF # 10. 测试日志轮转 [root@localhost ~]# logrotate -f /etc/logrotate.d/backup 更多学习教程公众号风哥教程itpux_com

iv>

6. 实战案例

配置完整的备份和恢复系统。

# 实战案例:配置完整的备份和恢复系统

# 1. 创建综合备份脚本
[root@localhost ~]# cat > /usr/local/bin/comprehensive-backup.sh << 'EOF' #!/bin/bash # 综合备份脚本 BACKUP_DIR="/backup" DATA_DIRS="/data /home /etc" LOG_FILE="/var/log/comprehensive-backup.log" ALERT_EMAIL="admin@fgedu.net.cn" # 记录日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}

# 发送告警邮件
send_alert() {
echo “$1” | mail -s “Backup Alert” $ALERT_EMAIL
}

# 创建备份目录
mkdir -p $BACKUP_DIR

# 文件级备份
file_backup() {
log “Starting file backup…”

for dir in $DATA_DIRS; do
BACKUP_FILE=”$BACKUP_DIR/$(basename $dir)-backup-$(date +%Y%m%d).tar.gz”

if tar -czvf $BACKUP_FILE $dir >> $LOG_FILE 2>&1; then
log “File backup for $dir completed successfully.”
else
log “ERROR: File backup for $dir failed.”
send_alert “File backup for $dir failed.”
fi
done
}

# 数据库备份
database_backup() {
log “Starting database backup…”

if command -v mysqldump &> /dev/null; then
DB_BACKUP_FILE=”$BACKUP_DIR/mysql-backup-$(date +%Y%m%d).sql.gz”

if mysqldump –all-databases | gzip > $DB_BACKUP_FILE; then
log “Database backup completed successfully.”
else
log “ERROR: Database backup failed.”
send_alert “Database backup failed.”
fi
fi
}

# 磁盘级备份
disk_backup() {
log “Starting disk backup…”

DISK_BACKUP_FILE=”$BACKUP_DIR/disk-backup-$(date +%Y%m%d).img.gz”

if dd if=/dev/sda bs=4M | gzip > $DISK_BACKUP_FILE 2>> $LOG_FILE; then
log “Disk backup completed successfully.”
else
log “ERROR: Disk backup failed.”
send_alert “Disk backup failed.”
fi
}

# 远程备份
remote_backup() {
log “Starting remote backup…”

if rsync -avz –delete $BACKUP_DIR/ user@backup-server:/remote-backup/ >> $LOG_FILE 2>&1; then
log “Remote backup completed successfully.”
else
log “ERROR: Remote backup failed.”
send_alert “Remote backup failed.”
fi
}

# 清理旧备份
cleanup_old_backups() {
log “Cleaning up old backups…”
find $BACKUP_DIR -name “*.tar.gz” -mtime +7 -delete
find $BACKUP_DIR -name “*.sql.gz” -mtime +7 -delete
find $BACKUP_DIR -name “*.img.gz” -mtime +7 -delete
log “Old backups cleaned up.”
}

# 主函数
main() {
log “Starting comprehensive backup…”
file_backup
database_backup
disk_backup
remote_backup
cleanup_old_backups
log “Comprehensive backup completed.”
}

# 执行主函数
main
EOF

# 2. 设置脚本执行权限
[root@localhost ~]# chmod +x /usr/local/bin/comprehensive-backup.sh

# 3. 创建日志文件
[root@localhost ~]# touch /var/log/comprehensive-backup.log
[root@localhost ~]# chmod 644 /var/log/comprehensive-backup.log

# 4. 配置定时任务
[root@localhost ~]# echo “0 2 * * * root /usr/local/bin/comprehensive-backup.sh” > /etc/cron.d/comprehensive-backup

# 5. 重启cron服务
[root@localhost ~]# systemctl restart crond

# 6. 测试备份脚本
[root@localhost ~]# /usr/local/bin/comprehensive-backup.sh

# 7. 查看日志
[root@localhost ~]# tail -f /var/log/comprehensive-backup.log
[2026-04-03 10:00:00] Starting comprehensive backup…
[2026-04-03 10:00:05] Starting file backup…
[2026-04-03 10:00:10] File backup for /data completed successfully.
[2026-04-03 10:00:15] File backup for /home completed successfully.
[2026-04-03 10:00:20] File backup for /etc completed successfully.
[2026-04-03 10:00:25] Starting database backup…
[2026-04-03 10:00:30] Database backup completed successfully.
[2026-04-03 10:00:35] Starting disk backup…
[2026-04-03 10:05:00] Disk backup completed successfully.
[2026-04-03 10:05:05] Starting remote backup…
[2026-04-03 10:05:10] Remote backup completed successfully.
[2026-04-03 10:05:15] Cleaning up old backups…
[2026-04-03 10:05:20] Old backups cleaned up.
[2026-04-03 10:05:25] Comprehensive backup completed.

# 8. 查看备份文件
[root@localhost ~]# ls -lh /backup/
total 3.0G
-rw-r–r– 1 root root 100M Apr 3 10:00 data-backup-20260403.tar.gz
-rw-r–r– 1 root root 50M Apr 3 10:00 home-backup-20260403.tar.gz
-rw-r–r– 1 root root 10M Apr 3 10:00 etc-backup-20260403.tar.gz
-rw-r–r– 1 root root 500M Apr 3 10:00 mysql-backup-20260403.sql.gz
-rw-r–r– 1 root root 2.5G Apr 3 10:05 disk-backup-20260403.img.gz

# 9. 测试恢复
[root@localhost ~]# mkdir -p /restore/data
[root@localhost ~]# tar -xzvf /backup/data-backup-20260403.tar.gz -C /restore/data
data/
data/file1.txt
data/file2.txt
data/file3.txt

# 10. 验证恢复数据
[root@localhost ~]# ls -la /restore/data/data/
total 0
drwxr-xr-x 2 root root 4096 Apr 3 10:00 .
drwxr-xr-x 3 root root 4096 Apr 3 10:00 ..
-rw-r–r– 1 root root 0 Apr 3 10:00 file1.txt
-rw-r–r– 1 root root 0 Apr 3 10:00 file2.txt
-rw-r–r– 1 root root 0 Apr 3 10:00 file3.txt

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息