Linux 系 统 的 备 份 方 法
一 、 基 础 知 识
1 、 分 区
(1 ) 分 区 的 意 义
为什么要进行分区?是因为如果分了区
A、可以增块数据的访问速度,因为对数据进行检索时,硬盘上的磁头就可以从数据所
在分区的位置来对硬盘进行检索,更快地找到数据,例如说分了区,数据位于磁盘
的某一分区内,只检索这个分区比检索整个硬盘要快多了。
B、可以最大限度地减少数据的损失,例如,在Windows下我们分了C盘,D盘,如
果我们把数据放在D盘,那重装系统后D盘上的数据是不会丢失的。
(2 ) 分 区 的 类 型
以上例子说明,分区的概念是不分操作系统的,Linux下肯定也有分区,所以首先我们
应该知道分区的基本概念。分区类型有主分区,扩展分区和逻辑分区,一般一个硬盘最多可
以分四个主分区,但这并不表示最多可以分四个分区,因为还有扩展分区的概念,例如D
盘就属于扩展分区里面的逻辑分区,Linux均支持这些分区,而作为服务器的Linux系统
一盘都比较单纯,一般会划分主分区来建立文件系统。
而由于硬盘类型的不同,在Linux下的表示方式不同,例如:第一个SCSI硬盘在Linux
下叫/dev/sda,而第一个IDE硬盘在Linux下叫/dev/hda, 请注意它们之间的不
同,一般服务器使用SCSI硬盘,应该叫做/dev/sda,千万注意,我
以下所有的例子都是以IDE硬盘来演示,请自己进行修改 。同时第一个
SCSI硬盘的第一个分区叫/dev/sda1,第二个叫/dev/sda2,以此类推。
(3 ) 文 件 系 统
那什么是文件系统?简单些说吧,文件系统就是对文件的存放方式和检索方式,每个操
作系统都运行在文件系统之上,Windows是fat32和ntfs,而Linux就是ext2,ext3等
等了,这些平时我们所说的东西就是文件系统。所以分了区之后就应该在它上面建立文件系
统啦。
Linux是如何管理分区的呢?Unix或者Linux把设备都作为文件来看待,也就是说,
无论是什么设备,在Linux下就是一个文件。分区也是一个文件,/dev/sda1/
dev/sda2就是两个分区。Linux是使用一整个分区来作虚拟内存的,这个虚拟内存空间叫
swap。
(4 ) 挂 载
既然Linux都是以目录的方式来管理文件的,Linux下所有文件都以目录树的形式来
存放,那么Linux如何以这个形式来使用分区的?这就涉及到一个挂载的概念了,Linux
是把分区挂载在“挂载点”上的,所有的文件的绝对路径都以“/”开头,也就是根目录,然后
在这个目录下挂载分区,或者建立目录或文件,其中有些目录是作为作为挂载点存在,它一
般是空的目录。
我们举一个例子,如下所示,我们有两个分区,分别是根分区和usr分区,这些分区已
经建立了文件系统。以下是根分区的结构,根分区中有这些文件和目录,其中有一个目录
usr,它现在是空的。
/-|
|-etc
|-usr
|
|-boot
那我们如何将usr分区使用起来呢?简单,我们把usr分区挂载到根分区下的usr目
录里面就好了,这个操作过程叫做mount。我们将执行以下操作:
#mount-text3/dev/hda5/usr
这个例子是把文件系统类型为ext3的usr分区(记得Linux下分区是以文件的形式存
在的,/dev/hda5就是我们假设的usr分区)挂载在/分区下的usr目录下。那文件树就变
成:
/-|
|-etc
|-usr/-
| |-bin
| |-local
| |-share
| |-……
|-boot
于是我们就可以通过cd/usr进入/usr目录来访问usr分区里面的文件了。所以这个
/usr目录就叫作“挂载点”。
最后我们以一个例子来说明。打开/etc/fstab文件,这个文件描述了系统中的分区和
它的挂载点。
#vi/etc/fstab
分区文件的位置 挂载点 文件系统类型 挂载选项
/dev/hda1是boot分区,它挂载在/boot之下,而/dev/hda2分区是作为虚拟内存空间
来使用的,/dev/hda3是根分区。
2 、Linux 系 统 的 启 动 顺 序
在这里当不不会对Linux系统的启动顺序做过多的说明,因为我们只要知道和备份相
关的东西就好了。
一般来说电脑在启动过程中,先进入一个叫做启动管理器的程序,这个程序位于硬盘的
最初部份,这部份名称叫mbr,再由启动管理器引导进入不同的操作系统。例如Linux操
作系统在启动时先进入Grub启动管理器,然后再由它进入/boot目录或/boot分区,取出
Linux操作系统的内核,启动这个内核,由内核来进行后面的操作。
那和备份有什么关系呢?关系就是,我们还要安装这个启动管理器!!
可能你会想,为什么用ghost来备份windows,在还原的时候不需要安装启动管理器?
答案就是,不管你在ghost备份或者还原C盘的时候,都不会去动到这个启动管理器,它
位于硬盘的起始部份,不在C盘分区里面。所以你还原,它还存在,就不需要安装了,而
Linux也是一样的。那为什么我前面还是说要安装这个启动管理器?因为我假设我们还原的
时候,是以一个新的硬盘来还原的,不是重装哦,是还原哦。
3 、 备 份 还原 原Linux 系 统 的 思 路
我们备份和还原Linux系统的思路就是:
1、备份时,很简单,复制就行,备份系统里面所有分区里面的所有的文件,注意的是
备份的文件中包括系统里面对于服务器硬件的描述,对分区的描述,对系统各个文
件属性的描述。
2、还原的时候,我们使用一个新的硬盘,基于第1点蓝字部份的描述,我们的硬盘最
好与备份前的硬盘是同一型号和同一大小,如果不行,至少是同一类型的硬盘,也
就是说,备份前是SCSI硬盘,那还原时也要SCSI硬盘(因为备份中某个文件对硬
盘的描述是/dev/sda,我们装一个IDE硬盘,变成了/dev/hda,那么会对系统造
成混乱的,请参照(1)分区的类型),硬盘需要重新进行分区,分区和备份前一样,
也就是说,因为我们备份的系统里面有文件(/etc/fstab)对系统使用的分区进行
了描述,我们最好不去改变它。
3、正如你所愿,保存备份文件的硬盘大小可不限,也可以在同一个硬盘上备份不同机
器的系统。
4、还原时,首先分区,然后创建文件系统,进入复制后的系统,安装启动管理器,OK,
重启吧,还原好了。
二 、 准 备 工 作
我们要备份,当然要先准备好一个硬盘,来存放备份的文件啦,但是这个硬盘,我们也
要给它进行分区,也要进行文件系统的创建,否则我们没法使用的。我认为,要备份Linux
系统,最好也使用Linux的文件系统,我们当然不会拿这个硬盘去拷电影吧。所以,专用
硬盘专门用途,就创建Linux文件系统ext3好了,而且只创建一个分区(你不知道要备份
的文件有多大,所以最好只创建一个分区,保证不会因为分区问题备到一半没了空间)。
要创建Linux所使用的ext3文件系统,你可以在windows下使用分区魔术师。
如果不打算这样做的话,那随便使用一个Linux服务器也行。随便找一台不在线的服
务器,关机,把这块硬盘插进去,如果你要使用移动硬盘,有USB接口,那就更加简单了,
直接插到USB口就好了。
然后在Linux下运行
#fdisk-l
这里就可以看到有两个硬盘,一个就是正在使用的Linux主机了,有40G,插在第一个IDE
口,所以是/dev/hda,另外一个IDE硬盘是没有使用的,它有2G,上面没有任何分区,
就是我们新的硬盘,插在第二个IDE口,所以被认出是/dev/hdb,请注意服务器所使用的
SCSI一盘是sda,请自行区分。
好了,开始进行分区,对某个硬盘进行分区的命令是fdisk硬盘,例如我们要输入的
#fdisk/dev/hdb
1、输入n,意思就是创建一个分区
2、这时弹出来一个问题要回答,是要创建扩展分区还是主分区,我们要创建一个主分区,
这里再打入p
3、又弹出来一个问题,就是分区号,你可以看到只能分四个主分区的,呵呵,我们分区号
就写1吧。
4、又有问题要回答,这里是第一个扇区和最后一个扇区的值,也就是分区的大小,我们按
默认的值,也就是说整个硬盘也就分一个区。
5、这时Command(mforhelp):又出现了,按一下p,意思是查看分区的结果,这时
会显示你分了哪个区了,这个区的分区类型是什么,分区范围是什么。
6、分区完了,显示结果也是我们所要求的,那么就要写入硬盘保存,这时候输入w,表示
将分区的结果写回硬盘,这时分区程序显示同步完成后自动退出了。
分区完成,我们可以开始创建文件系统了。输入以下命令来创建一个ext3文件系统。
#mke2fs-j/dev/hdb1
没有什么错误,就表明我们又分好区又创建好文件系统了。
接下来还要再准备一张Linux系统维护盘,http://distrowatch.com/systemrescue,如
这一张,可以光盘启动的,可以识别出服务器的各种硬件才行,最重要的当是能识别出服务
器的硬盘啦,这个光盘版的最新版本应该没有问题。
tar软件需要最新版本,不然在32位平台上无法创建大于2G的压缩文件,关于如何安装
最新版本的tar,每个Linux版本不同的啦,如果是redhat,那么请用RPM包吧。
三 、 备 份
1 、 光 盘 启 动 , 查 看 设 备 信 息
把分好区,创建好文件系统的硬盘插入要分区的服务器的硬盘插槽,如果是USB接口
的话可在线插到USB接口中,然后用上面准备工作中所说的光盘放入光驱中,使用光盘来
启动系统。
当然这时还是要输入fdisk-l来查看有没有认出硬盘的。
看出和原来有什么区别没?yes,我们对备份的硬盘或者移动硬盘已经分好区了,分区是/
dev/hdb1。
2 、 将 各个 个Linux 分 区 挂 载 起 来
我们接下来就把待备份系统的分区和新硬盘的分区挂载进系统中的/mnt目录,要挂载
哪些分区并且将它们挂载在哪里呢,这时候就要参考上面提到的/etc/fstab文件了,参照
它,分别运行
#mount-text3/dev/hda3/mnt
#mount-text2/dev/hda1/mnt/boot
(挂载待备份系统的分区)
#mount-text3/dev/hdb1/mnt/mnt
(挂载新硬盘的分区)
完成之后运行df-k来查看挂载是否成功。see?它们全都挂载成功,并且显示了它们
使用了百分之几的空间。
3 、 进 行 备 份
好了,这时就可以进行备份的工作了,输入下面的命令
#cp/mnt/etc/fstab/mnt/mnt/full-backup-sas-`date'+%d-%B-%Y'`.fstab.txt
#tar-zcvpf./mnt/full-backup-sas-`date'+%d-%B-%Y'`.tar.gz\
--directory/mnt—exclude=./mnt .2>./mnt/error.txt
不要忘了2之前的点号,以上先拷贝/etc/fstab,里面保存了分区信息,我们后面还原的时
候要用到的,然后开始备份,并将标准错误重定向到error.txt(2>就是标准错误重定向),
当命令运行完成之后,可以查看这个error.txt来查看是否有什么重要错误
上列的指令指定了选项''z''(压缩;备份资料经由''gzip''压缩),''c''(建立;一个archive档开
始被建立),''v''(verbose;显示出已经备份好的档案),''p''(允许保存文件的属性;保护的资
料将会被''记忆'',可以被回复)。''f''(档案)选项後面接的是的要写入的archive档(或装置)
名称,''--directory''选项告知tar在开始备份前首先跳到以下的档案路径(在本例中是
''/mnt''目录)。''--exclude''选项告知tar不要备份所指定的档案或目录。最後,''.''符号
告知tar要备份目前目录中的所有东西。
OK,备份的工作完成,呵呵,这样在你的移动硬盘或者新加的硬盘就已经有Linux系统的
备份了。
4 、 取 下 硬 盘
我们备份完了进入/mnt/mnt目录看看我们备份的文件是不是正确的,如果error.txt是空
的,或者里面的错误不是什么大问题,那么我们就认为备份已经完成,可以取消挂载并将系
统重启了。
#shutdown-hnow
关闭机子,取下备份硬盘,然后就重启机子,给它正常工作吧。
三 、 恢 复 系 统
按照我们还原的思路,恢复系统就是把文件复制回来,然后安装启动管理器,这个启动
管理器如何安装呢?不要紧,Linux有个命令叫做chroot,就是切换环境的意思,我们把
系统包含的所有文件都给复制回来了,然后再chroot到这个刚复制完的系统中,就可以使
用里面的命令,来安装启动管理器了。当然后面还附上了启动管理器的另一种备份和还原方
式。嘿嘿。
1 、 恢 复 前 准 备
拿一个新的硬盘,这个硬盘,至少在类型上要和原来的一样,也就是说以前的是SCSI
那么新的也是SCSI,这里又罗嗦了一把。硬盘的大小不同也不是很大的关系。我们需要对
这个新的硬盘进行分区,且分区的方式和备份前的是一模一样的。
要怎么才能一模一样?首先新硬盘插入的插槽,要和备份前的一样,这样才能保证系统
对硬盘的描述一样,另外还要根据之前备份的fstab文件对硬盘进行分区。这样就可以保证
和备份前是一致的了。备份文件所在的硬盘插入另一个插槽。
好,根据备份前的/etc/fstab文件所描述的内容来对硬盘进行分区,里面说明了原来
的硬盘上有三个分区,分别是/dev/hda1,/dev/hda2,/dev/hda3,我们也要建三个分区,
如下:
1、输入fdisk/dev/hda开始才第一个分区进行分区操作。
2、硬盘还是空的嘛,所以键入n来新建一个分区,按提示,建主分区,建入p;分区号,
键入1;扇区的开始,回车;分区的大小,键入+256M,表示是256M大小,对/
boot分区来说够用了。
3、以第2步的顺序来建立512M的交换分区,我这里写512M了,一般是内存的2倍。
4、以第2步的顺序来建立主分区,就使用剩下的所有空间吧。
5、在Command(mforhelp):后输入t来改变交换分区/dev/hda2的分区类型。键入
2,再键入82,如图:
6、最后键入p来查看是否分区正确,如果正确,就可以键入w来保存对硬盘的修改了。
7、创建文件系统,忘了吗?分完区后就应该创立文件系统了,下面的例子:
#mke2fs/dev/hda1
(对/boot建立ext2文件系统)
#mkswap/dev/hda2
#mke2fs-j/dev/hda3
(对/建立ext3文件系统)
好了,文件系统也创建结束了,准备工作完成。
2 、 挂 载 分 区
分区完成后,我们就开始挂载这两个硬盘上面的分区了,这回不同的是,因为硬盘是空的,
所以挂载点是需要创建的,下面是例子,再罗嗦一次,你需要按自己的实际情况来分区和挂
载,保证和备份前的一样就行了:
#mount/dev/hda3/mnt
#mkdir/mnt/boot
#mount/dev/hda1/mnt/boot
#mkdir/mnt/mnt
#mount/dev/hdb1/mnt/mnt
#swapon/dev/hda2
不要忘了哦,要先挂载根分区的。
以上命令的意思是,先挂载根分区,然后在这个根分区中建若干个目录作为其它分区的挂载
点,然后挂载硬盘的其它分区到这些目录,记得,一定要先挂载根分区,然后再把交换分区
用起来(Linuxswap),输入完成之后用
#df-k
和备份前的/etc/fstab对比一下是不是,如下,表明一致了。
#vi/mnt/mnt/full-backup-sas-09-October-2008.fstab.txt
你可以看到df-k里面显示的挂载点与fstab文件里面的挂载点只差mnt。等下我们chroot
到/mnt目录里面,/mnt就变成/,而/mnt/boot就变成/boot了。这就是chroot的作用,
将你的环境限制在某一个目录中!
3 、 执 行 恢 复 命 令
分区挂载完毕,我们就可以开始进行还原的操作了,简单,就是把文件给解压,复制回来就
OK了。
#cd/mnt
#tar-zxvpf./mnt/full-backup-sas-09-October-2008.tar.gz
上面的指令会从''full-backup-sas-09-October-2008.tar.gz''回存所有的档案,并且保
留原来文件的属性,这个很重要,不能忘了p参数!
4 、 安 装 启 动 管 理 器
前面说过了,要安装启动管理器就要进入刚刚复制的系统中,这要用到chroot命令,但是
在这之前,我们还要做的工作就是把fstab文件里面需要挂载的虚拟设备给挂载上,它们就
是devpts和proc,看看上面的图吧,它们就在最后两行。
#mount-tprocproc/mnt/proc
#mount-tdevptsdevpts/mnt/dev/pts
然后执行chroot命令
#chroot/mnt/bin/env-i\
HOME=/rootTERM="$TERM"PS1='\u:\w\$'\
PATH=/bin:/usr/bin:/sbin:/usr/sbin\
/bin/bash—login+h
好了,我们已经chroot进来了,那么就可以运行启动管理器的安装程序了,对于grub这
个启动管理器来说,只要键入如下命令就可以安装到mbr了(mbr)。
#grub-install—no-floppy/dev/hda
没有什么错误发生,那就重启机子吧,还原也完成了。这时重启机子应该就可以进入系统了,
和备份前的一样的。
大 功 告 成 !
额外的方法:
=========另一种备份还原启动管理器的方法(只对x86有效)==========
使用这个方法,就要了解mbr是什么,MBR是英文MasterBootRecord的缩写,中文意
为主引导记录。硬盘的0磁道的第一个扇区称为MBR,它的大小是512字节,而这个区域
可以分为两个部分。第一部分为pre-boot区(预启动区),占446字节;第二部分是Partition
table区(分区表),占66个字节,该区相当于一个小程序,作用是判断哪个分区被标记为
活动分区,然后去读取那个分区的启动区,并运行该区中的代码。
那说明什么?说明我们只要备份那446个字节就好了,还原的时候把它复制回去就行了。
哈哈,这个更简单,但是它在分区和文件系统之外,不能以copy的方式来备份。要使用
dd命令。
嗯,那就是说,如果以此种方式来备份,那么在备份的时候,要额外再加上一步
#ddif=/dev/hdaof=/mnt/full-backup-sas-`date'+%d-%B-%Y'`.mbr\
bs=446count=1
那么在还原的时候,前3步是一样的,最后一步安装启动管器员,我们就不用chroot命令
了,直接物理上把这446个字节给导回mbr里面就好了。
#ddif=/mnt/mnt/full-backup-sas-09-October-2008.mbr\
of=/dev/hdabs=446count=1
重启,至此大功告成。