第八章 文件与文件系统的压缩、打包与备份
第八章 文件与文件系统的压缩、打包与备份
8.2 Linux系统常见的压缩指令
底下我们列出几个常见的压缩文件案扩展名吧:
- *.Z :compress程序压缩的文件
- *.zip :zip程序压缩的文件
- *.gz: gzip程序压缩的文件
- *.bz2: bzip2程序压缩的文件
- *.xz: xz程序压缩的文件
- *.tar: tar程序打包的数据,并没有压缩过
- *.tar.gz:tar程序打包的文件,其中并且经过gzip的压缩
- *.tar.bz2:tar程序打包的文件,其中并且经过bzip2的压缩
- *.tar.xz:tar程序打包的文件,其中并且经过xz的压缩
Linux上常见的压缩指令就是gzip,bzip2以及最新的xz,至于compress已经退流行了。
8.2.1 gzip,zcat/zmore/zless/zgrep
gzip可以说是应用度最广的压缩指令了!目前gzip可以解开compress,zip与gzip等软件所压缩的文件。
gzip [-cdtv#] 档名
选项与参数:
-c: 将压缩的数据输出到屏幕上,可透过数据流重导向来处理
-d: 解压缩的参数
-t: 可以用来检验一个压缩文件的一致性~看看文件有无错误
-v: 可以显示出文件/压缩文件案的压缩比等信息
-#: #为数字的意思,代表压缩等级,-1最快,但是压缩比最差,-9最慢,但是压缩比最好,预设是-6
当你使用gzip进行压缩时,在预设的状态下原本的文件会被压缩成为.gz的档名,源文件就不再存在了。此外,使用gzip压缩的文件在Windows系统中,竟然可以被WinRAR/7zip这个软件解压缩呢!很好用吧!
8.2.2 bzip2,bzcat/bzmore/bzless/bzgrep
bzip2是为了取代gzip并提供更佳的压缩比而来的。bzip2的用法几乎与gzip相同!
bzip2 [-cdkzv#] 档名
选项与参数:
-c: 将压缩的过程产生的数据输出到屏幕上!
-d: 解压缩的参数
-k: 保留原文件
-z: 压缩的参数(默认值,可以不加)
-v: 显示出原文件/压缩文件的压缩比等信息
-#:计算压缩比的参数,-9最佳,-1最快
8.2.3 xz,xzcat/xzmore/xzless/xzgrep
xz压缩比比bzip2更高
xz [-dtlkc#] 档名
选项与参数:
-d: 就是解压缩啊
-t: 测试压缩文件的完整性,看有没有错误
-l: 列出压缩文件的相关信息
-k: 保留原本的文件不删除~
-c: 同样的,就是将数据由屏幕上输出的意思
-#: 同样的,也有较佳的压缩比的意思!
8.3 打包指令:tar
8.3.1 tar
tar的选项与参数非常的多!我们只讲几个常用的选项,更多选项可以自行man tar
查询啰!
tar [-zjJ] [cv][-f 待建立的新档名] filename... <==打包与压缩
tar [-zjJ] [tv] [-f 既有的tar档名] <==察看档名
tar [-zjJ] [xv] [-f 既有的tar档名] [-C 目录] <==解压缩
选项与参数:
-c: 建立打包文件,可搭配-v来察看过程中被打包的档名
-t: 察看打包文件的内容含有哪些档名,重点在察看【档名】就是了
-x: 解打包或解压缩的功能,可以搭配-C在特定目录解开
-z: 透过gzip的支持进行压缩/解压缩
-j: 透过bzip2的支持进行压缩/解压缩
-J: 透过xz的支持进行压缩/解压缩
-v: 在压缩/解压缩的过程中,将正在处理的文件名显示出来
-f filename: 后面要立刻接要被处理的文件名!建议-f单独写一个选项啰!
-C: 这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项
其他后续练习会使用到的选项介绍:
-p: 保留备份数据的原本权限与属性,常用于备份重要的配置文件
-P: 保留绝对路径,亦即允许备份数据中含有根目录存在之意。
--exclue=FILE:在压缩的过程中,不要将FILE打包
其实最简单的使用tar就只要记忆底下的方式即可:
压缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
查询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
解压缩后的SELINUX课题
SELinux的权限问题【可能会让你的系统无法存取某些配置文件内容,导致影响到系统的正常使用权】。
这两天(2015/07)接到一个网友的email,他说使用鸟哥介绍的方法透过tar去备份了/etc的数据,然后尝试在另一部系统上面复原回来。复原倒是没问题,但是复原完毕之后,无论如何就是无法正常的登入系统!明明使用单人维护模式去操作系统时,看起来一切正常~但就是无法顺利登入。
其实这个问题倒是很常见!大部分原因就是因为/etc/shadow这个密码文件的SELinux类型在还原时被更改了!导致系统的登入程序无法顺利的存取它,才造成无法登入的窘境!
那如何处理呢?简单的处理方式有这几个:
- 透过各种可行的救援方式登入系统,然后修改/etc/selinux/config文件,将SELinux改成permissive模式,重新启动后系统就正常了;
- 在第一次复原系统后,不要立即重新启动!先使用
restorecon -Rv /etc
自动修复一下SELinux的类型即可。 - 透过各种可靠的方式登入系统,建立/.autorelabel文件,重新启动系统后会自动修复SELinux的类型,并且又会再次重新启动,之后就正常了!
鸟哥个人是比较偏好第2个方法,不过如果忘记了该步骤就重新启动呢?那鸟哥比较偏向使用第3个方案来处理。
8.4 XFS文件系统的备份与还原
使用tar通常是针对目录树系统来进行备份的工作,那么如果想要针对整个文件系统来进行备份与还原?由于CentOS已经使用XFS文件系统作为默认值,所以那个好用的xfsdump与xfsrestore两个工具对CentOS来说,就是挺重要的工具软件了。底下就让我们来谈一谈这个指令的用法吧!
8.4.1 文件系统备份 xfsdump
其实xfsdump的功能颇强!他除了可以进行文件系统的完整备份(full backup)之外,还可以进行累积备份(Incremental backup)喔!
另外,使用xfsdump时,请注意底下的限制喔:
- xfsdump不支援没有挂载的文件系统备份!所以只能备份已挂载的
- xfsdump必须使用root的权限才能操作(涉及文件系统的关系)
- xfsdump只能备份XFS文件系统
- xfsdump备份下来的数据只能让xfsrestore解析
- xfsdump是透过文件系统的UUID来分辨各个备份档的,因此不能备份两个具有相同UUID的文件系统喔!
xfsdump的选项虽然非常的繁复,不过如果只是想要简单的操作时,您只要记得底下的几个选项就很够用了!
xfsdump [-L S_label] [-M M_label] [-l #] [-f 备份档] 待备份资料
xfsdump -I
选项与参数:
-L:xfsdump会记录每次备份的session标头,这里可以填写针对此文件系统的简易说明
-M:xfsdump可以记录储存媒体的标头,这里可以填写此媒体的简易说明
-l: 是L的小写,就是指定等级~有0~9共10个等级(预设为0,即完整备份)
-f: 有点类似tar啦!后面接产生的文件,亦可接例如/dev/st0装置文件名或其他一般文件档名等
-I: 从/var/lib/xfsdump/inventory 列出目前备份的信息状态
范例:
df -h /boot # /boot是一个文件系统
xfsdump -l 0 -L boot_all -M boot_all -f /srv/boot.dump /boot
8.4.2 文件系统还原 xfsrestore
备份文件就是在急用时可以回复系统的重要数据,所以备份当然就得要学学如何复原了!
xfsrestore -I #用来查看备份文件资料
xfsrestore [-f 备份档] [-L S_label] [-s] 待复原目录 #单一文件全系统复原
xfsrestore [-f 备份文件] -f 待复原目录 # 透过累积备份来复原
xfsrestore [-f 备份文件] -i 待复原目录 # 进入互动模式
选项与参数:
-I: 可查询备份数据
-f: 后面接的就是备份档!
-L: 就是Session的Label name喔!
-s:需要接某特定目录,亦即仅复原某一个文件或目录之意
-r: 如果是用文件来储存备份数据,那这个就不需要使用。如果是一个磁带内有多个文件,需要这东西来达成累积复原
-i: 进入互动模式,进阶管理员使用的!一般我们不太需要操作它!
其他常见的压缩与备份工具
还有一些很好用的工具得要跟大家介绍介绍,尤其是dd这个玩意儿呢!
8.6.1 dd
dd可以读取磁盘装置的内容(几乎是直接读取扇区sector),然后将整个装置备份成一个文件呢!真的的相当的好用啊!dd的用途很多啦~我们仅讲一些比较重要的选项,如下:
dd if="input_file" of="output_file" bs="block_size" count="number"
选项与参数:
if: 就是input file啰~也可以是装置喔!
of: 就是output file喔~也可以是装置
bs: 规划的一个block的大小,若未指定则预设是512bytes(一个sector的大小)
counter: 多少个bs的意思