Ubuntu如何备份和恢复系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Ubuntu如何备份和恢复系统
在使⽤Ubuntu之前,相信很多⼈都有过使⽤Windows系统的经历。
如果你备份过Windows系统,那么你⼀定记忆犹新:⾸先需要找到⼀个备份⼯具(通常都是私有软件),然后重启电脑进⼊备份⼯具提供的软件环境,在这⾥备份或者恢复Windows系统。
Norton Ghost是备份Windows系统时经常使⽤的备份⼯具。
在备份Windows系统的时候你可能想过,我能不能把整个C盘都放到⼀个ZIP⽂件⾥去呢。
这在Windows下是不可能的,因为在Windows中有很多⽂件在它们运⾏时是不允许拷贝或覆盖的,因此你需要专门的备份⼯具对Windows系统进⾏特殊处理。
和备份Windows系统不同,如果你要备份Ubuntu系统(或者其它任何Linux系统),你不再需要像Ghost这类备份⼯具。
事实上,Ghost 这类备份⼯具对于Linux⽂件系统的⽀持很糟糕,例如⼀些Ghost版本只能完善地⽀持Ext2⽂件系统,如果你⽤它来备份Ext3⽂件系统,你可能会丢失⼀些宝贵的数据。
1. 备份系统
我该如何备份我的Ubuntu系统呢?很简单,就像你备份或压缩其它东西⼀样,使⽤TAR。
和Windows不
同,Linux不会限制root访问任何东西,你可以把分区上的所有东西都扔到⼀个TAR⽂件⾥去!
⾸先成为root⽤户:
$ sudo su
然后进⼊⽂件系统的根⽬录(当然,如果你不想备份整个⽂件系统,你也可以进⼊你想要备份的⽬录,包括远程⽬录或者移动硬盘上的⽬录):
# cd /
下⾯是我⽤来备份系统的完整命令:
# tar cvpzf backup.tgz –exclude=/proc –exclude=/lost+found –exclude=/backup.tgz –exclude=/mnt –exclude=/sys /
让我们来简单看⼀下这个命令:
“tar”当然就是我们备份系统所使⽤的程序了。
“cvpfz”是tar的选项,意思是“创建档案⽂件”、“保持权限”(保留所有东西原来的权限)、“使⽤gzip来减⼩⽂件尺⼨”。
“backup.gz”是我们将要得到的档案⽂件的⽂件名。
“/”是我们要备份的⽬录,在这⾥是整个⽂件系统。
在档案⽂件名“backup.gz”和要备份的⽬录名“/”之间给出了备份时必须排除在外的⽬录。
有些⽬录是⽆⽤的,例如“/proc”、“/lost+ found”、“/sys”。
当然,“backup.gz”这个档案⽂件本⾝必须排除在外,否则你可能会得到⼀些超出常理的结果。
如果不把“/mnt”排除在外,那么挂载在“/mnt”上的其它分区也会被备份。
另外需要确认⼀
下“/media”上没有挂载任何东西(例如光盘、移动硬盘),如果有挂载东西,必须把“/media”也排除在外。
有⼈可能会建议你把“/dev”⽬录排除在外,但是我认为这样做很不妥,具体原因这⾥就不讨论了。
执⾏备份命令之前请再确认⼀下你所键⼊的命令是不是你想要的。
执⾏备份命令可能需要⼀段不短的时间。
备份完成后,在⽂件系统的根⽬录将⽣成⼀个名为“backup.tgz”的⽂件,它的尺⼨有可能⾮常⼤。
现在你可以把它烧录到DVD上或者放到你认为安全的地⽅去。
在备份命令结束时你可能会看到这样⼀个提⽰:’tar: Error exit delayed from previous errors’,多数情况下你可以忽略它。
你还可以⽤Bzip2来压缩⽂件,Bzip2⽐gzip的压缩率⾼,但是速度慢⼀些。
如果压缩率对你来说很重要,那么你应该使⽤Bzip2,⽤“j”代替命令中的“z”,并且给档案⽂件⼀个正确的扩展名“bz2”。
完整的命令如下:
# tar cvpjf backup.tar.bz2 –exclude=/proc –exclude=/lost+found –exclude=/backup.tar.bz2 –exclude=/mnt –exclude=/sys /
2. 恢复系统
在进⾏恢复系统的操作时⼀定要⼩⼼!如果你不清楚⾃⼰在做什么,那么你有可能把重要的数据弄丢,请务必⼩⼼!
接着上⾯的例⼦。
切换到root⽤户,并把⽂件“backup.tgz”拷贝到分区的根⽬录下。
在 Linux中有⼀件很美妙的事情,就是你可以在⼀个运⾏的系统中恢复系统,⽽不需要⽤boot-cd来专门引导。
当然,如果你的系统已经挂掉不能启动了,你可以⽤Live CD来启动,效果是⼀样的。
你还可以⽤⼀个命令把Linux 系统中的所有⽂件⼲掉,当然在这⾥我不打算给出这个命令!
使⽤下⾯的命令来恢复系统:
# tar xvpfz backup.tgz -C /
如果你的档案⽂件是使⽤Bzip2压缩的,应该⽤:
# tar xvpfj backup.tar.bz2 -C /
注意:上⾯的命令会⽤档案⽂件中的⽂件覆盖分区上的所有⽂件。
执⾏恢复命令之前请再确认⼀下你所键⼊的命令是不是你想要的,执⾏恢复命令可能需要⼀段不短的时间。
恢复命令结束时,你的⼯作还没完成,别忘了重新创建那些在备份时被排除在外的⽬录:
# mkdir proc
# mkdir lost+found
# mkdir mnt
# mkdir sys
等等
当你重启电脑,你会发现⼀切东西恢复到你创建备份时的样⼦了!
Linux备份策略研究
世界上没有绝对安全的系统。
如果想获得绝对安全的系统,只有不连接⽹络,不让管理员之外的⼈使⽤,刷卡管制⼈员进出,使⽤监视器监视录像,甚⾄于不要开机。
但是这是完全不切实际的,我们仅能寄望尽量让系统能在承担低风险的情况下⼯作,因为任何操作系统都不可能毫⽆漏洞。
那么怎样才能让系统承担最低的风险呢?回答因该是在保障系统尽量安全的基础上,做好各个系统上的数据备份⼯作。
⼀旦系统遭受到毁灭性的打击,可将平时做好的备份数据及时恢复,这样才能使被破坏的系统迅速恢复正常,以避免不必要的损失。
下⾯针对Linux操作系统上的数据备份⽅法发表⼀下⾃⼰的看法。
数据备份种类
总的来说,在Linux操作系统中将备份分为两类:系统备份,实现对操作系统和应⽤程序的备份;⽤户备份,实现对⽤户⽂件的备份。
在下⾯我们会看到,系统备份和⽤户备份是不同的。
系统备份
系统备份就是对操作系统和应⽤程序的备份,进⾏系统备份的原因是尽量在系统崩溃以后能快速简单完全地恢复系统的运⾏。
进⾏备份的最有效⽅法是仅仅备份那些对于系统崩溃后恢复所必需的数据。
Linux系统中很多重要的⽂件位于/etc⽬录之下,如:
/etc/group : 组⽤户信息;
/etc/passwd : 包含所有的⽤户信息,如密码,登录shell等;
/etc/fstab : 配置系统有哪些⽂件系统;
/etc/inittab : 配置init在不同运⾏级别下分别如何启动系统;
/etc/hosts : 域名解析的配置信息;
/etc/inetd.conf : 进程控制信息;
/etc/printcap:配置如何与打印机通信;
/etc/XF86Config:包含XFree86的初始配置;
上⾯这些重要的配置⽂件都需要定期的做备份。
不同的系统可能有很多重要配置⽂件,可以看到/etc⽬录下的配置⽂件⾮常重要。
当然,某些程序使⽤了其他⽬录下的⼀些⽂件,但是Linux的基本配置⽂件绝⼤多数都位于/etc⽬录下。
很多⼈曾经花费了好长时间才正确的配置了XF86Config⽂件,想到如果重新再做⼀遍,就很费时费⼒。
再举个例⼦, /etc⽬录下的passwd⽂件,如果误操作,将此⽂件更改,或删除了,则整个系统⽤户⽆法正常登录,如果定期或及时的对其备份,遇到上⾯的情况后,就可以⾮常快速的恢复。
如果修改了某个程序所使⽤的配置⽂件,⼀般不能将其搬移到其它的地⽅,因为程序通常在固定的地⽅寻找配置⽂件。
因此记录对系统所做的修改也⾮常重要,⽆论所做的修改如何⼩,当系统崩溃时才能轻松的恢复系统。
⽤户备份
⽤户备份不同于系统备份,因为⽤户的数据变动更加频繁⼀些。
当备份⽤户数据时,只是为⽤户提供⼀个虚拟的安全⽹络空间,合理的放置最近⽤户数据⽂件的备份,当出现任何问题,例如,误删除某些⽂件或者硬盘发⽣故障时,⽤户可以恢复⾃⼰的数据。
⽤户备份应该⽐系统备份更加频繁,也许每天都需要进⾏备份,或使⽤cron程序⾃动定期运⾏某个程序的⽅法来备份数据。
数据备份策略
不管系统多么可靠,总会发⽣⼀些意想不到的事情,致使系统数据丢失。
因此使⽤备份来保护数据不丢失是⼀种⾮常重要的⼿段,尤其在系统数据⾮常重要的时候。
经常进⾏数据备份能够减少偶然破坏造成的损失,保证系统能够从错误中恢复正常运⾏。
备份不应该成为⼀个长时间痛苦的事情,但它是作为系统管理必不可少的⼯作,在着⼿之前进⾏详细的考虑和计划是应该的。
在进⾏备份之前,⾸先要选择合适的备份策略,这将决定何时需要备份,以及出现故障时进⾏恢复的⽅式。
通常使⽤的备份⽅式有三种:
完全备份:每隔⼀定时间就对系统进⾏⼀次全⾯的备份,这样在备份间隔期间出现数据丢失等问题,可以使⽤上⼀次的备份数据恢复到前次备份时数据状况。
这是最基本的备份⽅式,但是每次都需要备份所有的数据,并且每次备份的⼯作量也很⼤,需要⼤量的备份介质,因此这种备份不能进⾏的太频繁,只能每隔⼀段较长时间才进⾏⼀次完整的备份。
但是这样⼀旦发⽣数据丢失,只能恢复到上次备份的数据,这期间内更新的数据就有可能丢失。
增量备份:⾸先进⾏⼀次完全备份,然后每隔⼀个较短时间进⾏⼀次备份,但仅仅备份在这个期间更改的内容。
当经过⼀个较长的时间后再重新进⾏⼀次完全备份,开始前⾯的循环过程。
由于只有每个备份周期进⾏⼀次完全备份,其他只进⾏更新数据的备份,因此⼯作量⼩,可以进⾏频繁的备份。
例如以⼀个⽉为⼀个周期,⼀个⽉进⾏⼀次完全备份,每天晚上0点进⾏这⼀天改变的数据备份。
这样⼀旦发⽣数据丢失,⾸先恢复到前⼀个完全备份,然后按⽇期⼀个⼀个恢复每天的备份,就能恢复到前⼀天的情况。
这种备份⽅法⽐较经济。
累计备份:这种备份⽅法与增量备份相似,⾸先每⽉进⾏⼀次完全备份,然后每天进⾏⼀次更新数据的备份。
但不同在于,增量备份是备份该天更改的数据,⽽累计备份是备份从上次进⾏完全备份后更改的全部数据⽂件。
⼀旦发⽣数据丢失,可以使⽤前⼀个完全备份恢复到前⼀个⽉的状态,再使⽤前⼀个累计备份恢复到前⼀天的情况。
这样做的缺点是每次做累计备份⼯作的任务⽐增量备份的⼯作量要⼤,但好处在于,增量备份每天都备份,因此要保存数据备份数量太多,⽽累计备份则不然,只需保存⼀个完全备份和⼀个累计备份就可以恢复故障以前的状态。
另外在进⾏恢复⼯作时,增量备份要顺序进⾏多次备份的恢复,⽽累计备份只需两次恢复,因此它的恢复⼯作相对简单。
增量备份和累计备份都能以⽐较经济的⽅式对系统进⾏备份,在这些不同的策略之间进⾏选择不但与系统数据更新的⽅式相关,也依赖于管理员的习惯。
通常在系统数据更新不是太频繁的话,可以选⽤更新备份的⽅式。
但是如果系统数据更新太快,使每个备份周期后的⼏次累计备份的数据量相当⼤。
这时候可以考虑增量备份或混⽤累计备份和增量备份的⽅式,或者缩短备份周期。
数据备份命令
在Linux系统中常⽤的备份命令通常有下⾯⼏种:
1.使⽤tar命令
Linux的实⽤程序tar最初是为了制作磁带存档⽽设计的(把⽂件和⽬录复制到磁带中,然后从存档中提取或恢复⽂件),⽽现在的应⽤中可以把它⽤于任何设备,它是数据备份中最常⽤的命令之⼀。
下⾯具体介绍tar命令的使⽤⽅法:
(1)格式:tar 参数 ......
(2)参数:
c:创建备份(Create)
v:表⽰回显模式(Verbose),将产⽣⼀系列备份的⽂件列表
f:指定使⽤的备份⽂件,它后⾯的参数为输出的备份⽂件名
x:展开备份⽂件
t:显⽰备份⽂件的内容
T:后⾯跟随⼀个⽂件参数,指定从这个⽂件中读取要备份的各个⽂件的路径。
如果不使⽤T参数,那么就需要⼀个参数,指明进⾏备份⽂件和⽬录的路径
Z:使⽤压缩⽅式创建和解开备份⽂件,这是GNU的新版tar的功能,需要同时安装gzip。
例如:
$ tar cvf backup.tar /etc
上⾯的命令将/etc下的所有⽂件打包成tar存档⽂件backup.tar。
tar的第⼀个参数“cvf”,是tar的命令参数,“c”告诉tar创建⼀个存档⽂件;“v”选项迫使tar采⽤冗长模式,即在存档时打印每个⽂件名;“f”选项告诉tar下⼀个参数backup.tar是创建的存档⽂件名。
下⾯⼀⾏的命令将tar⽂件backup.tar解开并放到当前⼯作⽬录下。
必须说明的是这样做是有危险的,因为在从tar ⽂件中解开⽂件时,旧⽂件将被覆盖。
$ tar xvf backup.tar
在解开tar⽂件之前,知道在何处打开⽂件是⾮常重要的。
例如,假设存档以下⽂件:/etc/hosts,/etc/group
和/etc/passwd。
如果⽤下述命令:
$ tar cvf backup.tar /etc/hosts /etc/group /etc/passwd
⽬录/etc会被加到每个⽂件名前。
为了将⽂件展开到正确位置,需要⽤下述命令:
$ cd /
$ tar xvf backup.tar
这是因为⽂件从存档⽂件中抽取出路径名,如果⽤下述命令存档⽂件:
$ cd /etc
$ tar cvf hosts group passwd
这样⽬录名就不存在存档⽂件中,因此需要在展开⽂件之前⽤“cd /etc”命令进⼊⽬录etc。
由此可见,tar⽂件的创建⽅式与在何处展开有很⼤关系。
命令:
$ tar tvf backup.tar
在解开tar⽂件之前显⽰tar⽂件的索引,⽤这种⽅式可以看到存档⽂件中与⽂件名有关的⽬录名,从⽽在正确位置上展开存档⽂件。
2.gzip和compress 命令
与MS-DOS的存档程序不同, tar在存档过程中并不压缩⽂件。
因此,如果存储两个1MB的⽂件,那么tar⽂件⼤⼩为2MB,gzip命令⽤来压缩⽂件(被压缩的⽂件并不需要是tar格式)。
例如:
$ gzip -9 backup.tar
压缩backup.tar⽂件,产⽣的⽂件为backup.tar.gz,开关“-9”告诉gzip⽤最⾼的压缩⽐。
gunzip命令⽤来解开⼀个gzip压缩的⽂件,⽤“gzip -d”也可以达到同样效果。
例如:
$ gunzip backup.tar.gz
$ gzip -d backup.tar.gz
3. 联合使⽤
介绍了这些命令之后,我们来尝试组合使⽤这些命令。
为了压缩存储⼀组⽂件,可以⽤下述命令:
$ tar cvf backup.tar /etc
$ gzip -9 backup.tar
结果是形成⽂件backup.tar.gz。
展开该⽂件时,⽤相反的命令:
$ gunzip backup.tar.gz
$ tar xvf backup.tar
tar命令还包括“z”选择项,它会⾃动采⽤gzip压缩算法来联机压缩/解压⽂件。
例如,下列命令:
$ tar cvfz backup.tar.gz /etc
上⾯⼀⾏的命令等价于:
$ tar cvf backup.tar /etc
$ gzip backup.tar
⽽命令:
$ tar xvfz backup.tar.Z
可以⽤来代替下述命令:
$ uncompress backup.tar.Z
$ tar xvf backup.tar
案例实验
案例:使⽤tar进⾏备份。
选定了备份⽅式之后,可以使⽤tar、cpio、dump等备份⼯具软件将数据备份到磁带上。
对于⼀般的备份,使⽤tar就⾜够了。
tar能够创建备份⽂档,能够备份到磁带上或者产⽣⼀个⽂件,如:
$ tar cvf root.tar /root
将/root⽬录下的所有⽂档备份到root.tar⽂件中,root.tar为指定输出的备份⽂件,/roo t指出要做备份的⽬录。
如果要备份到磁带上,将输出的备份⽂件指定为磁带设备⽂件即可:
$ tar cvf /dev/rmt/0h /root
如果设置了环境变量TAPE,则可以不使⽤选项“f”指定输出磁带设备名字:
$ TAPE=/dev/rmt/0h; export TAPE
$ tar cv /root
要进⾏增量备份,必须找出哪些⽂件在这个期间进⾏更新。
这个任务可以由命令find来完成,例如查找过去七天更改的⽂件,并使⽤tar的“-T”参数制定进⾏备份的⽂件,命令如下:
$ find / -mtime -7 -print > /tmp/filelist
$ tar -c -T /tmp/filelist -f /dev/rmt/0h
由于要使⽤find来找出需要备份的⽂件列表,那么就需要利⽤⽂件的修改时间进⾏查询,需要使⽤“-mtime” 参数。
另⼀个更有⽤的参数是“-newer”,可以查找出所有⽐某个⽂件更新的⽂件,由于备份是周期进⾏的,因此可
以在完全备份之后⽣成⼀个标记⽂件,那么所有⽐这个⽂件新的⽂件都需要进⾏更新备份。
$ find / -newer full_back_tag_file -print > /tmp /filelist
进⾏数据备份需要定期执⾏,不能完全依赖于管理员⼿⼯进⾏备份。
备份也应该选择在系统⽐较空闲时进⾏,以免影响系统的正常处理任务。
通常可以选择半夜 0:00点之后进⾏备份,这样更不能将这个任务由管理员⼿⼯完成了。
但Linux提供了定时服务cron程序,能够在确定的时间中执⾏⼀系列任务,因此数据备份必须和cron合作来完成,或者使⽤/etc下的daily,weekly,monthly⽂件做定时备份的操作。