《鸟哥的Linux私房菜》——第八章学习笔记

第八章、文件与文件系统的压缩,打包和备份

8.1 压缩文件的用途和技术

  • 很多情况下文件太大导致使用不方便,这时候就可以使用文件压缩技术
  • 考虑到计算机的二进制,我们在内存空间中存下数字1,其实是一个字节存了数据1,其余7个字节全为0,这样就会造成内存空间的浪费。
  • 有两种常见的压缩技术,一种是将上述的0的空间去掉,将所有内容“挤压”在一起;第二种是记录共有“100个1”。压缩后与压缩的文件所占用的磁盘空间大小,可以被称为是压缩比

8.2 Linux系统常见的压缩指令

  • 在linux的环境中,压缩文件的扩展名大多是:*.tar,*.tar.gz,*.tgz,*.gz,*.Z,*.bz2,*xz
  • 有这么多扩展名的原因是Linux支持的压缩指令非常多,而且不同的指令所用的压缩技术并不相同,当然彼此之间可能就无法互通压缩/解压缩文件案了。

1

  • Linux上常见的压缩指令就是gzipbzip以及最新的xz
  • 下面介绍gzip的使用方法

2

  • 当使用gzip进行压缩时,在预设的状态下原本的文件会被压缩成为*.gz*的档名,源文件就不存在了,这一点和windows系统下压缩的情况不同。此外,使用gzip压缩的文件在windows系统中,还可以被WinRAR/7zip这个软件解压缩

  • cat/more/less可以使用不同方式来读取纯文本档,而zcat/zmore/zless则可以对应于cat/more/less的方式来读取纯文本档被压缩后的压缩文件。由于gzip这个压缩指令主要是想用来取代compress的,所以不但compress的压缩文件案可以使用gzip来解开,同时zcat这个指令也可以同时读取compressgzip的压缩文件。znew可以将**.Z文件转成gzip**的格式。

  • 另外,如果想要从文字压缩文件当中找数据的话,可以透过egrep来搜寻关键词。而不需要将压缩文件解开才以grep进行。这对查询备份中的文本文件数据相当有用。

  • 如果说gzip是为了取代compress并提供更好的压缩比而成立的,那么bzip2就是为了取代gzip并提供更加的压缩比而来的。bzip2的压缩比比gzip还要好。其用法也和gzip相差不大:

3

  • xz是压缩比更高的软件

4
5

  • 这个软件的压缩比会前面两种好得多,但是运算时间也比前面的久很多。所以,如果不考虑时间成本,使用xz会比较好,但是如果时间紧急,gzip恐怕才是最好的选择。

8.3 打包指令:tar

  • 前面谈到的指令可以针对单一文件来进行压缩,虽然gzipbzip2xz也能够针对目录来进行压缩,不过,这两个指令对目录的压缩值得是将目录内的所有文件“分别”进行压缩的动作。而不像在Windows的系统,可以使用类似WinRAR这一类的压缩软件来将好多数据“包成一个文件”的样式。
  • 这样将多个文件或目录包成一个大文件的指令功能,我们可以称他为“打包指令”。在Linux中,这样的打包指令就是tartar可以将多个目录或文件打包成一个大文件,同时还可以透过gzip/bzip2/xz的支持,将该文件进行压缩。在Windows系统上的WinRAR也支持**.tar.gz**档名的解压缩。
  • tar的选项与参数非常的多,下面是几个常用的选项,更多选项可以man tar查询。

6

  • 其实最简单的使用方式只需要记住下面的方式:
压  缩:tar -jcv -f filename.tar.bz2  要被压缩的文件或目录名称
查  询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 要解压缩的目录
  • 其中filename.tar.bz2是我们自己取的档名,tar不会主动产生建立的档名。如果不加-z|-j|-J的话,档名最好取为***.tar即可。如果是-j选项,代表有bzip2的支持,因此档名最好就取为*.tar.bz2**;如果是-z就是加上了gzip的支持,那么档名最好取为***.tar.gz**。

8.4 XFS 文件系统的备份与还原

  • 使用tar通常是针对目录树系统来进行备份的工作,那么如果想要针对整个文件系统来进行备份与还原呢
XFS 文件系统备份 xfsdump
  • 其实xfsdump的功能很强,他除了可以进行文件系统的完整备份(full backup)之外,还可以进行累积备份(Incremental backup)。那么累积备份又是什么呢?假设**/home是一个独立的文件系统,那在第一次使用xfsdump进行完整备份后,等过一段事件的文件系统自然运作后,你再进行第二次xfsdump**时,就可以选择累积备份了。此时新备份的数据只会记录与第一次完整备份所有差异的文件而已。

7

  • 如图,上方的“实时文件系统”是一直随着时间而变化的数据,例如在**/home里面的文件数据会一直变化一样。而底下的方块则是xfsdump备份起来的数据,第一次备份一定是完整备份,完整备份在xfsdump中被定义为 level 0。等到第二次备份时,/home文件系统内的数据已经与level 0不一样了,而level 1仅只是比较目前的文件系统与level 0之间的差异后,备份有变化过的文件而已。level 2是与level 1进行比较。各个level的记录文件则放置于/var/lib/xfsdump/inventory**中。
  • 另外,使用xfsdump时,要注意以下的限制:
xfsdump不支持没有挂载的文件系统备份
xfsdump必须使用root权限才能操作
xfsdump只能备份XFS文件系统
xfsdump备份下来的数据(文件或储存媒体)只能让xfsrestore解析
xfsdump是透过文件系统的UUID来分辨各个备份档的,因此不能备份两个具有相同UUID的文件系统
  • xfsdump的使用虽然非常的繁复,不过如果只是要进行简单操作时,只需记得以下几个选项:
xfsdump [-L S_label] [-M M_label] [-l #] [-f] 待备份资料
xfsdump -I

图8

XFS 文件系统还原 xfsrestore
  • 备份文件就是在急用时可以恢复系统的重要数据,所以有备份自然要有复原了。xfsdump的复原使用的是xfsrestore这个命令。

图9

8.5 光盘写入工具

  • 刻录行为通常的做法是这样的:
    • 先将所需要备份的数据建置成为一个映像档(iso),利用mkisofs指令来处理
    • 将该映像文件刻录至光盘或DVD当中,利用cdrecord来处理
mkisofs:建立映像档
  • mkisofs的使用方法如下:

图10

  • 其实mkisofs有非常多的选项可以选择,不过如果我们只是想制作数据光盘时,上述的选项也够用了。光盘的格式一般称为iso9660,这种格式一般仅支持旧版的DOS檔名,檔名只能以8.3(文件名8个字符、扩展名3个字符)的方式存在。如果加上-r这个选项之后,那么文件的信息能够被记录地比较完整,可包括UID/GID与权限等等。所以要记得加上-r的选项。
  • 此外,一般预设情况下,所有要被加到映像档中的文件都会被放置到映像文件中的根目录,如此一来可能会造成刻录后的文件不易分类的情况。所以,也可以使用-graft-point这个选项,当你使用了这个选项之后,可以用以下的方法来定义位于映像文件中的目录,例如:
    • 映像文件中的目录所在=实际Linux文件系统的目录所在
    • /movies/=/srv/movies/在Linux的/srv/movies/内的文件,加至映像文件中的/movies/目录
    • /linux/etc=/etc将Linux中的/etc/内的所有数据备份到映像文件中的/linux/etc/目录中
cdrecord:光盘刻录工具
  • 新版的CentOS7使用的是wodim这个文字界面指令来进行刻录的行为,不过为了兼容旧版的cdrecord指令,因此wodim也有连结到cdrecoed就是了。因此,还是可以使用cdrecord这个指令。

图11

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

8.6 其他常见的压缩与备份工具

dd
  • 这个dd指令最大的功效,是在于备份。因为他可以读取磁盘装置的内容(几乎是直接读取扇区“sector”),然后将整个装备备份成一个文件。他的用途有很多,我们将一些比较重要的选项:

图12
图13

  • 其实使用dd来进行备份是很笨的方法。因为默认dd是一个一个扇区去读/写的,而且即使没有用到的扇区也会被写入备份档中。因此这个文件会变得跟原本的磁盘一模一样大。不像使用xfsdump只备份文件系统中有使用到的部分。不过,dd就是因为不理会文件系统,单纯有啥记录啥,因此不论该磁盘内的文件系统你是否认识,他都是可以备份、还原的。
cpio
  • 这个指令cpio可以备份任何东西,包括装置设备文件。不过cpio有个大问题,就是他不会主动的去找文件来进行备份。所以要配合类似find等可以找到文件名的指令来告知cpio该被备份的数据在哪里。

图14

  • 我们可以发现,上述的选项与指令中怎么会没有指定需要备份的数据呢?还有哪个大于号、小于号都是什么意思。因为cpio会将数据整个显示在屏幕上,因此我们可以透过将这些屏幕的数据重新导向>一个新的文件。至于还原呢,就是将备份文件读进来cpio<进行处理。
    • 备份:find / | cpio -ocvB > /dev/st0
    • 还原:cpio -idvc < /dev/st0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lanciberrr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值