文件与文件系统的压缩
由于我们记录数字是 1 ,考虑计算机所谓的二进制喔,如此一来, 1 会在最右边占据 1 个 bit ,而其他的 7 个 bits 将会自动的被填上 0 ,其实在这样的例子中,那 7 个 bits 应该是『空的』才对!不过,为了要满足目前我们的操作系统数据的存取,所以就会将该数据转为 byte 的型态来记录了!于是就利用一些复杂的计算方式, 将这些没有使用到的空间『丢』出来,以让文件占用的空间变小!这就是压缩的技术!
另外一种压缩技术,他是将重复的数据进行统计记录的。举例来说,如果你的数据为『111....』共有 100 个 1 时, 那么压缩技术会记录为『100 个 1』而不是真的有 100 个 1 的位存在!这样也能够精简文件记录的容量。
Linux 系统常见的压缩指令
gzip
- gzip [-cdtv#] 檔名
- [dmtsai@study ~]$ zcat 檔名.gz
- 选项与参数:
- -c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
- -d :解压缩的参数;
- -t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
- -v :可以显示出原文件/压缩文件案的压缩比等信息;
- -# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6
bzip2
- bzip2 [-cdkzv#] 檔名
- [dmtsai@study ~]$ bzcat 檔名.bz2
- 选项与参数:
- -c :将压缩的过程产生的数据输出到屏幕上!
- -d :解压缩的参数
- -k :保留源文件,而不会删除原始的文件喔!
- -z :压缩的参数 (默认值,可以不加)
- -v :可以显示出原文件/压缩文件案的压缩比等信息;
- -# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!
xz
- xz [-dtlkc#] 檔名
- [dmtsai@study ~]$ xcat 檔名.xz
- 选项与参数:
- -d :就是解压缩啊!
- -t :测试压缩文件的完整性,看有没有错误
- -l :列出压缩文件的相关信息
- -k :保留原本的文件不删除~
- -c :同样的,就是将数据由屏幕上输出的意思!
- -# :同样的,也有较佳的压缩比的意思!
打包指令: tar
- tar [-z|-j|-J] [cv] [-f 待建立的新檔名] filename... <==打包与压缩
- tar [-z|-j|-J] [tv] [-f 既有的 tar 檔名] <==察看檔名
- tar [-z|-j|-J] [xv] [-f 既有的 tar 檔名] [-C 目录] <==解压缩
-选项与参数:- -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 就只要记忆底下的方式即可:
- 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
- 查 询:tar -jtv -f filename.tar.bz2
- 解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
文件系统的备份与还原
XFS 文件系统备份 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 列出目前备份的信息状态。
XFS 文件系统还原 xfsrestore
- xfsrestore [-f 备份档] [-L S_label] [-s] 待复原目录 <==单一文件全系统复原
- xfsrestore [-f 备份文件] -r 待复原目录 <==透过累积备份文件来复原
系统 - xfsrestore [-f 备份文件] -i 待复原目录 <==进入互动模式
-选项与参数:- -I :跟 xfsdump 相同的输出!可查询备份数据,包括 Label 名称与备份时间等
- -f :后面接的就是备份档!企业界很有可能会接 /dev/st0 等磁带机!我们这里接档名!
- -L :就是 Session 的 Label name 喔!可用 -I 查询到的数据,在这个选项后输入!
- -s :需要接某特定目录,亦即仅复原某一个文件或目录之意!
- -r :如果是用文件来储存备份数据,那这个就不需要使用。如果是一个磁带内有多个文件,
需要这东西来达成累积复原 - -i :进入互动模式,进阶管理员使用的!一般我们不太需要操作它!
光盘写入工具
mkisofs:建立映像档
- mkisofs [-o 映像档] [-Jrv] [-V vol] [-m file] 待备份文件... \
- > -graft-point isodir=systemdir ...
- 选项与参数:
- -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 有转嫁或移植的意思,相关资料在底下文章内说明。
cdrecord:光盘刻录工具
-
wodim --devices dev=/dev/sr0... <==查询刻录机的 BUS 位置
-
wodim -v dev=/dev/sr0 blank=[fast|all] <==抹除重复读写片
-
wodim -v dev=/dev/sr0 -format <==格式化 DVD+RW
-
wodim -v dev=/dev/sr0 [可用选项功能] file.iso
-选项与参数:- --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 的格式
其他常见的压缩与备份工具
dd
- dd if="input_file" of="output_file" bs="block_size" count="number"
- 选项与参数:
- if :就是 input file 啰~也可以是装置喔!
- of :就是 output file 喔~也可以是装置;
- bs :规划的一个 block 的大小,若未指定则预设是 512 bytes(一个 sector 的大小)
- count:多少个 bs 的意思。
cpio
-
cpio -ovcB > [file|device] <==备份
-
cpio -ivcdu < [file|device] <==还原
-
cpio -ivct < [file|device] <==察看
-
备份会使用到的选项与参数:
- -o :将数据 copy 输出到文件或装置上
- -B :让预设的 Blocks 可以增加至 5120 bytes ,预设是 512 bytes !这样的好处是可以让大文件的储存速度加快(请参考 i-nodes 的观念)
-
还原会使用到的选项与参数:
- -i :将数据自文件或装置 copy 出来系统当中
- -d :自动建立目录!使用 cpio 所备份的数据内容不见得会在同一层目录中,因此我们必须要让 cpio 在还原时可以建立新目录,此时就得要 -d 选项的帮助!
- -u :自动的将较新的文件覆盖较旧的文件!
- -t :需配合 -i 选项,可用在"察看"以 cpio 建立的文件或装置的内容
-
一些可共享的选项与参数:
- -v :让储存的过程中文件名可以在屏幕上显示
- -c :一种较新的 portable format 方式储存
重点回顾
- 压缩指令为透过一些运算方法去将原本的文件进行压缩,以减少文件所占用的磁盘容量。 压缩前与压缩后的文件所占用的磁盘容量比值, 就可以被称为是『压缩比』
- 压缩的好处是可以减少磁盘容量的浪费,在 WWW 网站也可以利用文件压缩的技术来进行数据的传送,好让网站带宽的可利用率上升。
- 压缩文件案的扩展名大多是:『*.gz, *.bz2, *.xz, *.tar, *.tar.gz, *.tar.bz2, *.tar.xz』
- 常见的压缩指令有 gzip, bzip2, xz。压缩率最佳的是 xz,若可以不计时间成本,建议使用 xz 进行压缩。
- tar 可以用来进行文件打包,并可支持 gzip, bzip2, xz 的压缩。
- 压 缩:tar -Jcv -f filename.tar.xz 要被压缩的文件或目录名称
- 查 询:tar -Jtv -f filename.tar.xz
- 解压缩:tar -Jxv -f filename.tar.xz -C 欲解压缩的目录
- xfsdump 指令可备份文件系统或单一目录
- xfsdump 的备份若针对文件系统时,可进行 0-9 的 level 差异备份!其中 level 0 为完整备份;
- xfsrestore 指令可还原被 xfsdump 建置的备份档;
- 要建立光盘刻录数据时,可透过 mkisofs 指令来建置;
- 可透过 wodim 来写入 CD 或 DVD 刻录机
- dd 可备份完整的 partition 或 disk ,因为 dd 可读取磁盘的 sector 表面数据
- cpio 为相当优秀的备份指令,不过必须要搭配类似 find 指令来读入欲备份的文件名数据,方可进行备份动作。