第九章 档案与文件系统的压缩与打包

1.  Gzip 格式规范: http://www.ietf.org/rfc/rfc1952.txt

 

2.  以下列出几个常见的压缩文件扩展名:

扩展名 压缩类型
*.Z compress 程序压缩的档案
*.gz gzip 程序压缩的档案
*.bz2 bzip2 程序压缩的档案
*.tar tar 程序打包的数据,并没有压缩过
*.tar.gz tar 程序打包的档案,并且经过 gzip 的压缩
*.tar.bz2 tar 程序打包的档案,并且经过 bzip2 的压缩

gzip 是由 GNU 计划所开发出来的压缩指令,该指令已经取代了 compress。后来 GNU 又开发出 bzip2 这个压缩比更好癿压缩指令。不过,它们仅能对一个档案进行压缩与解压缩。tar 可以将很多档案『打包』成为一个档案,单纯的 tar 功能仅是『打包』而已,并没有提供压缩的功能。后来,GNU 计划中,将整个 tar 与压缩的功能结合在一起。

 

3.  gzip 是应用度最广的压缩指令,目前 gzip 可以解开 compress, zipgzip 等软件所压缩的档案:

# gzip [-cdtv#] 文件名
# zcat 文件名.gz

 选项说明如下:

 

选项 功能
-c 将压缩的数据输出到屏幕上,可透过数据流重导向来处理
-d 解压缩
-t 用来检验压缩文件的一致性,看看档案有无错误
-v 可以显示出原档案/压缩文件案的压缩比等详细信息
-# 压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好,默认是 -6

当你使用 gzip 进行压缩时,在默认状态下原本的档案会被压缩成为 .gz 的档名, 源文件就不再存在了。gzip -d (等价于gunzip)会将原本的 .gz 文件删除,解压出原本的档案。zcat 可以读取压缩后的文本文件的内容。

 

4.  bzip2 则是为了取代 gzip 并提供更佳的压缩比而来的:

# bzip2 [-cdkzv#] 文件名
# bzcat 文件名.bz2

 选项说明如下:

 

选项 功能
-c 将压缩的数据输出到屏幕上,可透过数据流重导向来处理
-d 解压缩
-z 压缩
-v 可以显示出原档案/压缩文件案的压缩比等详细信息
-# 压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好,默认是 -6

当你要解开一个压缩文件时, 这个档案的名称为 .bz, .bz2, .tbz, .tbz2 等等,那么就可以尝试使用 bzip2 来解压。bunzip2 bzip2 -d 是等价的。用 bzip2 压缩后,源文件也不会存在了。

 

5.  虽然 gzipbzip2 也能够对目录进行压缩, 但这两个指令对目录的压缩指的是『将目录内的所有档案 "分别" 进行压缩』的动作。tar 可以将多个目录或档案打包成一个大档案,同时还可以通过 gzip/bzip2 的支持,将该档案同时进行压缩:

# tar [-j|-z] [cv] [-f 建立的文件名] filename... <==打包与压缩
# tar [-j|-z] [tv] [-f 建立的文件名] <==察看档名
# tar [-j|-z] [xv] [-f 建立的文件名] [-C 目录] <==解压缩

 选项说明如下:

 

选项 功能
-c 建立打包档案,可搭配 -v 来察看过程中被打包的档名(filename)
-t 察看打包档案的内容含有哪些档名
-x 解打包或解压缩,可以搭配 -C 在特定目录解开
-j 通过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-z 透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-v 在压缩/解压缩的过程中,将正在处理的文件名显示出来
-f filename -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 欲解压缩的目录

 

6.  如果我只想要解开打包档案内的其中一个档案而已,只要使用 -jtv 找到你要的档名,然后:

# tar -jxv -f 打包档.tar.bz2 待解开档名

 

7.  以下指令可以打包 /etc/ /root 这两个目录,但却不会打包 /root/etc* 开头的档案,而且这个新的打包档案会放置成为 /root/system.tar.bz2 , 当然这个档案自己不要打包自己 (因为这个档案放置在 /root 底下):

# tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2 /etc /root

 

8.  如果你只想要备份新的档案而已,可以使用--newer或--newer-mtime选项,前者既包含mtime也包含ctime:

# tar -jcvf /root/etc.newer.then.passwd.tar.bz2 --newer-mtime="2008/09/29" /etc/*

9.  如果用tar打包出来的文件,没有压缩,我们一般称其为tarfile,如果压缩了,则称为tarball

 

10.  tar还能够将档案打包到磁带机 (tape)上,磁带机由于是一次性读取/写入的装置,因此我们不能够使用类似 cp 等指令来复制:

# tar -cv -f /dev/st0 /home /root /etc

11.  当-f后跟的是减号(-)时,代表标准输出(压缩时)或标准输入(解压时),比如,下列命令等价于cp -r /etc

 

# tar -cvf - /etc | tar -xvf -

 

12.  dump 指令除了能够对整个 filesystem 备份外,也能够对目录来备份,还可以制定等级:




dump的语法如下:

# dump [-Suvj] [-level] [-f 备份档] 待备份资料
# dump -W

 选项说明如下:

 

选项 功能
-S 仅列出后面的待备份数据需要多少磁盘空间才能够备份完毕
-u 将这次 dump 的时间记录到 /etc/dumpdates 档案中
-v dump 档案的过程显示出来
-j

加入 bzip2 的支持,将数据进行压缩,默认 bzip2 压缩等级为 2

一般来说 dump 不会自动使用压缩的功能。

-level dump 等级,从 -0 ~ -9 共十个等级
-v 在压缩/解压缩的过程中,将正在处理的文件名显示出来
-f 后面接产生的档案,亦可接例如 /dev/st0 装置文件名等
-W 列出在 /etc/fstab 里面的具有 dump 设定的 partition 是否有备份过

dump在备份数据时:

    1)  当待备份的资料为单一文件系统时,那么该文件系统可以使用完整的 dump 功能,包括利用 0~9 的数个 level 来备份,同时,备份时可以使用挂载点或装置文件名 来进行备份。

    2)  待备份的数据只是目录,并非单一文件系统时,备份会有如下限制:

        a)  所有的备份数据都必项要在该目录底下;

        b)  且仅能使用 level 0 ,亦即仅支持完整备份而已;

        c)  不支持 -u 选项,亦即无法建立 /etc/dumpdates 这个个别 level 备份的时间记录文件;

13.  dump 的复原使用的是 restore 这个指令:

# restore -t [-f dumpfile] [-h]     <==用来察看 dump 档
# restore -C [-f dumpfile] [-D 挂载点] <==比较dump与实际档案
# restore -i [-f dumpfile] <== 进入互动模式
# restore -r [-f dumpfile] <==还原整个文件系统
  选项说明如下:

 

选项 功能
-t 察看 dump 起来的备份文件中含有什么数据
-C

dump 内的数据跟实际的文件系统做比较,列出『在 dump 档案内有但与

目前文件系统不一样』的档案

-i 进入互动模式,可以仅还原部分档案,用在 dump 目录时的还原
-r

将整个 filesystem 还原,用在还原针对文件系统的 dump 备份

-h 察看备份数据中的 inode 与文件系统 label 等信息
-f 后面接要处理的那个 dump 档案
-D -C 搭配,后面接挂载点

默认restore会将备份文件解压到当前目录。进入互动模式后,add file 可以将 file 加入待解压档案列表中;delete file 可以将 file 移除出待解压档案列表;extract 会开始将刚刚选择的档案列表解压缩出去。

14.  要利用刻录机将数据刻录到 DVD 时, 要先将数据生成一个映像档,这样才能够写入DVD片中。而将数据生成像档的方式就是通过 mkisofs 这个指令:

mkisofs [-o 映像档] [-rv] [-m file] 待备份文件.. [-V vol] -graft-point isodir=systemdir  ...

选项说明如下:

 

选项 功能
-o 后面接想要产生的那个映像档档名
-r

通过 Rock Ridge 产生支持 Unix/Linux 的档案数据,可记录较多的信息

-v 显示生成 ISO 档案的过程
-m file

排除 (exclude) 后面档案(file)不生成到映像档中

-V vol 建立 Volume,有点像 Windows 在档案总管内看到的 CD title 的东西
-graft-point graft有转嫁或移植的意思,指定当前目录与映像档中目录的映射关系

光盘的格式一般称为 iso9660 ,这种格式一般仅支持旧版的 DOS 档名,亦即档名只能以 8.3 (文件名8个字符,扩展名3个字符) 的方式存在。如果加上 -r 的选项,那么档案信息能够被记录得比较完整,可包括UID/GID与权限等等。默认情况下,所有要被加到映像档中的档案都会被放置到映象文件中的根目录, 如可以使用 -graft-point 这个选项,以如下方式来定义位于映像文件中的目录:

映像文件中的目录所在=实际 Linux 文件系统的目录所在

15.  cdrecord 指令可以进行文字接口的刻录行为:

# cdrecord -scanbus dev=ATA <==查询刻录机位置
# cdrecord -v dev=ATA:x,y,z blank=[fast|all] <==擦除重复读写片
# cdrecord -v dev=ATA:x,y,z -format <==格式化DVD+RW
# cdrecord -v dev=ATA:x,y,z [可用选项功能] file.iso
  选项说明如下:

 

选项 功能
-scanbus 扫瞄磁盘总线并找出可用的刻录机,后续癿装置为 ATA 接口
-v cdrecord 运行过程中,显示过程
dev=ATA:x,y,z

后续的 x, y, z 为你系统上刻录机所在的位置,可通过-scanbus查询到。

blank=[fast|all] blank 为擦除可重复写入的CD/DVD-RW,使用fast较快,all较完整
-format 仅针对 DVD+RW 这种格式的 DVD
-data 指定后面的档案以数据格式写入,不是以 CD 音轨(-audio)方式写入
speed=X 指定刻录速度,例如CD可用 speed=40 为40倍速,DVD则可用 speed=4 之类
-eject 指定刻录完毕后自动退出光盘
fs=Ym 指定多少缓存可用在记录DVD的过程中。默认为 4m, 一般建议可增加到 8m
driveropts=burnfree 仅针对DVD,打开 Buffer Underrun Free 模式的写入功能
-sao 支持 DVD-RW 的格式

IDE 与 SATA 都能够使用 dev=ATA 这种模式来查询。

16.  dd 可以读取磁盘装置的内容(几乎是直接读取扇区"sector"),然后将整个装置备份成一个档案:

dd if="input_file" of="output_file" bs="block_size" count="number"

 if 是 input file,也可以是装置;of 是 output file,也可以是装置;bs 为规划的一个 block 的大小,若未指定则默认为 512 bytes(一个 sector 的大小);count 指定多少个 bstar 可以用来备份关键数据,而 dd 则可以用来备份整个 partition 或 整块 disk,因为它是硬件级别的复制,而不是文件系统级别的。(superblock,boot sector,metadata 的区块,使用 cptar 指令是无法备份的。)不过,要将数据填回到 filesystem 当中, 需要考虑到原本的 filesystem 才行。

17.  cpio 可以备份任何东西,包括装置设备档案。但 cpio 是流式指令,需要配合类似 find 等可以找到文件名的指令来告知 cpio 该被备份的数据在哪里:

# cpio -ovcB > [file|device] <==备份
# cpio -ivcdu < [file|device] <==还原
# cpio -ivct < [file|device] <==察看

选项说明如下:

 

选项 功能
-o 将数据 copy 输出到档案或装置上
-B 让默认的 Blocks 可以增加至 5120 bytes ,默认是 512 bytes。这样的好处是可以让大档案的储存速度加快。
-i

将数据从档案或装置 copy 到当前目录

-d 自动建立目录。使用 cpio 所备份的数据可能会在不同层的目录中,-d 选项可以cpio 在还原时可以建立新目录
-u 自动地将较新的档案覆盖较旧的档案
-t 需配合 -i 选顷,可用在"察看"以 cpio 建立的档案或装置的内容
-v 让储存的过程中文件名可以在屏幕上显示
-c 以一种较新的portable format 方式储存
fs=Ym 指定多少缓存可用在记录DVD的过程中。默认为 4m, 一般建议可增加到 8m
driveropts=burnfree 仅针对DVD,打开 Buffer Underrun Free 模式的写入功能
-sao 支持 DVD-RW 的格式

猜你喜欢

转载自seanzhou.iteye.com/blog/2020708