Lunix文件的压缩打包与备份

1 压缩原理与优势

1.1 压缩原理

为了要满足目前我们的操作系统数据的存取,所以就会将该数据转为 byte 的型态来记录,而本身计算机是以二进制运行的。假设一个字节当中, 1 会在最右边占据 1 个 bit ,而其他的 7 个 bits 将会自动的被填上 0 !但其实那 7 个 bits 应该是『空的』才对!一些聪明的计算机工程师就利用一些复杂的计算方式, 将这些没有使用到的『丢』出来,以让文件占用的空间变小!这就是压缩的技术!

另外一种压缩技术也很有趣,他是将重复的数据进行统计记录的。举例来说,如果你的数据为『111....』共有 100 个 1 时, 那么压缩技术会记录为『100 个 1』而不是真的有 100 个 1 的位存在!这样也能够精简文件记录的容量! 

1.2 优势

经过『压缩』与『解压缩』,文件容量变小, 你的硬盘容量无形之中就可以容纳更多的资料。此外,在一些网络数据的传输中,也会由于数据量的降低, 好让网络带宽可以用来作更多的工作。

2 Lunix系统常见的压缩指令

2.1 gzip, zcat/zmore/zless/zgrep

gzip 可以说是应用度最广的压缩指令了!目前 gzip 可以解开 compress, zip 与 gzip 等软件所压缩的文件。 它所建立的压缩文件为 *.gz 的檔名。

gzip [options] 文件名

选项与参数:

-c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;

-d :解压缩的参数;

-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;

-v :可以显示出原文件/压缩文件案的压缩比等信息;

# :# 为数字的意思,代表压缩等级1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是-6

注意:当你使用 gzip 进行压缩时,在预设的状态下原本的文件会被压缩成为 .gz 的档名,源文件就不再存
在了。 

示例:将test1.txt以最佳的压缩比压缩,并保留原来的文件

2.2 bzip2, bzcat/bzmore/bzless/bzgrep

若说 gzip 是为了取代 compress 并提供更好的压缩比而成立的,那么 bzip2 则是为了取代 gzip 并提供更佳的压缩比而来的。bzip2 的用法几乎与 gzip 相同。 bzip2 的压缩率确实比gzip 要好!不过,对于大容量文件来说,bzip2 压缩时间会花更久的时间。

bzip [options] 文件名

选项与参数:

-c :将压缩的过程产生的数据输出到屏幕上!

-d :解压缩的参数

-k :保留源文件,而不会删除原始的文件喔!

-z :压缩的参数 (默认值,可以不加)

-v :可以显示出原文件/压缩文件案的压缩比等信息;

-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!

2.3  xz, xzcat/xzmore/xzless/xzgrep

虽然 bzip2 已经具有很棒的压缩比,不过显然某些*软件开发者还不满足,因此后来还推出了 xz 这个压缩比更高的软件!这个软件的用法也跟 gzip/bzip2 几乎一模一样!

xz [options] 文件名

选项与参数:

-d :就是解压缩啊!

-t :测试压缩文件的完整性,看有没有错误

-l :列出压缩文件的相关信息

-k :保留原本的文件不删除~

-c :同样的,就是将数据由屏幕上输出的意思!

-# :同样的,也有较佳的压缩比的意思!

3 打包指令 tar

tar [options] 文件名

选项与参数:

-c :建立打包文件,可搭配 -v 来察看过程中被打包的档名(filename)

-t :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;

-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开。特别留意的是, -c, -t, -x 不可同时出现在一串指令列中。

-z :透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz

-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2

-J :透过 xz 的支持进行压缩/解压缩:此时档名最好为 *.tar.xz。特别留意, -z, -j, -J 不可以同时出现在一串指令列中

-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来!

-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项啰!(比较不会忘记)。-C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。

其他后续练习会使用到的选项介绍:

-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件

-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将 FILE 打包!

其实最简单的使用 tar 就只要记忆底下的方式即可:

1. 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称

2. 查 询:tar -jtv -f filename.tar.bz2

3. 解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

Lunix文件的压缩打包与备份

仅仅解开单一文件的用法

Lunix文件的压缩打包与备份

打包某目录,但不包含该目录下的某些文件

Lunix文件的压缩打包与备份

利用管线命令与数据流一边打包一边解压

Lunix文件的压缩打包与备份

在上面的例子中,我们想要『将 /etc 底下的资料直接 copy 到目前所在的路径,也就是 /tmp 底下』,但是又觉得使用 cp -r 有点麻烦,那么就直接以这个打包的方式来打包,其中,指令里面的 - 就是表示那个被打包的文件! 由于我们不想要让中间文件存在,所以就以这一个方式来进行复制的行为。

4. XFS文件系统的备份与还原

4.1 xfsdump 备份

xfsdump 除了可以进行文件系统的完整备份 (full backup) 之外,还可以进行累积备份 (Incremental backup) !

累积备份:你在第一次使用 xfsdump 进行完整备份后,等过一段时间的文件系统自然运作后, 你再进行第二次 xfsdump 时,可以选择累积备份!此时新备份的数据只会记录与第一次完整备份所有差异的文件而已。

使用 xfsdump 限制:

xfsdump 不支援没有挂载的文件系统备份!所以只能备份已挂载的!

xfsdump 必须使用 root 的权限才能操作 (涉及文件系统的关系)

xfsdump 只能备份 XFS 文件系统啊!

xfsdump 备份下来的数据 (文件或储存媒体) 只能让 xfsrestore 解析

xfsdump 是透过文件系统的 UUID 来分辨各个备份档的,因此不能备份两个具有相同 UUID 的文件系统

命令

xfsdump [-L S_label] [-M M_label] [-l #] [-f 备份档] 待备份资料

选项与参数:

-L :xfsdump 会纪录每次备份的 session 标头,这里可以填写针对此文件系统的简易说明

-M :xfsdump 可以纪录储存媒体的标头,这里可以填写此媒体的简易说明

-l :是 L 的小写,就是指定等级~有 0~9 共 10 个等级喔! (预设为 0,即完整备份)

-f :有点类似 tar 啦!后面接产生的文件,亦可接例如 /dev/st0 装置文件名或其他一般文件档名等

-I :从 /var/lib/xfsdump/inventory 列出目前备份的信息状态

Lunix文件的压缩打包与备份

4.2 XFS 文件系统还原 xfsrestore

xfsdump [-L S_label] [-M M_label] [-l #] [-f 备份档] 待备份资料

Lunix文件的压缩打包与备份

选项与参数:

-I :跟 xfsdump 相同的输出!可查询备份数据,包括 Label 名称与备份时间等

-f :后面接的就是备份档!企业界很有可能会接 /dev/st0 等磁带机!我们这里接档名!

-L :就是 Session 的 Label name 喔!可用 -I 查询到的数据,在这个选项后输入!

-s :需要接某特定目录,亦即仅复原某一个文件或目录之意!

-r :如果是用文件来储存备份数据,那这个就不需要使用。如果是一个磁带内有多个文件,需要这东西来达成累积复原

-i :进入互动模式,进阶管理员使用的!一般我们不太需要操作它!

5 建立映像档和刻录DVD

5.1 mkisofs建立映像档

我们从 FTP 站捉下来的 Linux 映像档 (不管是 CD 还是 DVD) 都得要继续刻录成为实体的光盘/DVD 后, 才能够进一步的使用,包括安装或更新你的 Linux !同样的道理,你想要利用刻录机将你的数据刻录到 DVD 时, 也得要先将你的数据报成一个映像档,这样才能够写入 DVD 片中。

将你的数据报成一个映像档的方式就透过 mkisofs 这个指令即可

mkisofs [-o 映像档] [-Jrv] [-V vol] [-m file] 待备份文件... \

选项与参数:

-o :后面接你想要产生的那个映像档档名。

-J :产生较兼容于 windows 机器的文件名结构,可增加文件名长度到 64 个 unicode 字符

-r :透过 Rock Ridge 产生支持 Unix/Linux 的文件数据,可记录较多的信息(如 UID/GID 等) ;

-v :显示建置 ISO 文件的过程

-V vol :建立 Volume,有点像 Windows 在文件总管内看到的 CD title 的东西

-m file :-m 为排除文件 (exclude) 的意思,后面的文件不备份到映像档中,也能使用 * 通配符喔

-graft-point:graft 有转嫁或移植的意思,相关资料在底下文章内说明

刻录root、home、etc目录:

Lunix文件的压缩打包与备份

5.2 刻录wodim

CentOS 7 使用的是 wodim 这个文字界面指令来进行刻录的行为,不过为了兼容于旧版的cdrecord 这个指令, 因此 wodim 也有连结到 cdrecord 。

wodim --devices dev=/dev/sr0... 

Lunix文件的压缩打包与备份

选项与参数:

--devices :用在扫瞄磁盘总线并找出可用的刻录机,后续的装置为 ATA 接口

-v :在 cdrecord 运作的过程中,显示过程而已。

dev=/dev/sr0 :可以找出此光驱的 bus 地址,非常重要!

blank=[fast|all]:blank 为抹除可重复写入的 CD/DVD-RW,使用 fast 较快,all 较完整

-format :对光盘片进行格式化,但是仅针对 DVD+RW 这种格式的 DVD 而已;

[可用选项功能] 主要是写入 CD/DVD 时可使用的选项,常见的选项包括有:
 -data :指定后面的文件以数据格式写入,不是以 CD 音轨(-audio)方式写入!
 speed=X :指定刻录速度,例如 CD 可用 speed=40 为 40 倍数,DVD 则可用 speed=4 之类
 -eject :指定刻录完毕后自动退出光盘
 fs=Ym :指定多少缓冲存储器,可用在将映像档先暂存至缓冲存储器。预设为 4m,
 一般建议可增加到 8m ,不过,还是得视你的刻录机而定。

针对 DVD 的选项功能:
 driveropts=burnfree :打开 Buffer Underrun Free 模式的写入功能
 -sao :支持 DVD-RW 的格式

刻录:

Lunix文件的压缩打包与备份