第九章 打包备份
9.1 文件打包
9.1.1 打包命令
与windows下的winrar工具类似,Linux中也有文件打包压缩的命令,我们先来看一下windows的打包命令:tar。
假设/mnt/下有f1 f2 f3 f4四个文件,那么打包的命令是:
tar -cvf back.tar f1 f2 f3 ---将列出文件打包到包文件
参数解释:-c 创建包文件,后面的back.tar就是新创建出的包文件
-v 即--verbose 详细列出处理的文件
-f 使用归档文件,即新建的备份文件做备份
打包成功后,我们可以ll看到包文件是以红色现实的。那么如果过段时间后,我们忘记了这个包文件里是什么内容了,该如何查看呢?可以使用如下命令:
tar -tf back.tar ---查看包文件的内容,但并不解包。
既然可以打包、查看,那么如果想解包呢?命令如下:
tar -xvf back.tar ---解包,默认把解包后的文件,存放到当前目录下,注意,若当前目录下有重名文件,则直接覆盖,无提示。所以解包时必定要关注一下当前目录下的内容。为了安全,想要解包到一个空目录下,可以增加-C参数,如下:
tar -xvf back.tar -C /mnt/dd --- -C 指定解包路径
另外,关于文件的后缀,我们需要解释一下,后缀对于文件来讲,并不能决定、影响文件的存储格式,不写后缀,文件一样可以正常原方式使用。所以给文件增加后缀的目的是区分文件的类型,便于长期的管理,所以建议文件加上后缀。
其他,tar还有很多参数,常用的如下:
tar -uf back.tar f4 ---包中加入文件
tar -f back.tar --delete f1 ---包中删除指定文件
tar -f back.tar --get f2 f3 ---从包中提取出指定的文件
tar -Af back1.tar back2.tar ---把第二个包文件合并到第一个中
tar -cvf back.tar f1 f2 f3 --remove-files --- 包文件创建完毕,删除原文件
9.1.2 文件压缩
打包后的文件,我们可以ls -l 查看一下,会发现包文件比多个源文件的大小总和还大,说明包文件并非是压缩的。Linux中有专门的压缩命令:gzip。
gzip back.tar ---压缩文件,压缩后,后缀增加.gz
gunzip back.tar.gz ---解压缩
再者,Linux中还支持其他的压缩、解压命令,如:bzip、bunzip,compress、uncompress等,但这些命令可能在装系统时并未安装,所以若要使用,需要手动安装其软件包。Linux系统中自动安装的压缩命令是gzip,使用率也较高。兼容性也好,该压缩包复制到windows中后,使用winrar可以加压出来。
之前我们介绍了打包和压缩命令,但是会感觉有些复杂,若要把多个文件打包压缩到一个压缩包中,需要执行两个命令才行(先tar在gzip)。其实,tar本身是支持打包压缩一步完成的,如下:
tar -zcvf back.tgz f1 f2 f3 ---打包压缩一步完成,实质上内部的处理过程还是先打包后压缩,后缀 .tgz = .tar.gz
tar -zxvf back.tgz ---解压解包,也可以加-C参数指定解包路径
9.2 数据备份
对于我们用户来讲,最重要的莫过于个人的文件、数据等。这些资料为了防止丢失,一般我们会定期的做备份。Linux中也有关于数据备份的命令,我们逐一来看。
9.2.1 制作光盘镜像
首先,我们可以把重要资料所在的目录制作成光盘镜像,刻录到光盘中或存储到专用的备份磁盘中。制作镜像的命令如下:
genisoimage -J -L -r -o /mnt/etc.iso /etc
---备份整个/etc/目录,生成镜像文件etc.iso,保存到/mnt下
参数解释:-J 备份符合Joliet命名规范的文件或目录 -L 备份隐藏文件
-r 开放所有文件的读权限 -o 指定输出的文件,即指定生成的镜像。
其实,Linux中对于文件、目录的命名也是有规范的,只是格式要求比较宽松,一般我们所起的文件名都是符合要求的,Linux中对于文件名格式的要求就是Joliet规范。再者,备份时若有文件权限拒绝读取,则会有文件遗漏,所以加上-r参数便允许备份时能够读取所以文件。
有了备份镜像后,若我们想要查找、恢复数据,则可以找到镜像文件,把它当做光盘一样直接挂载使用:
mount /mnt/etc.iso /media ---镜像文件可以直接当做光驱挂载使用
注:老版的Linux需用命令:mount /mnt/etc.iso /media -o loop ,参数 -o loop 参数表示采用伪设备挂载。因为此处的镜像文件,并不是真正的光驱设备,我们称之为:伪设备。在老版的Linux中(如RHEL5.0之前版本),需要手动增加 –o loop参数才可以以伪设备方式挂载,但是现在的Linux系统基本都可兼容识别过去。
9.2.2 数据导出
除了制作镜像,Linux中还有一个功能非常强大的数据导出命令:dd。而且导出数据后,原设备或文件是不会删除或改变的。可实现任何设备或文件到任何设备或文件的数据导出工作。
命令格式:dd if=源设备/文件 of=目标设备/文件 bs=每次导多大的数据量 count=导多少次
案例如下:
dd if=f1 of=f2 ---把f1文件导入到f2中,相当于复制文件
dd if=f1 of=f2 bs=1 count=3 ---导入3次,每次1字节
dd if=/dev/sda3 of=/mnt/f1 ---用文件存储整个分区数据
dd if=/dev/sda3 of=/dev/sdb1 ---拷贝整个分区
dd if=/dev/sda of=/dev/sdb ---拷贝整个磁盘
dd if=/dev/zero of=/mnt/f1 bs=100M count=5
---创建一个500M的全0文件
注:/dev/zero 并非是真正的设备,类似于程序,功能是无限生成二进制的0
dd if=/dev/zero of=/dev/sdb2 bs=100M count=1
---擦除分区前100M空间,多用于分区无法格式化时,先擦除再格式化。
9.2.3 系统备份
关于Linux系统的备份,可以有多种方式,总结汇总,生产环境中主要有两种比较常用,一是使用ghost软件,对整个系统磁盘做备份镜像,一般镜像文件后缀是.gho。可能经常接触系统安装的读者对ghost会比较熟悉,不太熟悉的读者可以查看搜索相关资料,因为ghost属于专项工具软件,与Linux系统操作关系不大,这里不做展开介绍。
第二种方法是使用dd命令,将整个系统所在磁盘导出到另一块磁盘中,以作备份盘使用,当系统故障后,可以直接将备份盘中的数据再用dd导回即可,此种操作的缺点是系统所在磁盘未经压缩,占磁盘空间多。
9.2.4 数据备份的概念
提到数据备份,就不得不说一下数据备份方面的一些概念,其实数据管理在生产环境中更多的是由数据库管理员(DBA)或存储管理岗的人员操作,系统运维人员更多的是辅助、配合。但了解这些概念会更利于运维人员与其他岗位人员的协同、沟通。
首先来看一下备份的分类:
完全备份 ---备份所有数据,简称全备
差异备份 ---备份和上一次全备之间发生的变化数据
增量备份 ---备份和上一次备份操作之间发生的变化数据
累计增量备份 ---备份多次备份操作的变化总和
之上,我们使用较白话的形式解释了下各个概念,但读者们可能还是不太清楚,没关系,后面我们会有一个案例来帮助大家理解。
再来看一下备份的级别划分
备份共有10级,数字表示是0-9级
0级 表示完全备份
1级 表示备份和上一次0级之间的变化
2级 备和1级的变化,或者备份最近一次比本级别数字小的备份之后的变化
3-9级 同理
有了备份级别,在生产环境中对重要的数据都需要制定周期性的备份方案,又称备份策略。下面举一个示例为大家解释下:
周日晚 0级备 即完全备份
周一晚 2级备 即差异备
周二晚 2级备 即差异备
周三晚 1级备 即差异备
周四晚 2级备 即增量备
周五晚 2级备 即累计增量备
周六晚 2级备 即累计增量备
案例中的备份策略是以一周为一个周期,每天进行不同级别的备份。分析:周一晚做2级备,它会向前寻找1级备份,但是由于最近的一次操作是0级,且级别数字小,所以就会直接备和周日0级备份之后的变化数据,即周一一天内的变化数据,可视为差异备;同样,周二晚做2级备份时,向前也找到周日晚的0级备操作(因为周一的2级与周二的2级同级,同级间不会做备份),所以周二晚也是备与周日0级备之后产生的变化数据,即周一周二两天的变化,也即是差异备;可以试想一下,若周三一早发生数据丢失,则恢复数据时,需要先恢复周日晚的0级数据,再恢复周二晚的2级数据即可,总共执行2此恢复操作。
继续分析,周三晚故意制定为1级备份,则它备份的还是与周日0级备之后的变化数据,仍是差异备;而周四晚做2级备,会备与周三晚1级备之后的变化数据,即仅备周四一天的变化数据,因为上一次的周三不是完全备操作,所以周四的备份可视为增量备份,再试想,若周五早发生数据丢失,则恢复数据时,需要先恢复周日晚的0级数据,再恢复周三晚的1级数据,再恢复周四晚的2级数据即可,总共执行3此恢复操作;周五晚的2级备份也是备与周三1级备之后的变化,因为集结了两天变化的总和所以视为累计增量备;周六的备份与周五类似。
以上案例,我们可以看到,一周内备份最多时会备份3天变化的总和,数据量并不会很大;并且恢复时,最多的也是执行3次恢复即可,次数也不多,所以此种策略较为合理。读者们可以仔细阅读与思考,理解备份分类、级别、策略的功能与具体应用。
9.2.5 数据备份实验案例
Linux中有一款用于数据备份工具软件,是dump,下面我们来看一下dump的配置过程:
1、新建分区,做备份用
fdisk -l ---查看分区表,可见磁盘名,如:/dev/sda
fdisk /dev/sda ---使用fdisk工具,对sda磁盘做分区管理
n =>创建新分区,全部默认回车=>w 保存退出
fdisk -l ---可见到新的分区
partprobe ---刷新并生效新的分区表
mkfs -t ext4 /dev/sda7 ---格式化新分区
注:用于做备份的分区,无需挂载
我们在第一章安装系统时,故意有一部分磁盘空间是未使用的,所以这里新建分区是可以成功,但是如果磁盘已经被所有分区用满,则此操作会失败。
关于fdisk磁盘分区工具的操作过程,我们将在下一章中详细介绍。这里先按此步骤操作即可。
2、安装dump工具
挂载系统光盘后,cd /media/Packages
rpm -ivh rmt-XXX.rpm ---依赖包
rpm -ivh dump-0.XXXX.rpm ---程序包
tips:直接安装dump包时会报依赖于rmt包,这时不必急着用yum去解决,因为仅仅有一两个依赖包的话完全可以用rpm逐一安装解决,没有必要费时费力的去配置yum。所以,Linux的操作一定要灵活,不必拘泥于形式,命令是为我们服务的,不能被命令牵着鼻子走,思想就被固化了,选择效率最高的方法解决问题才是最重要的。
3、指定要做备份的分区
df -h ---查看当前的分区挂载,假设要备份/dev/sda5挂载的/home
这里,我当前的虚拟机分区挂载是这样的,读者可根据自己的虚拟机分区信息选择实验分区
cd /home
touch f1 f2 f3
mkdir d1 d2 d3
touch d2/f4 ---创建文件、目录,以备实验使用
dump -0 -u -f /dev/sda7 /home
---备份/home所对应的分区,把数据备份到/dev/sda7中 -0 零,表示备份级别 -u 表示备份后做日志记录,日志文件:/etc/dumpdates -f 指定备份的分区,后面的/home 即是要做备份的分区挂载点
dump -W ---查看备份日志
4、数据恢复
restore -tf /dev/sda7 ---查看备份设备中的文件
restore -rf /dev/sda7 ---恢复所有文件到当前目录下
restore -xf /dev/sda7 f1 f2 d1 d2
---恢复指定文件,回车后,会有询问,输入1 回车,输入y 回车即可
小结:dump备份工具,其实生产环境中使用并不是很多,关于应用类数据的备份,大多是用应用软件自带的备份工具备份的,如:oracle的rman等。这里我们的dump实验主要是为了让读者们练习,加深理解用的。