计算机系统在使用过程中,总有一天会运行失败。如果这台机器是服务器,可能会引起很大麻烦。公司可能会因此破产,因为丢失了重要数据。因此,对数据适当的备份是十分必要的。以下说明两种备份方案:使用tar备份文件,使用dd备份设备。
使用tar备份文件
命令行工具tar可能是linux下最流行的备份工具了。它作为独立工具,将备份写入归档文件。归档文件可以写到磁带上,不过现在一般写到文件中,另外,文件可以使用bzip2或者gzip压缩,也就是著名的tarball,这也是通用的交付软件安装文档的方式。以下说明如何创建归档以及如何提取归档。
创建归档文件
最简单的创建命令:
tar cvf mytar.tar test1/
该命令在当前目录下创建mytar.tar文件,文件内容是test1目录及其下面的所有文件。其中:
- c(create)是创建;
- v(verbose),将输出归档的文件和目录名称,不是必须的,但是建议一直使用这个参数,这样可以看到建档的过程,尤其是当归档过程很长的时候;
- f(file),指定归档到哪里,如果不设置,默认是归档输出到控制台,设置为f指定归档到文件。
在归档时增加压缩:
- z:使用gzip工具压缩,这是最普遍的压缩工具,因为有比较合适的压缩比率,而且创建文件的时间不是很长,创建的文件扩展名为gz;
- j:使用bzip2压缩,该工具比gzip高10%-20%压缩比率,但是要付出至少双倍的创建文件时间,创建的文件扩展名为bz2。
提取归档文件
提取tar文件到当前目录:
tar -xvf /file.tar
提取压缩的tar文件到当前目录:
tar -zxvf /file.tar.gz
提取tar文件到指定目录下:
tar -xvf /file.tar C /somedir
移动完整的目录
大多数时间,tar用于将一个或者多个目录备份到一个文件中。不过,因为它出色的处理特定文件的能力(比如通过数据库确定过时的文件),tar也常用于移动目录。一种做法是先创建一个临时文件,然后提取临时文件到新的目录。这不是最简单的做法,因为这需要两倍的磁盘空间:原始目录的空间+临时文件的空间。而使用管道,可直接将一个目录中的内容送到另外的目录中。
tar -cC test1/ . | tar -vxC newtest/
- c:创建归档文件;
- C:归档时不包括该目录,比如文件test1/readme.txt归档为readme.txt,不包括test1/目录;
- 因为未使用f参数,归档到标准输出;
- 使用管道重定向所有输出到另外的命令;
- xC:提取标准输出的内容,并输入到newtest目录中,该目录必须已经存在。
创建增量备份
创建对多个目录的备份:
tar cvf test.tar new_test/ test1/
每次备份整个目录内容可能比较慢,可以通过增量备份改善性能。增量备份的基础是完整备份。
创建一个全备份和一个快找文件,快照文件包含所有备份文件的列表:
tar czvg backup/snapshot-file -f backup/full-backup.tar.gz test1/
backup目录要求已经存在。有了完全备份,就可以进行增量备份了,比如:
tar czvg backup/snapshot-file -f backup/monday-bak.tar.gz test1/
这条命令将只备份全备份以后test1目录下修改或者新增的文件和目录。
如上所示,将有两个备份文件,恢复的过程是分别提取备份文件,从全备份开始,然后用增量备份做覆盖:
tar xzvf full-backup.tar.gz
tar xzvf monday-bak.tar.gz
使用dd备份设备
tar无法完整的备份设备,只能用于文件系统。dd正是用于备份设备。dd是convert and copy的所写,本应该为cc,可是该命令已经存在了,所以才有这么个奇怪的名字。
dd命令使用很简单,因为只有两个参数if和of,分别用于设置输入和输出参数。dd命令可用于文件的复制:
dd if=php.ini of=dd.ini
不过dd的主要作用还是完整的复制设备。比如将光驱复制为iso文件:
dd if=/dev/cdrom of=/mycd.iso
然后,可以mount该文件为光驱:
mount -o loop /mycd.iso /mnt
在比如,可以将第一块磁盘克隆到第二块磁盘:
dd if=/dev/sda of=/dev/sdb
该命令需要花费一些时间,比如几个小时,而且将会擦除sdb设备原有数据。