美文网首页我用 LinuxLinux学习之路Linux
文件与文件系统的压缩,打包与备份

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

作者: taosilly | 来源:发表于2017-02-20 12:42 被阅读156次

    压缩文件的用途与技术

    压缩文件使文件大小减低,降低磁盘使用量。还可以分成数个小型文件,方便携带。常用于网络数据传输,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 指令来读入欲备份的文件名数
    据,方可进行备份动作。

    相关文章

      网友评论

        本文标题:文件与文件系统的压缩,打包与备份

        本文链接:https://www.haomeiwen.com/subject/rlejwttx.html