Bonky Zhu
If someone is able to show me that what I think or do is not right, I will happily change, for I seek the truth, by which no one was ever truly harmed. It is the person who continues in his self-deception and ignorance who is harmed.

Linux 压缩,打包与备份还原

压缩

常见的压缩格式

压缩格式
.z compress程序压缩的文件:
.zip zip程序压缩的文件:
.gz gzip程序压缩的文件:
.bz2 bzip2程序压缩的文件:
.xz xz程序压缩的文件:
.tar .tar 程序打包的数据,并没有压缩过:
.tar.gz tar 程序打包的文件,其中并且经过gzip 的压缩
.tar.bz2 tar 程序打包的文件,其中并且经过bzip2的压缩
.tar.xz tar 程序打包的文件,其中并且经过xz的压缩

gzip 指令

[dmtsai@study ~]$ gzip [-cdtv[1-9]] 檔名
选项与参数:
-c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件案的压缩比等信息;
-[1-9] :代表压缩等级,1 最快,但是压缩比最差、9 最慢,但是压缩比最好!预设是 6


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

  • cat/more/less 可以使用不同的方式来读取纯文本档,那个 zcat/zmore/zless 则可以对应于 cat/more/less 的方式来读取纯文本档被压缩后的压缩文件。
  • 如果你还想要从文字压缩文件当中找数据的话,可以透过 egrep 来搜寻关键词喔!而不需要将压缩文件解开才以 grep 进行! 这对查询备份中的文本文件数据相当有用!

bzip2,xz 指令

基本上和 gzip 一模一样,同样也有bzcat/bzmore/bzless/bzgrep,xzcat/xzmore/xzless/xzgrep 工具。当然压缩比:gzip < bzip2 < xz,压缩时间与压缩比相反。

image-20200112191904187

打包

对于上面所说的三条命令,对目录进行压缩的方式是将目录内的所有文件 "分别" 进行压缩。

$ tar [-z|-j|-J] [cv] [-f 待建立的新檔名] filename... <==打包与压缩
$ tar [tv] [-f 既有的 tar 檔名]  <==察看檔名
$ tar [xv] [-f 既有的 tar 檔名] [-C 目录] [解压的特定的文件...]    <==解压缩
选项与参数:
-c :建立打包文件,可搭配 -v 来察看过程中被打包的档名(filename)
-t :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开

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

-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项啰!(比较不会忘记)
-C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
其他后续练习会使用到的选项介绍:
-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将 FILE 打包!


注意上面那个 -f 可以说是必须的(虽然上面打了方括号)

tarfile & tarball

tar 打包出来的文件有没有进行压缩所得到文件称呼不同喔! 如果仅是打包而已,这个文件我们称呼为 tarfile 。 如果还有进行压缩的支持,我们就称呼为 tarball。

特殊应用:利用 tar 进行复制

# 将 /etc 整个目录一边打包一边在 /tmp 解开
$ cd /tmp
$ tar -cvf - /etc | tar -xvf -


等同于 cp -r /etc /tmp 。其中,指令里面的 - 就是表示那个被打包的文件啦。由于我们不想要让中间文件存在,所以就以这一个方式来进行复制的行为啦

XFS 的备份与还原

备份工具 xfsdump

不仅支持全备份,同样也支持增量备份。xfsdump 有以下特点:

  • 只能备份已挂载的文件系统(注意是文件系统,所有无法备份非独立的文件系统)
  • 必须使用 root 的权限才能操作
  • 只能备份 XFS 文件系统
  • 备份下来的数据 (文件或储存媒体) 只能让 xfsrestore 解析
  • 是通过 UUID 来分辨各个备份档的,不能备份两个具有相同 UUID 的文件系统
$ xfsdump [-L S_label] [-M M_label] [-l [0-9]] [-f 备份档] 待备份资料
$ xfsdump -I
选项与参数:
-L :xfsdump 会纪录每次备份的 session 标头,这里可以填写针对此文件系统的简易说明
-M :xfsdump 可以纪录储存媒体的标头,这里可以填写此媒体的简易说明
-l :是 L 的小写,就是指定等级~有 0~9 共 10 个等级喔! (预设为 0,即完整备份)
-f :有点类似 tar,后面接产生的文件。
-I :从 /var/lib/xfsdump/inventory 列出目前备份的信息状态


完整备份

备份 /boot 分区为例:

xfsdump -l 0 -L boot_all -M boot_all -f /srv/boot.dump /boot


增量备份

实质上就只要把等级和取的名字改一下就 OK 了:

xfsdump -l 1 -L boot_2 -M boot_2 -f /srv/boot.dump1 /boot


还原工具 xfsrestore

如

需要这东西来达成累积复原$ xfsrestore -I <==用来察看备份文件资料
$ 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 :进入互动模式,进阶管理员使用的!一般我们不太需要操作它


其它压缩和备份工具

dd 指令

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 一般只会根据给出的文件来进行备份,所以一般是和 find 进行配合。

find /boot | cpio -oBvc > /tmp/boot.cpio // 备份
cpio -idvc < /tmp/boot.cpio // 还原, 还原到当前目录下(整套目录)
cpio -itvc < /tmp/boot.cpio  // 查看

Share

You may also like...

发表评论