文件与文件系统的压缩

  由于我们记录数字是 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 指令来读入欲备份的文件名数据,方可进行备份动作。
原文地址:https://www.cnblogs.com/chengmf/p/12636398.html