Linux学习笔记:文件与文件系统的压缩、打包和备份

一、压缩

    压缩、解压缩、压缩比

    常见的压缩文件扩展名

    Linux学习笔记:文件与文件系统的压缩、打包和备份

    

打包软件tar:将很多文件集结成一个文件

    应用度最广的压缩指令gzip

    能解开compress、zip和gzip等软件压缩的文件

    压缩后的文件为*.gz

    (ls -ldSr按文件大小从小到大列出)

    -v:显示压缩比等信息    -#:#为数字表示压缩等级,越高越好,默认为6

    -d:解压缩

   若要保留源文件:gzip -v -c 文件名 > 文件名.gz

   读取压缩后的文件;zcat、zmore、zless、zgrep

    将.Z文件转成gzip格式:znew

gzip的改进版bzip2

    参数与gzip基本完全一致

    读取压缩后的文件:bzcat、bzmore、bzless、bzgrep

压缩比更高的xz

    用法与gzip/bzip2几乎一模一样

    Linux学习笔记:文件与文件系统的压缩、打包和备份

    压缩比更高

    -l:列出该压缩文件的相关信息   -k:保留源文件不删除(比以上俩种方便)

    缺点:压缩时间久

二、打包

    打包指令tar

    以上的压缩软件对目录压缩指的是是将目录中的文件分别压缩

    打包:

        tar -zpcv -f 文件名.tar.gz 源文件夹

        tar -jpcv -f 文件名.tar.bz2 源文件夹

        tar -Jpcv -f 文件名.tar.xz 源文件夹

    Linux学习笔记:文件与文件系统的压缩、打包和备份

    查看源文件的大小

    Linux学习笔记:文件与文件系统的压缩、打包和备份

    xz耗时27秒 gzip2耗时8秒左右

    -p的作用是保存文件的权限和属性

    查看:

        tar -jtv -f 文件名.tar.bz2

        tar -ztv -f 文件名.tar.gz

        tar -Jtv -f 文件名.tar.xz

        -v:会列出文件权限和属性,若只需要文件名可去掉v

        去掉根目录是为了解压安全,不会覆盖源文件

        查看打包文件中的关键字:tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'

   解打包:

        tar -jxv -f 文件名.tar.bz2 -C 目标文件夹

       解压到当前文件夹的话不加-C

       解打包一个文件:tar -jxv -f /root/etc.tar.bz2 etc/shadow

    仅备份比某个时刻还要新的文件

        两个选项:--newer或者--newer-mtime

       tar -jcv -f /root/etc.never.then.passwd.tar.bz2 --newer-mtime="2018/12/29" /etc/*

       将/etc/中2018/12/29以后的文件备份

        not dumped未被备份的文件

    tar打包出来的文件没有进行压缩例如:tar -cv -f file.tar 这个文件称呼为tarfile

    如果压缩的话例如:tar -jcv -f file.tar.bz2 这个文件称呼为tarball

    tar除了可以将资料打包成文件之外还能降文件打包到某些特别的装置去,如磁带机

    //特殊应用:管线命令和数据流

    系统备份范例:

        重要的目录:

        Linux学习笔记:文件与文件系统的压缩、打包和备份

             /home/loop*不用备份  /root底下的压缩文件也不需要备份

            系统备份:tar -jcv -f /backups/backup-system-20190114.tar.bz2 --exclude=/root/*.bz2 --exclude=/root/*.gz --exclude=/root/*.xz --exclude=/home/loop* /etc/ /home /var/spool/mail/ /var/spool/cron/ /root/

三、XFS文件系统的备份与还原

    tar通常是针对目录树系统来进行备份 如果要针对整个文件系统进行备份和还原

    XFS文件系统备份 xfsdump

        不仅可以进行完整备份,还能进行累计备份(只备份有差异的文件)

        level的记录文件放置于 /var/lib/xfsdump/inventory中

        Linux学习笔记:文件与文件系统的压缩、打包和备份

       注意:不能用xfsdump去备份/etc,因为/etc不是一个独立的文件系统

       备份整个/boot:xfsdump -l 0 -L boot_all -M boot_all -f /srv/boot.dump /boot

        不加-L及-M的话会进入互动模式,要一直按enter

        Linux学习笔记:文件与文件系统的压缩、打包和备份

        查看备份文件记录:

        Linux学习笔记:文件与文件系统的压缩、打包和备份

        以上就完成了完整备份(-l 0),可以进行其他累计备份(-l 1~9)

        查看备份的文件夹有没有新的文件:xfsdump -I

        Linux学习笔记:文件与文件系统的压缩、打包和备份

       在/boot下新建一个10M的文件夹:dd if=/dev/zero of=/boot/testing.img bs=1M count=10

       进行差异备份:

        Linux学习笔记:文件与文件系统的压缩、打包和备份

        可以看到备份了11M的文件

        查看level1的时间点:开始用xfsdump -I

    XFS文件系统还原 xfsrestore

        1、用xfsrestore -I查看xfsdump备份后数据内容

        2、简单复原level 0的文件系统

        Linux学习笔记:文件与文件系统的压缩、打包和备份

        重要信息有三个:存放备份的那个文件(/srv/boot.dump)、session label name(boot_all)、要还原的那个文件夹(/boot)

        将备份资料在/tmp/boot下面解开

        xfsrestore -f /srv/boot.dump -L boot_all /tmp/boot

       备份还原:原本/boot中的东西并没有删除,之间复原的结果就是--同名的文件会被覆盖,其他系统内新的文件会被保留

       diff -r可以比较两个文件夹的不同处

       加-s可以选择复原某一目录或文件:

       Linux学习笔记:文件与文件系统的压缩、打包和备份

       复原累计备份资料:

          xfsrestore -f /srv/boot.dump1 /tmp/boot

四、光盘写入工具

    mkisofs建立光盘映像

       光盘的格式一般称为iso9660这种格式一般仅支持旧版的DOS文件名,只能以8.3(文件名8个字符,拓展名3个),加上-r选项后信息能够被较完整的记录

       -graft-point这个选项可以定义映像文件中的目录

      不使用:mkisofs -r -v -o /tmp/system.img /boot /home /etc

      制作的备份一团糟,三个文件夹的内容放到了一起

      使用:mkisofs -r -V 'linux_file' -o /tmp/system.img  -m /root/etc -graft-point /root=/root /home=/home /etc=/etc

 

       Linux学习笔记:文件与文件系统的压缩、打包和备份

   制作修改可开机光盘映像

五、其他常见的压缩与备份工具

    dd

        可以读取磁盘装置的内容(几乎是直接读取扇区),然后将装置备份成一个文件

        Linux学习笔记:文件与文件系统的压缩、打包和备份

      if为输入文件  of为输出文件

      很简单好用

      直接备份整个/boot

       Linux学习笔记:文件与文件系统的压缩、打包和备份

      可以看出是把整个分区都复制了,包括空的区域,所以效率并不高

    cpio

        cpio可以备份任何东西,包括设备文件,不过有个问题是cpio不会主动去找文件来备份,要配合类似find等可以找到文件名的指令来告知cpio该被备份的数据在哪里

       备份:find boot | cpio -ocvB > /tmp/boot.cpio

           要在根目录下进行,因为cpio很笨,它不会理会你给的是绝对路径还是相对路径的文件名,所以如果加上绝对路径/开头,未来解开是它就一定会覆盖掉原本的/boot

      还原:cpio -idvc < /tmp/boot.cpio

          还原出一个目录

      查看:cpio -ivct < /tmp/boot/cpio

    所以说cpio与管线命令及数据流导向的相关性就相当重要了