linux读书摘要--文件与文件系统的压缩、打包与备份

声明:本文章为《鸟哥的Linux私房菜》读书摘要!


两种压缩技术:

1、假设我们记录 1 ,考虑计算机所谓的二进制,如此一来,1会在最右边占据 1 bit,而其他的7 bits将会自动的被填上 0 !那 7bits 应该是『空的』才对!不过,为了要满足目前我们的操作系统数据的存取,所以就会将该数据转为byte的型态来记录了!而一些聪明的计算机工程师就利用一些复杂的计算方式, 将这些没有使用到的空间『丢』出来,以让文件占用的空间变小。

2、将重复的数据进行统计记录的。举例来说,如果你的数据为『111....』共有100 1时, 那么压缩技术会记录为『1001』而不是真的有1001的位存在!这样也能够精简文件记录的容量


常见的压缩文件扩展名

*.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, zcat/zmore/zless/zgrep

    gzip可以说是应用度最广的压缩指令了。目前gzip可以解开 compress, zipgzip 等软件所压缩的文件 


    当你使用gzip进行压缩时, 在预设的状态下原本的文件会被压缩成为.gz的档名,源文件就不再存在了
    范例四的重点在那个 -c >的使用。-c可以将原本要转成压缩文件的资料内容,将它变成文字类型从屏幕输出,然后我们可以透过大于(>)这个符号,将原本应该由屏幕输出的数据,转成输出到文件而不是屏幕,所以就能够建立出压缩挡了。只是档名也要自己写,当然最好还是遵循gzip的压缩文件名要求较佳。

    cat/more/less 可以使用不同的方式来读取纯文本档,那个zcat/zmore/zless则可以对应于cat/more/less的方式来读取纯文本档被压缩后的压缩文件。


bzip2, bzcat/bzmore/bzless/bzgrep
xz, xzcat/xzmore/xzless/xzgrep
三者的压缩性能为gzip<bzip2<xz。其中bzip2和xz的用法和gzip差不多。

打包指令:tar
    gzip, bzip2, xz 
大多仅能针对单一文件来进行压缩。也能够针对目录来进行压缩,不过,这两个个指令对目录的压缩指的是『将目录内的所有文件"分别"进行压缩』的动作。所以linux需要tar这个打包指令。


    我们常用的tar的使用方式是

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


例题:系统备份范例

    系统上有非常多的重要目录需要进行备份,而且其实我们也不建议你将备份数据放置到/root目录下!
    假设目前你已经知道重要的目录有底下这几个:
/etc/ (配置文件)
/home/ (用户的家目录)
/var/spool/mail/ (系统中,所有账号的邮件信箱)
/var/spool/cron/ (所有账号的工作排成配置文件)
/root (系统管理员的家目录)
    然后我们也知道,由于第七章曾经做过的练习的关系,/home/loop*不需要备份,而且/root 底下的压缩文件也不需要备份,另外假设你要将备份的数据放置到/backups,并且该目录仅有root 有权限进入! 此外,每次备份的档名都希望不相同,例如使用:backup-system-20150701.tar.bz2之类的档名来处理。 那你该如何处理这个备份数据呢?

XFS文件系统的备份与还原 

    xfsdump的功能颇强!他除了可以进行文件系统的完整备份(full backup)之外,还可以进行累积备份(Incremental backup)第一次备份一定是完整备份,完整备份在xfsdump当中被定义为 level 0。
    关于xfsdump使用应该注意如下的限制:
xfsdump不支援没有挂载的文件系统备份!所以只能备份已挂载的!
xfsdump 必须使用 root 的权限才能操作 (涉及文件系统的关系)
xfsdump 只能备份 XFS 文件系统啊!
xfsdump 备份下来的数据 (文件或储存媒体)只能让xfsrestore 解析
xfsdump 是透过文件系统的 UUID 来分辨各个备份档的,因此不能备份两个具有相同UUID的文件系统喔!
xfsdump 预设仅支持文件系统的备份,并不支持特定目录的备份~所以你不能用xfsdump去备份/etc ! 因为 /etc从来就不是一个独立的文件系统

XFS文件系统还原xfsrestore


    建立光盘映像文件以及刻录软件。文本模式的刻录行为要怎么处理呢?通常的作法是这样的:
先将所需要备份的数据建置成为一个映像档(iso),利用mkisofs指令来处理;
将该映像文件刻录至光盘或DVD当中,利用cdrecord指令来处理。


dd
    dd指令可不只是制作一个文件而已。这个 dd 指令最大的功效,应该是在于『备份』。因为 dd 可以读取磁盘装置的内容(几乎是直接读取扇区"sector"),然后将整个装置备份成一个文件呢! dd的用途有很多~但是我们仅讲一些比较重要的选项

    例题:你想要将你的 /dev/vda2 进行完整的复制到另一个 partition 上,请使用你的系统上面未分区完毕的容量再建立一个与 /dev/vda2 差不多大小的分区槽 (只能比 /dev/vda2 大,不能比他小! ),然后将之进行完整的复制 (包括需要复制 boot sector 的区块)。
    答:因为我们的 /dev/sda 也是个测试的 USB 磁盘,可以随意恶搞!我们刚刚也才测试过将光盘映像文件给它复制进去而已。 现在,请你分区 /dev/sda1 出来,然后将 /dev/vda2 完整的拷贝进去 /dev/sda1 


    新分区出来的 partition 不需要经过格式化,因为 dd 可以将原本旧的 partition 上面,将sector 表面的数据整个复制过来! 当然连同 superblock, boot sector, meta data 等等通通也会复制过来!是否很有趣呢?未来你想要建置两颗一模一样的磁盘时, 只要下达类似: dd if=/dev/sda of=/dev/sdb ,就能够让两颗磁盘一模一样,甚至 /dev/sdb 不需要分区与格式化, 因为该指令可以将 /dev/sda 内的所有资料,包括 MBR 与partition table 也复制到 /dev/sdb 


cpio

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

    我们使用 find boot 可以找出档名,然后透过那条管线 (|, 亦即键盘上的 shift+\ 的组合), 就能将档名传给 cpio 来进行处理!最终会得到 /tmp/boot.cpio 那个文件喔!你可能会觉得奇怪,为啥要先转换目录到 / 再去找 boot 呢? 为何不能直接找 /boot 呢? 这是因为 cpio 很笨!它不会理会你给的是绝对路径还是相对路径的文件名,所以如果你加上绝对路径的 / 开头, 那么未来解开的时候,它就一定会覆盖掉原本的 /boot 耶!那就太危险了!这个我们在 tar 也稍微讲过那个 -P 的选项!!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值