迁移 Linux 系统,第 1 部分
如何迁移备份和裸机恢复 Linux 系统
郭 晋兵, 软件工程师, IBM
郭晋兵,软件工程师,目前在 IBM 中国系统与科技研发中心从事 Linux 系统相关的测试工作。
简介: 不论是企业用户还是个人用户,完全系统备份是保证数据安全最好的方法。当遇到硬件失败、软件缺陷、人为因素或自然灾害时,裸机恢复必不可少。开源平台 Linux 系统上的完全备份和恢复软件多种多样,其中也不乏有重量级的企业级软件。本文分析了基于可移动媒体的 Linux 系统完全备份和恢复的全部过程及技术细节,并且利用 Linux 平台上开源的工具实现了的单台 Linux 系统的迁移备份及裸机恢复功能。本文的解决方案,不仅适用于个人电脑的备份,同样也适合企业级服务器的备份恢复,而且容易添加远程备份,远程恢复,自动化备份等功能。全文分成两个部分,本文是第一部分,介绍了 Linux 系统迁移备份和裸机恢复的原理。
标记本文!
当硬件升级,更换存储设备或是遇到硬件故障时,需要迁移原来的操作系统及应用软件到新的硬件设备上。这个过程包含系统的迁移备份和裸机恢复,本文详细描述了整个过程的细节。
迁移备份和裸机恢复
灾难恢复 , 指自然或人为灾害后,重新启用信息系统的数据、硬件及软件设备,恢复正常商业运作的过程。灾难恢复是涵盖面更广的业务连续规划的一部分,其核心即对企业或机构的灾难性风险做出评估、防范,特别是对关键性业务数据、流程予以及时记录、备份、保护。灾难恢复规划需要许多手动、复杂的步骤来分配恢复资源、执行裸机恢复、执行数据恢复,并验证系统是否为使用做好了准备。
在灾难恢复中,裸机恢复(bare metal restore)是在灾难性故障发生之后,通过擦除对计算机进行重新格式化的过程。一般包括重新安装操作系统和各种应用软件,如果可能的话,也包括对数据和设置信息的恢复。
回页首
本文的方案简介
本文介绍的 Linux 系统灾难恢复方案利用了 Linux 工具进行数据备份和恢复,利用 Linux 上的开源软件和工具进行裸机恢复。一台服务器和可移动存储设备,实现了灾难备份和裸机恢复的主要功能。
图 1. 基于单机的迁移备份及恢复
在本文的方案中,简化了复杂存储设备,替代为外部可移动存储硬盘,而存储设备和服务器之间的网络连接着简化为 USB 连接或 SCSI/SATA 接口连接。这样把系统备份和恢复的过程缩小到一台机器上。同样,本文的解决方案也很容易扩展到网络连接的远程存储上。
表 1. 灾难备份的环境
灾难备份环境 | 说明 |
硬件环境 | 任意一台支持 Linux 操作系统的机器。本文使用了 IBM System x3500M2,基于 Intel 酷睿多核 CPU。 |
可移动的存储设备,本文使用了可插拔 SATA 硬盘。 | |
软件环境 | Linux 操作系统,本文安装了 SUSE Linux Enterprise Server 10 SP2。 |
备份恢复工具。 | |
其他应用程序。 | |
迁移备份过程
∙ 备份操作系统本身。对于 Linux 系统,并不是所有的目录和文件都需要备份。/dev、 /sys、 /proc、 /tmp 不需要备份。
∙ 如果 Linux 的分区基于 LVM,可以使用 LVM 快照功能保证系统备份的完备性和一致性。
∙ 系统硬件信息的备份,包括硬盘分区表,hostname, 网络连接配置。
裸机恢复的准备
裸机恢复需要从可移动介质如 CD、USB Disk 上启动一个诊断系统。本文采用了 KIWI imaging System 来定制一个预装恢复软件的 LiveCD,见本文的第二部分。
裸机恢复的过程
a. LiveCD 引导系统
b. 驱动硬件设备、加载备份媒介、存储设备并恢复硬盘分区
c. 连接备份媒介
d. 恢复操作系统数据到硬盘分区
e. 恢复其他系统设置
f. 重起系统至硬盘引导
g. 验证恢复成功
本方案的优点在于结构简单,硬件需求少;不考虑复杂的网络环境和网络接口;裸机恢复方案灵活,过程可定制性强。
回页首
Linux 系统的备份
拥有良好备份的第一步是拥有备份计划。首先明确您需要保存的数据以及需要什么恢复策略,然后使用最适合该策略的工具。
备份哪些文件
本文中备份操作系统时,有一些文件系统和目录不需要备份。proc,sysfs, tmpfs 文件系统和 /proc 目录在系统启动时自动生成;/mnt 目录用于 mount 其他文件系统;/media 目录挂载了可移动备份介质。其他一些特殊的目录需要特殊的处理,比如数据库文件。
备份媒介
可擦写光盘、其他硬盘、同一块硬盘的不同分区、或者网络存储系统都可以作为备份媒介。大型的服务器使用 tap 磁带机来备份数据,而如果是一般个人计算机的话,很可能是使用可擦写式光盘来存取数据。本文是基于单机的备份选用了可移动媒体,适用于小型服务器或者个人计算机。因为可移动媒体灵活方便,更换维护容易,成本低,速度快,容量对于单机的备份足够。
备份方式
∙ 完全备份(普通备份 Normal):备份所有选择的文件和文件夹(不管是否被设为存档属性), 备份后清除备份标志;通常 , 在首次创建备份集时要执行一次正常备份。
∙ 增量备份(Incremental):只备份选择的,并且带有标志的文件和文件夹,它清除备份标志 . 即只备份上次正常备份或增量备份以来创建或更改的文件。其需要最少的存储空间 , 并节省备份时间 . 然而在恢复文件比较耗时和困难。
∙ 差异备份(Differential):只备份选择的,并且带有标志的文件和文件夹,它不清除备份标志 . 即只备份上次正常备份或增量备份以来创建或更改的文件。由于其不清除文件的存档属性 , 所以对一个文件执行两次差异备份 , 则在每一次整个文件都要被备份。差异备份使用的存储介质比增量备份多 , 但还原差异备份的数据则简单些。
为了节省存储空间,还需要对备份的数据进行压缩。
备份频率
是否天天备份、若完全备份,需要多久进行一次,增量备份何时一次,备份档案的管理。
根据本文的情况,选择一周一次完全备份,每天增量备份。
备份工具
备份有很多工具,传统的 UNIX 备份工具是 tar 、 cpio 和 dump 。另外,还可以使用第三方软件包 ( 包括 freeware 和商业版 )。备份介质的选择可能影响工具的选择。
tar 是一个已移植到 Linux 中的经典 UNIX 命令。 tar 是 tape archive(磁带归档)的缩写,最初设计用于将文件打包到磁带上。如果您下载过 Linux 源代码,或许已经碰到过 tar 文件。这是一个基于文件的命令,它本质上是连续地、首尾相连地堆放文件。本文中使用了 tar 和 Shell 脚本来控制 Linux 系统备份的策略。
实际上在 Linux 中,任何能够复制文件的程序都可以用来执行某种程度的备份。有人就使用 cpio 和 dd 来执行备份。cpio 是又一个与 tar 差不多的打包实用工具,但使用得不太普遍。 dd 是一个文件系统复制实用工具,它产生文件系统的二进制副本。 dd 还可用于产生硬盘驱动器的映像,类似于使用诸如 Symantec 的 Ghost 这样的产品。然而, dd 不是基于文件的,因此您只能使用它来将数据还原到完全相同的硬盘驱动器分区。
可用于 Linux 的商业化备份产品有很多。商业化产品一般提供了便利的界面和报告系统,而在使用诸如 dump 和 tar 这样的工具时,您必须自食其力。商业化产品很广泛,通常提供大量的特性。Tivoli Storage Manager 或许是现在可用于 Linux 的最好的商业化备份和存储管理实用工具。Tivoli Storage Manager 服务器可运行在多种平台上,包括 Linux,而客户机则可以运行在更多种类的平台上。关于 Tivoli Storage Manager 在 Linux 系统上的使用,请参阅本文的参考资源。
Linux 下的备份示例
本例的备份策略是的是选择每个月的一号和每周日做完全备份,每天都做增量备份。这个增量备份是基于每周日的完全备份的。tar 文件并没有压缩,所以用 gzip 压缩。
清单 1. 备份脚本
#!/bin/sh # Backup Script: backup.sh if [ $# -lt 3 ] then echo "usage: backup.sh dir_under_backup dump_to name" exit; fi COMPUTER=`hostname` if [ $# -gt 3 ] then COMPUTER=$3 fi DIRECTORIES=$1 BACKUPDIR=$2 FLAGS="— directory=$DIRECTORIES --exclude=mnt --exclude=proc --exclude=media" TAR=/bin/tar # name and locaction of tar PATH=/usr/local/bin:/usr/bin:/bin DOW=`date +%a` # Day of the Mon DOM=`date +%d` # Date of the 27 linux用户系统相关命令 DM=`date +%d%b` # Date and 27Sep if [ $DOM = "01" ]; then # monthly full backup NEWER="" echo "$TAR $NEWER -z -c -f $BACKUPDIR/$ $FLAGS ." fi if [ $DOW = "Sun" ]; then # weekly full backup NEWER="" NOW=`date +%d-%b` echo $NOW > $BACKUPDIR/$COMPUTER-full-date #update full backup date echo "$TAR $NEWER -z -c -f $BACKUPDIR/$ $FLAGS – ignore-failed-read ." else # make incremental backup - overwrite last weeks NEWER="--newer `cat $BACKUPDIR/$COMPUTER-full-date`" #get date of last full backup echo "$TAR $NEWER -z -c -f $BACKUPDIR/$ $FLAGS – ignore-failed-read ." fi |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论