您的位置:首页 > 运维架构 > Linux

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

2016-12-16 13:42 246 查看
声明:本文章为《鸟哥的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
等软件所压缩的文件







当你使用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 的选项!!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: