迁移 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 网络连接配置
裸机恢复的准备
裸机恢复需要从可移动介质如 CDUSB Disk 上启动一个诊断系统。本文采用了 KIWI imaging System 来定制一个预装恢复软件的 LiveCD,见本文的第二部分。
裸机恢复的过程
a. LiveCD 引导系统
b. 驱动硬件设备、加载备份媒介、存储设备并恢复硬盘分区
c. 连接备份媒介
d. 恢复操作系统数据到硬盘分区
e. 恢复其他系统设置
f. 重起系统至硬盘引导
g. 验证恢复成功
本方案的优点在于结构简单,硬件需求少;不考虑复杂的网络环境和网络接口;裸机恢复方案灵活,过程可定制性强。
回页首
Linux 系统的备份
拥有良好备份的第一步是拥有备份计划。首先明确您需要保存的数据以及需要什么恢复策略,然后使用最适合该策略的工具。
备份哪些文件
本文中备份操作系统时,有一些文件系统和目录不需要备份。procsysfs 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小时内删除。