免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11715 | 回复: 7
打印 上一主题 下一主题

用tar来备份Linux的方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-01 11:27 |只看该作者 |倒序浏览
题记

很多朋友都不知道如何对Linux进行系统备份,其实用tar来进行备份和windows下ghost是一样的,且这个软件啥发行版都会给带上,简直是居家旅行,必备良药哪。。本人就懒得再进行编辑了,所以图片去掉了,请下载附件的pdf来查看文档中的图片,谢谢

以下文档中命令的使用有一定的危险性,请注意先在Virtual BOX上进行测试,虽然本人写文档的时候测试了若干遍,但可能难免写作时出错,若哪位兄弟找到错误,包括概念上的错误,请尽快联系在下jeff.rain@gmail.com,在下立即进行修改,共同进步。谢谢!

另文档中的一些定义,和命令的解释,其中tar备份部份参考的是《Linux网管123》,谢谢原作者,而MBR这一部份参考了网络,原作者已不可考,同时感谢。


Linux系统的备份方法
一、基础知识
1、分区
(1)分区的意义
为什么要进行分区?是因为如果分了区
A、可以增块数据的访问速度,因为对数据进行检索时,硬盘上的磁头就可以从数据所在分区的位置来对硬盘进行检索,更快地找到数据,例如说分了区,数据位于磁盘的某一分区内,只检索这个分区比检索整个硬盘要快多了。
B、可以最大限度地减少数据的损失,例如,在Windows下我们分了C盘,D盘,如果我们把数据放在D盘,那重装系统后D盘上的数据是不会丢失的。
(2)分区的类型
以上例子说明,分区的概念是不分操作系统的,Linux下肯定也有分区,所以首先我们应该知道分区的基本概念。分区类型有主分区,扩展分区和逻辑分区,一般一个硬盘最多可以分四个主分区,但这并不表示最多可以分四个分区,因为还有扩展分区的概念,例如D盘就属于扩展分区里面的逻辑分区,Linux均支持这些分区,而作为服务器的Linux系统一盘都比较单纯,一般会划分主分区来建立文件系统。
而由于硬盘类型的不同,在Linux下的表示方式不同,例如:第一个SCSI硬盘在Linux下叫/dev/sda,而第一个IDE硬盘在Linux下叫/dev/hda,请注意它们之间的不同,千万注意,我以下所有的例子都是以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 -t ext3 /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(m for help):又出现了,按一下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 -t ext3 /dev/hda3 /mnt
#mount -t ext2 /dev/hda1 /mnt/boot
(挂载待备份系统的分区)
#mount -t ext3 /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 -h now
关闭机子,取下备份硬盘,然后就重启机子,给它正常工作吧。
三、恢复系统

按照我们还原的思路,恢复系统就是把文件复制回来,然后安装启动管理器,这个启动管理器如何安装呢?不要紧,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 (m for help): 后输入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
不要忘了哦,要先挂载根分区的。
以上命令的意思是,先挂载根分区,然后在这个根分区中建若干个目录作为其它分区的挂载点,然后挂载硬盘的其它分区到这些目录,记得,一定要先挂载根分区,然后再把交换分区用起来(Linux swap),输入完成之后用
#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 -t proc proc /mnt/proc
#mount -t devpts devpts /mnt/dev/pts
然后执行chroot命令
#chroot /mnt /bin/env -i \
    HOME=/root TERM="$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
没有什么错误发生,那就重启机子吧,还原也完成了。这时重启机子应该就可以进入系统了,和备份前的一样的。
大功告成!

额外的方法:
============另一种备份还原启动管理器的方法=============
使用这个方法,就要了解mbr是什么,MBR是英文Master Boot Record的缩写,中文意为主引导记录。硬盘的0磁道的第一个扇区称为MBR,它的大小是512字节,而这个区域可以分为两个部分。第一部分为pre-boot区(预启动区),占446字节;第二部分是Partition table区(分区表),占66个字节,该区相当于一个小程序,作用是判断哪个分区被标记为活动分区,然后去读取那个分区的启动区,并运行该区中的代码。

那说明什么?说明我们只要备份那446个字节就好了,还原的时候把它复制回去就行了。哈哈,这个更简单,但是它在分区和文件系统之外,不能以copy的方式来备份。要使用dd命令。
嗯,那就是说,如果以此种方式来备份,那么在备份的时候,要额外再加上一步
#dd if=/dev/hda of=/mnt/full-backup-sas-`date '+%d-%B-%Y'`.mbr \
bs=446 count=1
那么在还原的时候,前3步是一样的,最后一步安装启动管器员,我们就不用chroot命令了,直接物理上把这446个字节给导回mbr里面就好了。
#dd if=/mnt/mnt/full-backup-sas-09-October-2008.mbr \
of=/dev/hda bs=446 count=1
重启吧,好了,大功又告成了!!

[ 本帖最后由 aerosmith 于 2008-6-2 00:39 编辑 ]

Linux备份恢复方法.pdf

402.75 KB, 下载次数: 842

论坛徽章:
0
2 [报告]
发表于 2008-06-01 21:07 |只看该作者
十分感谢!写得简练,讲得清楚!


不过这里
' --directory'' 选项告知 tar 在开始备份前首先跳到以下的档案路径 ( 在本例中是''/''目录 )。''
笔误吧?应该是/mnt!!

论坛徽章:
0
3 [报告]
发表于 2008-06-01 23:14 |只看该作者
非常好,支持原创!!

论坛徽章:
0
4 [报告]
发表于 2008-06-02 00:42 |只看该作者
谢谢二楼的兄弟,文档包括pdf已更新

论坛徽章:
0
5 [报告]
发表于 2008-06-03 16:20 |只看该作者
操作步骤还是很多,用dd多好呀,又省事又简单

论坛徽章:
0
6 [报告]
发表于 2008-06-03 20:51 |只看该作者
DD 不爽,有一次我朋友用DD 就把文件系统搞挂了。

论坛徽章:
0
7 [报告]
发表于 2008-06-03 20:55 |只看该作者
下载了,谢谢你的分享!

论坛徽章:
0
8 [报告]
发表于 2008-06-10 09:29 |只看该作者
使用的方式不同吧,其实这种方法,是有点像gentoo和arch的安装方式的。不同的是我没有编辑fstab这些系统必须的文件。

dd简单而又危险。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP