Linux 系统备份与恢复全攻略
1. 数据恢复操作
1.1 提取文件后的操作
在提取必要的文件后,需执行以下命令:
> quit
要对最后一次完整转储和每个增量转储依次执行此操作,直至可用的最后一个增量转储。这样能确保恢复自上次完整备份以来的所有更改。若要恢复的数据在两次转储之间未发生变化,那么在第二次增量转储中将找不到该数据。
1.2 跨网络非交互式恢复
若仅需恢复少数邮箱,手动方法是可行的。但如果要全面恢复所有邮箱,则需采用非交互式方案。此方案无需目标系统提供额外的存储空间,因为转储数据是通过网络进行传输的,具体操作步骤如下:
1. 在新安装并刚分区的硬盘上重新创建文件系统并挂载:
# mke2fs -j /dev/sdb1
# mount /dev/sdb1 /home
mke2fs
命令的
-j
选项会在
/dev/sdb1
上创建一个 ext3 日志文件系统,并将其挂载为
/home
。需注意,恢复数据时要使用与创建备份时相同的文件系统。
2. 开始恢复操作:
# cd /home
# ssh user@backup-host.domain.com \
dd if=/backupdirectory/20090601030034.home.dump.0.gz | \
gunzip -c | restore -r -f -
此操作与跨网络执行备份时类似。
ssh user@backup-host.domain.com
这一行会以
backup-host.domain.com
主机上的用户身份执行以下命令:
dd if=/backupdirectory/20090601030034.home.dump.0.gz
该命令使用
dd
的
if
选项读取压缩的转储文件,并将输出发送到标准输出。输出通过网络传输,然后输入到
gunzip
进行解压缩,最终输入到
restore -r -f -
。
-r
选项指示
restore
从转储文件的内容中重建整个文件系统,并将其恢复到原始位置,同时保留原始的权限和所有权。若需要详细输出,可在
restore
命令中使用
-v
选项。
在执行恢复命令之前,务必确保位于正确的目录中,否则可能会对现有文件系统造成严重损坏。恢复操作的输出示例如下:
# ssh backup@nas1 dd if=backups/20090727153909.home.dump.0.gz \
| gunzip -c | restore -r -f -
restore: ./lost+found: File exists
1629153+1 records in
1629153+1 records out
834126574 bytes (834 MB) copied, 71.4752 s, 11.7 MB/s
#
关于
lost+found
存在的警告是正常的,可以安全地忽略。对于每个需要将系统恢复到所需状态的增量转储文件,都应重复此操作。若以错误的顺序恢复增量转储,将会出现 “Incremental tape too low” 或 “Incremental tape too high” 的错误。一旦收到这些错误之一,就无法完成完整恢复,必须从 0 级转储重新开始恢复过程。
使用
restore
命令的
-r
选项时,会创建
restoresymtable
文件。这是一个检查点文件,在恢复多个转储时,
restore
命令会使用它来帮助确定哪些目录或文件需要更新、创建或删除。文件系统完全恢复并验证后,应删除
restoresymtable
文件。若该文件包含在下一次转储中,旧的
restoresymtable
文件可能会覆盖当时正在创建的文件,从而导致无法恢复额外的转储。最后,对新恢复的文件系统执行 0 级转储。
2. 配置和日志备份
2.1 备份方法
对于配置数据和重要日志文件的备份,有两种方法可供选择:
-
将数据存储在备份介质上
:使用此方法可直接将数据备份到备份服务器。
-
将数据添加到备份计划中
:这种方法会将必要的文件作为用户数据备份的一部分进行备份。
这两种方法都是可行的,具体选择取决于个人偏好。以下是系统中需要备份的重要部分及其示例命令:
| 系统重要部分 | 示例命令 |
| ---- | ---- |
| 系统清单 |
disk_layout.txt
|
| 已安装软件列表 |
installed_software.txt
|
| 系统配置文件 |
/etc
|
| 认证数据 |
/etc/password /etc/groups /etc/shadow
|
| 日志文件 |
/var/log
|
| 邮件队列 |
/var/spool/postfix
|
由于每个系统都有所不同,应确保上述示例命令涵盖了所有必要的文件。
2.2 传输配置和日志到备份介质
为简化操作,可使用
tar
工具创建上述文件和目录的存档,并将其存储在备份服务器上与完整或增量转储相同的目录中:
# tar cz disk_layout.txt installed_software.txt \
/etc /var/log /var/spool/postfix | \
ssh user@backup-host.domain.com \
dd of=/backupdirectory/$(date +%Y%m%d%H%M%S).config.tar.gz
或者,也可以在
/home
文件系统上创建
tar
存档,并将其作为正常备份计划的一部分进行备份:
# mkdir -p /home/config
# chmod 600 /home/config
# tar czf /home/config/$(date +%Y%m%d%H%M%S).config.tar.gz \
disk_layout.txt installed_software.txt \
/etc /var/log /var/spool/postfix
在这两种情况下,
tar
命令都使用了
c
选项来创建存档,
z
选项进行压缩,
f
选项指定输出存档的名称。同时,对
/home/config
目录的访问进行了限制,因为其中包含需要保护的敏感信息存档。若需要更多关于
tar
的信息,请参考系统手册页。
2.3 恢复配置
根据之前使用的备份方法,恢复配置和日志文件相对简单。可以从备份服务器复制所需的存档,或者直接使用
/home/config
中的存档。在这两种情况下,都可使用以下命令解压缩存档:
# mkdir tmpdir
# cd tmpdir
# tar xzf xxxxx.config.tar.gz
需注意,在解压缩存档之前,要先创建并进入一个临时目录。若当前目录为
/
时执行
tar
命令,可能会覆盖
/etc
、
/var/log
和
/var/spool/postfix
中的所有文件,从而产生不良后果。解压缩存档后,就可以比较并复制需要恢复的文件。
3. 自动化备份
3.1 增量转储策略
为避免定期手动调用
dump
命令的繁琐,需要实施自动化备份程序。
dump
的手册页提供了关于备份频率和级别选择的指导,以减少恢复时间。在发生灾难性磁盘事件时,通过交错进行增量转储,可以将恢复所有必要备份磁带或文件到磁盘所需的时间降至最低。以下是一种有效的交错增量转储方法,可减少磁带使用数量:
1. 始终从 0 级备份开始。应按设定的间隔(如每月或每两个月)进行一次 0 级备份,并使用一组新的磁带进行保存。
2. 在 0 级备份之后,使用修改后的汉诺塔算法,每天对活动文件系统进行转储,转储级别序列如下:
3 2 5 4 7 6 9 8 9 9 ...
3. 对于每日转储,每天可使用固定数量的磁带,并按周循环使用。每周进行一次 1 级转储,之后每日的汉诺塔序列从 3 开始重复。对于每周转储,每个转储文件系统也使用一组固定的磁带,同样按循环方式使用。
4. 几个月后,应将每日和每周使用的磁带从转储周期中移除,并更换为新的磁带。
这个转储序列看似复杂,下面通过具体过程说明如何最小化转储大小并减少恢复所需的转储数量:
- 进行 3 级转储后,恢复只需恢复 0 级和 3 级转储。
- 第二天进行 2 级转储,它会备份自上次较低级别(即 0 级)转储以来的所有更改,此时 3 级转储将失效。
- 5 级转储会备份自 2 级转储以来的更改。随着序列的推进,通过高低级别交替跳过某些日期,之前的转储会逐渐失效,不再需要用于完整恢复。但每个转储仍应保留,以防后续需要恢复意外删除的单个文件。
到周末时,进行 1 级转储,使前一周的所有转储级别都过时,序列重新开始,直到月底进行新的 0 级转储。以下表格展示了每天的转储级别以及将数据恢复到最新版本所需的恢复级别:
| 日期 | 转储级别 | 恢复所需级别 |
| ---- | ---- | ---- |
| 1 | 0 | 0 |
| 2, 9, 16, 23, 30 | 3 | 0, 1
, 3 |
| 3, 10, 17, 24, 31 | 2 | 0, 1
, 2 |
| 4, 11, 18, 25 | 5 | 0, 1
, 2, 5 |
| 5, 12, 19, 26 | 4 | 0, 1
, 2, 4 |
| 6, 13, 20, 27 | 7 | 0, 1
, 2, 4, 7 |
| 7, 14, 21, 28 | 6 | 0, 1
, 2, 4, 6 |
| 8, 15, 22, 29 | 1 | 0, 1 |
在第一周,标记为
*
的 1 级转储在恢复过程中不需要。从第八天开始,始终需要 1 级转储。从表格中可以看出,即使在月底,也只需少数几个转储即可恢复数据,而不是像每日创建增量转储那样需要几十个转储。
3.2 备份脚本
以下是一个示例 bash 脚本,用于存档系统配置和日志文件,并将请求的文件系统转储到远程备份服务器:
#!/bin/sh
# 转储名称,如 home 或 users
NAME=$1
# 要转储的分区,如 /dev/sdb1
DEVICE=$2
# 转储级别,如 0 或 3 等
LEVEL=$3
# ssh 登录名和主机
USERNAME=user
BACKUPHOST=backuphost
# 进行系统清单
/sbin/fdisk -l > /tmp/disk_layout.txt
/bin/df -h >> /tmp/disk_layout.txt
/bin/mount >> /tmp/disk_layout.txt
# 已安装软件(Debian)
/usr/bin/dpkg --get-selections > /tmp/installed_software.txt
# 存档系统配置和日志
/bin/tar cz /tmp/disk_layout.txt /tmp/installed_software.txt \
/etc /var/log /var/spool/postfix | \
/usr/bin/ssh $USERNAME@$BACKUPHOST \
/bin/dd of=$(date +%Y%m%d%H%M%S).config.tar.gz
# 执行转储到远程备份服务器
/usr/sbin/dump -u -$LEVEL -f - $DEVICE | \
/bin/gzip -c | ssh $USERNAME@$BACKUPHOST \
/bin/dd $(date +%Y%m%d%H%M%S).$NAME.dump.$LEVEL.gz
# 删除临时文件
rm -f /tmp/disk_layout.txt /tmp/installed_software.txt
exit 0
该脚本需要 3 个参数:转储名称、要转储的分区和转储级别。典型的使用方式如下:
# remote-dump.sh home /home 0
此脚本每次运行时都会存档
/etc
。若脚本还用于转储其他文件系统,可将这些命令移到一个单独的脚本中,每周甚至每月执行一次。此外,该脚本不会删除前几个月的旧转储文件,这些文件可能会占满备份服务器的空间,从而影响未来的备份。因此,应根据组织的数据保留策略制定相应的程序,以删除或存档旧的转储文件。
3.3 添加 crontab 条目
若要每晚自动运行备份脚本,只需使用备份计划表中的条目,并执行脚本来转储正确的分区。以下是一个示例 crontab 条目,每晚 02:10 执行脚本以转储
/home
:
10 02 1 * * /bin/remote-dump.sh home /home 0
10 02 2,9,16,23,30 * * /bin/remote-dump.sh home /home 3
10 02 3,10,17,24,31 * * /bin/remote-dump.sh home /home 2
10 02 4,11,18,25 * * /bin/remote-dump.sh home /home 5
10 02 5,12,19,26 * * /bin/remote-dump.sh home /home 4
10 02 6,13,20,27 * * /bin/remote-dump.sh home /home 7
10 02 7,14,21,28 * * /bin/remote-dump.sh home /home 6
10 02 8,15,22,29 * * /bin/remote-dump.sh home /home 1
在实施自动化备份程序后,需要密切关注是否有错误发生,并验证远程服务器上转储文件的完整性。
4. 验证恢复程序
即使进行了周全的规划,问题仍可能在最不方便的时候出现。因此,采取积极的灾难恢复方法,通过良好的规划和实践,能在早期发现问题,避免为时过晚。验证系统备份的完整性的唯一有效方法是进行恢复操作,并检查恢复后的系统是否能正常运行。你可以问自己以下问题:
- 如果远程服务器出现故障,需要采取哪些措施?是先修复备份服务器,还是切换到另一台服务器以减少无备份的时间窗口?
- 如果邮件服务器出现故障,是否熟悉恢复程序?
- 是否能在短时间内(如周日)获得替换硬件?
许多管理员认真进行了备份,但在需要恢复时却发现备份因磁带驱动器错误或备份脚本中的小语法错误而无法使用。因此,建议自己设想各种场景,并在备用硬件上进行完整的裸机恢复,或尝试恢复单个用户的电子邮件。验证恢复程序的有效性将使你有信心从数据丢失中恢复过来。
综上所述,本文详细介绍了如何备份电子邮件和邮件服务器配置,从确定需要备份的内容开始,到使用自动化的完整和增量备份解决方案结束。具体描述了使用
dump
命令进行备份的过程,以及如何使用
restore
命令恢复完整的文件系统和选择性的文件。通过实施文中介绍的所有程序,你可以更加安心,同时为用户提供更强大的系统功能。
5. 备份与恢复相关工具及配置
5.1 备份工具
dump
与
restore
-
dump命令 :dump命令用于对文件系统进行备份,支持完整备份(0 级)和增量备份(其他级别)。例如,在自动化备份脚本中使用/usr/sbin/dump -u -$LEVEL -f - $DEVICE进行转储操作,其中-u选项用于更新/etc/dumpdates文件,记录备份信息;-$LEVEL指定备份级别;-f -表示将备份输出到标准输出。 -
restore命令 :restore命令用于恢复文件系统。使用-r选项可以从转储文件的内容中重建整个文件系统,并将其恢复到原始位置,同时保留原始的权限和所有权。例如:
# ssh backup@nas1 dd if=backups/20090727153909.home.dump.0.gz \
| gunzip -c | restore -r -f -
5.2 压缩工具
gzip
在备份和恢复过程中,经常使用
gzip
工具对备份文件进行压缩和解压缩。在备份脚本中,使用
/bin/gzip -c
对
dump
输出的备份数据进行压缩,以减少存储空间。
5.3 远程传输工具
ssh
和
dd
-
ssh:用于在远程服务器之间建立安全的连接,实现数据的远程传输。在备份和恢复脚本中,通过ssh user@backup-host.domain.com连接到备份服务器。 -
dd:用于复制文件并转换和格式化数据。在备份脚本中,使用dd命令将压缩后的备份数据写入备份服务器的指定文件,例如:
/bin/dd of=$(date +%Y%m%d%H%M%S).config.tar.gz
5.4 存档工具
tar
tar
工具用于创建和提取文件存档。在备份配置和日志文件时,使用
tar
命令创建存档,例如:
# tar cz disk_layout.txt installed_software.txt \
/etc /var/log /var/spool/postfix | \
ssh user@backup-host.domain.com \
dd of=/backupdirectory/$(date +%Y%m%d%H%M%S).config.tar.gz
其中,
c
选项用于创建存档,
z
选项用于压缩存档,
f
选项指定输出存档的名称。
6. 备份与恢复流程总结
6.1 备份流程
graph LR
A[确定备份内容] --> B[选择备份方法]
B --> C{自动化备份?}
C -- 是 --> D[编写备份脚本]
C -- 否 --> E[手动执行备份命令]
D --> F[添加 crontab 条目]
F --> G[定期执行备份]
E --> G
B --> H[备份配置和日志文件]
H --> G
- 确定备份内容 :包括系统清单、已安装软件列表、系统配置文件、认证数据、日志文件和邮件队列等。
- 选择备份方法 :可以选择将数据存储在备份介质上,或者将数据添加到备份计划中。
- 自动化备份 :编写备份脚本并添加 crontab 条目,实现定期自动备份。
- 手动备份 :根据需要手动执行备份命令。
-
备份配置和日志文件
:使用
tar工具创建存档并传输到备份服务器。
6.2 恢复流程
graph LR
A[确定恢复需求] --> B{数据是否有变化?}
B -- 是 --> C[执行恢复操作]
B -- 否 --> D[无需恢复]
C --> E{交互式恢复?}
E -- 是 --> F[使用交互式恢复命令]
E -- 否 --> G[使用非交互式恢复命令]
F --> H[恢复文件系统]
G --> H
H --> I[恢复配置和日志文件]
I --> J[验证恢复结果]
- 确定恢复需求 :根据实际情况确定需要恢复的数据。
- 检查数据变化 :如果数据在两次转储之间未发生变化,则无需恢复。
- 执行恢复操作 :根据需要选择交互式或非交互式恢复方法。
-
恢复文件系统
:使用
restore命令恢复文件系统。 - 恢复配置和日志文件 :从备份服务器复制存档并解压缩。
- 验证恢复结果 :检查恢复后的系统是否能正常运行。
7. 常见问题及解决方法
7.1 恢复错误
- 错误信息 :“Incremental tape too low” 或 “Incremental tape too high”。
- 原因 :恢复增量转储时顺序错误。
- 解决方法 :从 0 级转储重新开始恢复过程。
7.2 备份服务器空间不足
- 问题描述 :旧的转储文件占用大量空间,导致备份服务器无法进行新的备份。
- 解决方法 :根据组织的数据保留策略,制定删除或存档旧转储文件的程序。
7.3 配置恢复问题
- 问题描述 :在恢复配置文件时,可能会覆盖现有文件,导致系统出现问题。
-
解决方法
:在解压缩存档之前,创建并进入一个临时目录,避免直接在根目录下执行
tar命令。
8. 总结与建议
8.1 总结
本文全面介绍了 Linux 系统的备份与恢复方法,包括数据恢复操作、配置和日志备份、自动化备份、验证恢复程序等方面。通过合理选择备份方法、使用自动化工具和定期验证恢复程序,可以确保系统数据的安全性和可恢复性。
8.2 建议
- 定期备份 :根据系统的重要性和数据变化频率,制定合理的备份计划,定期进行备份。
- 测试恢复程序 :定期在备用硬件上进行恢复测试,确保恢复程序的有效性。
- 监控备份过程 :密切关注备份过程中是否出现错误,及时处理问题。
- 更新备份策略 :随着系统的升级和业务的变化,及时调整备份策略,确保备份的全面性和有效性。
通过遵循以上建议,你可以更好地保护系统数据,减少数据丢失带来的风险,为系统的稳定运行提供保障。
超级会员免费看
101

被折叠的 条评论
为什么被折叠?



