在 使用Ubuntu以前,相信不少人都有过使用Windows系统的经历。若是你备份过Windows系统,那么你必定记忆犹新:首先须要找到一个备份工 具(一般都是私有软件),而后重启电脑进入备份工具提供的软件环境,在这里备份或者恢复Windows系统。Norton Ghost是备份Windows系统时常用的备份工具。 算法
在备份Windows系统的时候你可能想过,我能不能把整个C盘都放到一个ZIP文件里去呢。这在Windows下是不可能的,由于在Windows中有不少文件在它们运行时是不容许拷贝或覆盖的,所以你须要专门的备份工具对Windows系统进行特殊处理。 shell
和 备份Windows系统不一样,若是你要备份Ubuntu系统(或者其它任何Linux系统),你再也不须要像Ghost这类备份工具。事实上,Ghost 这类备份工具对于Linux文件系统的支持很糟糕,例如一些Ghost版本只能完善地支持Ext2文件系统,若是你用它来备份Ext3文件系统,你可能会 丢失一些宝贵的数据。 安全
1. 备份系统 网络
我该如何备份个人Ubuntu系统呢?很简单,就像你备份或压缩其它东西同样,使用TAR。和Windows不一样,Linux不会限制root访问任何东西,你能够把分区上的全部东西都扔到一个TAR文件里去! 工具
首先成为root用户:
$ sudo su spa
而后进入文件系统的根目录(固然,若是你不想备份整个文件系统,你也能够进入你想要备份的目录,包括远程目录或者移动硬盘上的目录):
# 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系统中不少重要的文件位于/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文件作定时备份的操做