Linux备份全攻略
1. 磁带操作基础
在Linux中,若不使用非倒带磁带设备,使用
mt
命令操作后磁带驱动器会自动倒带,这在查找特定文件时可能会带来困扰。
以下是一些常见的磁带操作命令:
- 倒带
/dev/nst0
中的备份磁带:
[root@server ~]# mt -f /dev/nst0 rewind
- 将磁头移动到准备读取磁带上第三个文件的位置:
[root@server ~]# mt -f /dev/nst0 asf 2
mt
命令的参数如下表所示:
| 参数 | 描述 |
| — | — |
| -f tape_device | 指定磁带设备,第一个非倒带SCSI磁带设备是
/dev/nst0
|
| fsf count | 向前跳过指定数量(count)的文件,磁带定位到下一个文件的第一个块 |
| asf count | 先倒带,然后向前跳过count个文件标记,将磁带定位到指定文件的开头 |
| rewind | 倒带 |
| erase | 擦除磁带 |
| status | 显示磁带设备的状态 |
| offline | 倒带后使磁带离线,若适用则卸载磁带 |
| unlock | 解锁驱动器门(仅适用于某些磁带驱动器) |
2. dump和restore工具
dump
工具用于复制整个文件系统,
restore
工具则从这些副本中提取单个文件和目录。
2.1 dump的级别概念
为支持增量备份,
dump
使用了转储级别(dump levels)的概念。转储级别为0表示全量备份,大于0的转储级别是相对于上一次较低级别转储的增量备份。例如:
- 转储级别1涵盖自上次级别0转储以来文件系统的所有更改。
- 转储级别2涵盖自上次级别1转储以来文件系统的所有更改,以此类推,直到转储级别9。
dump
工具将所有转储信息存储在
/etc/dumpdates
文件中,该文件列出了每个备份的文件系统、备份时间和转储级别。根据这些信息,可确定恢复时使用的磁带。
2.2 使用dump
dump
命令行实用程序有许多参数,以下是一些常用参数:
| 参数 | 描述 |
| — | — |
| -level# | 转储级别,level#是0到9之间的数字 |
| -a | 自动确定磁带大小,若未指定
-b
、
-B
、
-d
或
-s
,这是
dump
的默认行为 |
| -j | 使用基于
bzlib
库的压缩,此压缩方案效果好,但需要更多CPU资源 |
| -z | 使用基于
zlib
库的压缩,可能会破坏与其他UNIX系统的兼容性 |
| -b blocksize | 将转储大小设置为指定的块大小(以千字节为单位) |
| -B count | 指定每个磁带要转储的记录数量,若数据量超过磁带空间,
dump
会提示插入新磁带 |
| -f filename | 指定转储文件的位置,可以是另一个文件系统上的普通文件,也可以是磁带设备 |
| -u | 转储成功后更新
/etc/dumpdates
文件 |
| -d density | 指定磁带的密度(以位/英寸为单位) |
| -s size | 指定磁带的大小(以英尺为单位) |
| -W | 显示需要转储的文件系统,而不实际执行转储 |
| -L label | 为转储添加一个可被
restore
命令读取的标签 |
| -S | 执行大小估计,而不实际执行转储 |
例如,对
/dev/sda1
文件系统执行级别0转储到
/dev/st0
的命令如下:
[root@server ~]# dump -0 -f /dev/st0 /dev/sda1
2.3 抑制磁带大小计算
如果不知道磁带大小且
-a
选项无法计算,可采用以下技巧:
[root@server ~]# dump -0 -f - /dev/sda1 | cat >> /dev/st0
还可以利用此机会应用自己的压缩过滤器,如使用
gzip
压缩:
[root@server ~]# dump -0 -f - /dev/sda1 | gzip --fast -c >> /dev/st0
需要注意的是,不建议对正在使用的文件系统进行转储,最好的方法是先卸载文件系统。若无法卸载,应定期验证备份。
2.4 使用dump备份整个系统
若系统包含多个文件系统,需为每个文件系统运行
dump
命令。假设要备份
/dev/sda1
、
/dev/sda3
、
/dev/sda5
和
/dev/sda6
到
/dev/nst0
,并进行压缩,可执行以下命令:
[root@server ~]# mt -f /dev/nst0 rewind
[root@server ~]# dump -0uf - /dev/sda1 | gzip --fast -c >> /dev/nst0
[root@server ~]# dump -0uf - /dev/sda3 | gzip --fast -c >> /dev/nst0
[root@server ~]# dump -0uf - /dev/sda5 | gzip --fast -c >> /dev/nst0
[root@server ~]# dump -0uf - /dev/sda6 | gzip --fast -c >> /dev/nst0
[root@server ~]# mt -f /dev/nst0 rewind
[root@server ~]# mt -f /dev/nst0 eject
3. restore工具的使用
restore
程序读取
dump
创建的转储文件,并从中提取单个文件和目录。它提供了更直观的交互式模式。
restore
实用程序的命令行选项如下表所示:
| 选项 | 描述 |
| — | — |
| -i | 启用交互式模式,读取磁带的目录内容,提供类似shell的界面,可移动目录并标记要恢复的文件 |
| -r | 重建文件系统,若文件系统丢失,可重新创建空文件系统并恢复所有文件和目录 |
| -b blocksize | 将转储的块大小设置为指定的千字节数,若未提供,
restore
会自动确定 |
| -f filename | 从指定文件读取转储 |
| -T directory | 指定恢复的临时工作空间,默认为
/tmp
|
| -v | 详细模式,显示
restore
执行的每个步骤 |
| -y | 发生错误时自动重试,而不询问用户是否重试 |
一个典型的
restore
调用示例:
[root@server ~]# restore -ivf /dev/st0
若整个文件系统丢失,可按以下步骤恢复:
1. 使用适当的
mkfs.*
命令重新创建文件系统,例如:
[root@server ~]# mkfs.ext4 /dev/sdb1
注意
:为避免数据丢失,确保在正确的设备上运行
mkfs.*
命令。
2. 挂载文件系统:
[root@server ~]# mount /dev/sdb1 /home
-
使用
restore进行恢复:
[root@server ~]# cd /home; restore -rf /dev/st0
若使用
gzip
压缩了转储,需先解压缩:
[root@server ~]# gzip -d -c /dev/st0 | restore -ivf -
以下是使用
dump
和
restore
的流程图:
graph TD
A[开始] --> B[使用dump备份文件系统]
B --> C{是否使用gzip压缩}
C -- 是 --> D[使用gzip压缩备份]
C -- 否 --> E[直接备份到磁带]
D --> F[将备份写入磁带]
E --> F
F --> G[完成备份]
G --> H[需要恢复数据]
H -- 是 --> I{备份是否使用gzip压缩}
I -- 是 --> J[使用gzip解压缩]
I -- 否 --> K[直接使用restore恢复]
J --> K
K --> L[完成恢复]
H -- 否 --> M[结束]
4. tar工具
tar
最初用于将文件存档到磁带上(
tar = tape archive
)。由于Linux将设备视为文件,我们也可以使用
tar
将一组文件存档到单个磁盘文件中,同样的
tar
命令也可以改写为将文件发送到磁带。
与
dump
相比,
tar
可以更轻松地存档文件子集,因为
dump
只能处理完整的文件系统,而
tar
可以处理目录。但在备份整个文件系统时,
dump
通常比
tar
更高效,且
dump
存储了更多文件信息,便于恢复。另一方面,
tar
具有真正的跨平台性,Linux下创建的
tar
文件可以在其他UNIX平台上使用
tar
命令读取,
gzip
压缩的
tar
文件甚至可以被Windows的
WinZip
和
WinRAR
程序读取。选择
tar
还是
dump
取决于具体的环境和需求。
5. rsync工具
rsync
用于在不同位置同步文件、目录或整个文件系统,位置可以是本地系统到网络系统,也可以是本地文件系统内。它通过使用增量编码(delta encoding)来最小化传输的数据量。
rsync
易于编写脚本,可轻松包含在
cron
作业或其他定期自动运行的任务中。
许多基于CLI和GUI的前端工具都依赖
rsync
(或
librsync
库)进行实际工作。例如,Duplicity(http://duplicity.nongnu.org/)使用
rsync
算法和库提供加密且高效的带宽备份。
6. 其他备份解决方案
还有一些开源项目旨在提供企业级备份解决方案,如AMANDA、Bacula、Dirvish、Mondo Rescue和BackupPC。
| 项目 | 描述 | 官网 |
|---|---|---|
| AMANDA | 允许使用单个主备份服务器通过网络将多个主机备份到磁带驱动器、磁盘或光盘介质上 | www.amanda.org |
| Bacula | 基于网络的备份套件,可在异构网络系统中备份、恢复和验证数据 | www.bacula.org |
| Dirvish | 基于磁盘的旋转网络备份系统,擅长备份到磁盘而非磁带 | www.dirvish.org |
| Mondo Rescue | 更像是灾难恢复套件,支持逻辑卷管理(LVM)、RAID和其他文件系统 | www.mondorescue.org |
| BackupPC | 用于将Linux和Microsoft Windows PC及笔记本电脑备份到服务器磁盘的开源备份软件 | http://backuppc.sourceforge.net |
总之,备份是系统维护中最重要的方面之一。虽然磁带驱动器逐渐过时,但我们仍然介绍了Linux下磁带驱动器的基础知识以及一些用于控制磁带驱动器和备份数据的命令行工具。此外,除了
dump
、
restore
、
tar
和
rsync
,还有许多商业和非商业备份软件可供选择。无论选择哪种方式进行数据备份,都要确保定期进行备份操作。
Linux备份全攻略
7. 备份方案的选择与考量
在选择合适的备份方案时,需要综合多方面因素进行考量。以下是不同场景下各备份工具的适用性对比:
| 场景 | 适用工具 | 理由 |
| — | — | — |
| 全量备份整个文件系统 | dump | 能高效处理完整文件系统备份,且存储更多文件信息,便于恢复 |
| 备份文件子集或目录 | tar | 可轻松处理目录,适合备份部分文件,且具有跨平台性 |
| 同步文件或目录 | rsync | 利用增量编码,可最小化传输数据量,适合定期同步 |
| 企业级多主机备份 | AMANDA、Bacula | 支持网络备份,能满足多主机、异构网络系统的备份需求 |
| 磁盘备份 | Dirvish | 专门针对磁盘备份进行了优化,更适合磁盘存储场景 |
| 灾难恢复 | Mondo Rescue | 支持多种文件系统和存储管理方式,可快速恢复系统 |
| 多系统PC备份 | BackupPC | 可将Linux和Windows系统的PC及笔记本电脑备份到服务器磁盘 |
同时,还需要考虑备份的频率、存储介质的容量和成本、恢复的难易程度以及对系统性能的影响等因素。例如,如果数据更新频繁,可能需要更频繁的增量备份;如果存储容量有限,可选择压缩率高的备份方式;如果对恢复时间有严格要求,应选择恢复操作简单快捷的工具。
8. 备份策略的制定
制定合理的备份策略是确保数据安全的关键。以下是一个常见的备份策略制定流程:
graph TD
A[确定备份需求] --> B[评估数据重要性和更新频率]
B --> C{数据重要性高且更新频繁?}
C -- 是 --> D[采用全量+增量备份]
C -- 否 --> E[考虑定期全量备份]
D --> F[确定全量备份周期]
E --> F
F --> G[确定增量备份周期]
G --> H[选择合适的备份工具]
H --> I[设置备份存储介质和位置]
I --> J[制定备份任务调度]
J --> K[测试备份和恢复流程]
K --> L[监控备份任务执行情况]
L --> M[定期评估和调整备份策略]
- 确定备份需求 :明确需要备份的数据范围,包括文件系统、数据库、配置文件等。
- 评估数据重要性和更新频率 :根据数据的重要性和更新情况,确定备份的优先级和频率。
-
选择备份方式
:根据数据特点选择全量备份、增量备份或差异备份。
- 全量备份 :备份所有数据,恢复简单,但占用空间大、备份时间长。
- 增量备份 :只备份自上次备份以来发生变化的数据,节省空间和时间,但恢复时需要依次恢复多个备份文件。
- 差异备份 :备份自上次全量备份以来发生变化的数据,恢复相对简单,占用空间和时间介于全量备份和增量备份之间。
- 确定备份周期 :根据数据更新频率确定全量备份和增量备份的周期。例如,对于重要且更新频繁的数据,可每天进行增量备份,每周进行一次全量备份。
-
选择备份工具
:根据备份需求和数据特点选择合适的备份工具,如前文介绍的
dump、tar、rsync等,或企业级备份解决方案。 - 设置备份存储介质和位置 :选择可靠的存储介质,如磁带、磁盘阵列、云存储等,并确定备份文件的存储位置。
-
制定备份任务调度
:使用
cron等工具设置备份任务的执行时间,确保备份工作按时进行。 - 测试备份和恢复流程 :定期进行备份和恢复测试,确保备份文件的完整性和可恢复性。
- 监控备份任务执行情况 :实时监控备份任务的执行状态,及时发现和处理异常情况。
- 定期评估和调整备份策略 :随着业务的发展和数据的变化,定期评估备份策略的有效性,及时进行调整和优化。
9. 备份的监控与维护
为确保备份工作的正常进行和备份数据的安全性,需要对备份过程进行监控和维护。以下是一些监控和维护的要点:
-
备份任务状态监控
:通过日志文件、系统监控工具等方式,实时监控备份任务的执行状态,如是否按时开始、是否成功完成等。例如,可以查看
/var/log
目录下的相关日志文件,检查备份任务的执行记录。
-
备份数据完整性检查
:定期对备份数据进行完整性检查,确保备份文件没有损坏或丢失。可以使用
restore
、
tar
等工具对备份文件进行验证,或者通过比较备份前后的数据文件来检查数据的一致性。
-
存储介质健康检查
:定期检查备份存储介质的健康状况,如磁带的磨损情况、磁盘的读写性能等。对于出现问题的存储介质,及时进行更换或修复。
-
备份策略调整
:根据业务需求和数据变化,及时调整备份策略。例如,如果数据量大幅增加,可能需要增加存储介质的容量或调整备份周期;如果数据的重要性发生变化,可能需要调整备份的优先级。
-
灾难恢复演练
:定期进行灾难恢复演练,模拟各种灾难场景,测试备份数据的恢复能力。通过演练,发现恢复过程中存在的问题,并及时进行改进,确保在实际灾难发生时能够快速、准确地恢复数据。
10. 总结与建议
备份是保障系统数据安全和业务连续性的重要手段。在Linux环境下,有多种备份工具和解决方案可供选择,每种工具都有其特点和适用场景。在实际应用中,需要根据具体的需求和环境,选择合适的备份工具和策略,并进行有效的监控和维护。
以下是一些建议:
-
定期备份
:根据数据的重要性和更新频率,制定合理的备份周期,确保数据的及时备份。
-
多介质存储
:将备份数据存储在多种介质上,如磁带、磁盘和云存储,以提高数据的安全性和可靠性。
-
加密备份
:对于敏感数据,采用加密技术对备份数据进行加密,防止数据泄露。
-
测试恢复流程
:定期进行备份恢复测试,确保在需要时能够快速、准确地恢复数据。
-
监控与维护
:建立完善的监控和维护机制,及时发现和处理备份过程中出现的问题。
总之,做好备份工作需要综合考虑多个方面的因素,并不断优化和完善备份策略。只有这样,才能在面对各种意外情况时,保障系统数据的安全和业务的正常运行。
超级会员免费看
7

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



