文件与文件系统的压缩,打包与备份

压缩文件的用途与技术

压缩文件使文件大小减低,降低磁盘使用量。还可以分成数个小型文件,方便携带。常用于网络数据传输,copy分享文件。

Linux系统常用的压缩指令

在Linux的环境中,压缩文件的扩展名大多是:“.tar , .tar .gz, .tgz, .gz, .Z, .bz2, *.xz”。

压缩指令很多,根据不同的压缩技术分不同的指令和扩展名,解压缩文件要使用相应压缩的技术指令。

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的压缩

Linux上常见的压缩指令就是gzip, bzip2以及最新的xz,compress 已经退流行了。

tar是将很多文件“打包”成一个文件,而压缩是只对一个文件的压缩,一般两种技术同时使用。

gzip, zcat/zmore/zless/zgrep

gzip指令
目前 gzip 可以解开 compress, zip与gzip等软件所压缩的文件,后缀名是*.gz 。

语法:
gzip [-cdtv#] 文件名
zcat 文件名.gz
选项与参数:
-c :将压缩的数据输出到屏幕上,可通过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :# 为数字的意思,代表压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6

使用gzip压缩的文件默认成为.gz的文件名,原始文件就不再存在了。

范例:
$ gzip -v services ---压缩文件
$ zcat services.gz ---将文件读出来
$ gzip -d services.gz ---解压缩
$ gzip -9 -c services>services.gz ---用最佳的压缩比压缩,并保留原本的文件
$ zgrep -n 'http' services.gz --- 在services.gz 中,找出 http 这个关键字在哪几行

上面中:-c 将压缩后文件内容输入屏幕,> 将字符输入成文件

zcat, zmore, zless,指令相当于先解压后再执行cat,more,less. 使用不同的方式读取纯文件文件,

使用zgrep从压缩文件当中来使用grep。

bzip2,bzcat/bzmore/bzless/bzgrep

bzip 比gzip压缩比更佳,用法几乎相同。

语法:
$ bzip2 [-cdkzv#] 文件名
$ bzcat 文件名.bz2
选项与参数:
-c :将压缩的过程产生的数据输出到屏幕上!
-d :解压缩的参数
-k :保留原始文件,而不会删除原始的文件喔!
-z :压缩的参数 (默认值,可以不加)
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!

范例:
$ bzip2 -v services ---使用bzip2压缩
$ bzcat services.bz2 ---读出原内容
$ bzip2 -d services.bz2 ---解压缩
$ bzip2 -c services>services.bz2 --压缩并保留原本的文件

可以看到,连选择与参数是跟gzip一模一样bzcat/bzmore/bzless/bzgrep和zcat/zmore/zless/zgrep使用是一样的。

xz, xzcat/xzmore/xzless/xzgrep

语法:
$ xz [-dtlkc#] 文件名
$ xcat 文件名.xz
选项与参数:
-d :就是解压缩啊!
-t :测试压缩文件的完整性,看有没有错误
-l :列出压缩文件的相关信息
-k :保留原本的文件不删除~
-c :同样的,就是将数据由屏幕上输出的意思!
-# :同样的,也有较佳的压缩比的意思!

范例
$ xz -v services
$ ls -l services*
$ xz -l services.xz
$ xzcat services.xz
$ xz -d services.xz
$ xz -k services

xz这个压缩比比gzip bzip2 更高,时间也花的更久。

打包指令:tar

将多个文件或目录包成一个大文件

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 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。

其实最简单的使用tar就只要记忆下面的方式即可:

  • 压 缩:tar -jcv -f filename.tar .bz2 要被压缩的文件或目录名称
  • 查 询:tar -jtv -f filename.tar .bz2
  • 解压缩:tar -jxv -f filename.tar .bz2 -C 欲解压缩的目录

指令不会自己产生压缩的文件名,在自己取文件名时,要写对扩展名。

范例:

#  tar -jcv -f etc.tar.bz2 /etc  --- 打包
#  tar -jtv -f etc.tar.bz2   ---查看
#  tar -jxv -f etc.tar.bz2 -C /tmp ---解压缩
#  time tar -jpcv -f /root/etc.tar.bz2 /etc ---j使用bzip2压缩打包,time 显示打包时间,p 
#  time tar -Jpcv -f /root/etc.tar.bz2 /etc  --- J使用xz压缩打包

仅解开单一文件的方法
# tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'

打包某目录,但不含该目录下的某些文件之作法:
# tar   -jcv    -f /root/system.tar.bz2  /root  --exclude=/root/etc* 

XFS 文件系统的备份与还原

XFS 文件系统备份 xfsdump

使用 xfsdump 时,请注意下面的限制喔:

  • xfsdump 不支持没有挂载的文件系统备份!所以只能备份已挂载的!
  • xfsdump 必须使用 root 的权限才能操作 (涉及文件系统的关系)
  • xfsdump 只能备份 XFS 文件系统啊!
  • xfsdump 备份下来的数据 (文件或储存媒体) 只能让 xfsrestore 解析
  • xfsdump 是通过文件系统的 UUID 来分辨各个备份文件的,因此不能备份两个具有相同UUID 的文件系统喔!

简单操作
语法:
$ xfsdump [-L S_label] [-M M_label] [-l #] [-f 备份文件] 待备份数据
$ xfsdump -I
选项与参数:
-L :xfsdump 会纪录每次备份的 session 标头,这里可以填写针对此文件系统的简易说明
-M :xfsdump 可以纪录储存媒体的标头,这里可以填写此媒体的简易说明
-l :是 L 的小写,就是指定等级~有 0~9 共 10 个等级喔! (默认为 0,即完整备份)
-f :有点类似 tar 啦!后面接产生的文件,亦可接例如 /dev/st0 设备文件名或其他一般文件文件名等
-I :从 /var/lib/xfsdump/inventory 列出目前备份的信息状态

xfsdump 默认仅支持文件系统的备份,并不支持特定目录的备份~所以你不能用
xfsdump 去备份 /etc ! 因为 /etc 从来就不是一个独立的文件系统!注意!注意!

范例:

[root@localhost ~]# xfsdump -l 0 -L boot_all -M boot_all -f /srv/boot.dump /boot
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control
xfsdump: level 0 dump of localhost.localdomain:/boot
xfsdump: dump date: Mon Feb 20 12:13:32 2017
xfsdump: session id: 86c1217d-e6ff-4ee3-b35b-ec7153fc67f4
xfsdump: session label: "boot_all"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 148324608 bytes
xfsdump: /var/lib/xfsdump/inventory created
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 147932264 bytes
xfsdump: dump size (non-dir files) : 147668600 bytes
xfsdump: dump complete: 8 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /srv/boot.dump OK (success)
xfsdump: Dump Status: SUCCESS
[root@localhost ~]# ll /srv
总用量 144468
-rw-r--r--. 1 root root 147932264 2月  20 12:13 boot.dump
[root@localhost ~]# ll /var/lib/xfsdump/inventory
总用量 16
-rw-r--r--. 1 root root 5080 2月  20 12:13 0684a77e-9b76-48b1-9217-553a92f1c6bd.StObj
-rw-r--r--. 1 root root  312 2月  20 12:13 362a2f76-b699-4dba-a6c6-6cc28d04347e.InvIndex
-rw-r--r--. 1 root root  576 2月  20 12:13 fstab
#使用了    xfsdump 之后才会有上述 /var/lib/xfsdump/inventory  内的文件产生喔!

用 xfsdump 进行累积备份 (Incremental backups)

# 看一下有没有任何文件系统被 xfsdump 过的数据?
[root@localhost ~]# xfsdump -I
#创建一个大约 10  MB  的文件在    /boot   内:
[root@localhost ~]# dd if=/dev/zero of=/boot/testing.img bs=1M count=10
#开始创建差异备份文件,此时我们使用  level   1   吧:
[root@localhost ~]# xfsdump -l 1 -L boot_2 -M boot_2 -f /srv/boot.dump1 /boot
#最后再看一下是否有记录    level   1   备份的时间点呢?
[root@localhost ~]# xfsdump -I

XFS 文件系统还原 xfsrestore

xfsdump 的复原使用的是 xfsrestore 这个指令

语法
[root@study ~]# xfsrestore -I ==用来察看备份文件数据
[root@study ~]# xfsrestore [-f 备份文件] [-L S_label] [-s] 待复原目录 <==单一文件全系统复原
[root@study ~]# xfsrestore [-f 备份文件] -r 待复原目录 <==通过累积备份文件来复原系统
[root@study ~]# xfsrestore [-f 备份文件] -i 待复原目录 <==进入互动模式
选项与参数:
-I :跟 xfsdump 相同的输出!可查询备份数据,包括 Label 名称与备份时间等
-f :后面接的就是备份文件!企业界很有可能会接 /dev/st0 等磁带机!我们这里接文件名!
-L :就是 Session 的 Label name 喔!可用 -I 查询到的数据,在这个选项后输入!
-s :需要接某特定目录,亦即仅复原某一个文件或目录之意!
-r :如果是用文件来储存备份数据,那这个就不需要使用。如果是一个磁带内有多个文件,
需要这东西来达成累积复原
-i :进入互动模式,进阶管理员使用的!一般我们不太需要操作它!

用 xfsrestore 观察 xfsdump 后的备份数据内容
$ xfsrestore -I

简单复原 level 0 的文件系统
[root@localhost ~]# xfsrestore -f /srv/boot.dump -L boot_all /boot

复原累积备份数据
xfsrestore -f /srv/boot.dump1 /tmp/boot

仅还原部分文件的 xfsrestore 互动模式
xfsrestore -f /srv/boot.dump -i /tmp/boot3

其他,后续

dd 可备份完整的 partition 或 disk ,因为 dd 可读取磁盘的 sector 表面数据

cpio 为相当优秀的备份指令,不过必须要搭配类似 find 指令来读入欲备份的文件名数
据,方可进行备份动作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容