声明:本文章为《鸟哥的Linux私房菜》读书摘要!
两种压缩技术:
1、假设我们记录 1 ,考虑计算机所谓的二进制,如此一来,1会在最右边占据 1 个 bit,而其他的7 个bits将会自动的被填上 0 !那 7个bits 应该是『空的』才对!不过,为了要满足目前我们的操作系统数据的存取,所以就会将该数据转为byte的型态来记录了!而一些聪明的计算机工程师就利用一些复杂的计算方式, 将这些没有使用到的空间『丢』出来,以让文件占用的空间变小。
2、将重复的数据进行统计记录的。举例来说,如果你的数据为『111....』共有100 个 1时, 那么压缩技术会记录为『100个 1』而不是真的有100个 1的位存在!这样也能够精简文件记录的容量。
常见的压缩文件扩展名
*.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, zip与gzip 等软件所压缩的文件
范例四的重点在那个 -c 与>的使用。-c可以将原本要转成压缩文件的资料内容,将它变成文字类型从屏幕输出,然后我们可以透过大于(>)这个符号,将原本应该由屏幕输出的数据,转成输出到文件而不是屏幕,所以就能够建立出压缩挡了。只是档名也要自己写,当然最好还是遵循gzip的压缩文件名要求较佳。
cat/more/less 可以使用不同的方式来读取纯文本档,那个zcat/zmore/zless则可以对应于cat/more/less的方式来读取纯文本档被压缩后的压缩文件。
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欲解压缩的目录
假设目前你已经知道重要的目录有底下这几个:
/etc/ (配置文件)
/home/ (用户的家目录)
/var/spool/mail/ (系统中,所有账号的邮件信箱)
/var/spool/cron/ (所有账号的工作排成配置文件)
/root (系统管理员的家目录)
然后我们也知道,由于第七章曾经做过的练习的关系,/home/loop*不需要备份,而且/root 底下的压缩文件也不需要备份,另外假设你要将备份的数据放置到/backups,并且该目录仅有root 有权限进入! 此外,每次备份的档名都希望不相同,例如使用:backup-system-20150701.tar.bz2之类的档名来处理。 那你该如何处理这个备份数据呢?
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 的选项!!