Linux_压缩及其备份

压缩及其备份
Linux 系统常见的压缩指令
常见的压缩文件案扩展名:
*.Z                 compress 程序压缩的档案;
*.gz               gzip 程序压缩的档案;
*.bz2             bzip2 程序压缩的档案;
*.tar              tar 程序打包的数据,并没有压缩过;
*.tar.gz         tar 程序打包的档案,其中并且经过 gzip 的压缩
*.tar.bz2       tar 程序打包的档案,其中并且经过 bzip2 的压缩

gzip 可以说是应用度最广的压缩指令了
目前 gzip 可以解开 compress, zip 不 gzip 等软件所压缩的档案。
当你使用 gzip 进行压缩时,在预设的状态下原本的档案会被压缩成为.gz的档名,源文件就不再存在了== 注意
[root@www ~]# gzip [-cdtv#] 档名
选顷与参数:
-c :将压缩的数据输出到屏幕上,可透过数据流重导向来处理
-d :解压缩的参数
-t :可以用来检验一个压缩文件的一致性~看看档案有无错误
-v :可以显示出原档案/压缩文件案的压缩比等信息
-# :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是 -6

范例一:将 /etc/man.config 复制到 /tmp ,并且以 gzip 压缩
[root@www tmp]# cp /etc/man.config .
[root@www tmp]# gzip -v man.config
[root@www tmp]# ll /etc/man.config /tmp/man*   <==查看与对比

查看gz的压缩文件   <==注意:只能是文件,如是压缩文件夹不行。
[root@www tmp]# zcat man.config.gz
解压gz文件
不要使用gunzip这个指令,不好背!使用gzip -d来进行解压缩
与gzip相反,gzip -d会将原本的.gz删除,产生原本的man.config档案
[root@www tmp]# gzip -d man.config.gz

bzip2的使用  <==效率优胜于gzip
[root@www ~]# bzip2 [-cdkzv#] 檔名
[root@www ~]# bzcat 档名.bz2
选项与参数:
-c :将压缩的过程产生的数据输出到屏幕上
-d :解压缩的参数
-k :保留源文件,而不会删除原始的档案
-z :压缩的参数
-v :可以显示出原档案/压缩文件案的压缩比等信息

范例一:将刚刚的/tmp/man.config 以bzip2的格式压缩
[root@www tmp]# bzip2 -z man.config
查看被压缩的bzip2文件==
[root@www tmp]# bzcat man.config.bz2
档案解压缩        也可以使用bunzip2 这个指令来取代 bzip2 -d
[root@www tmp]# bzip2 -d man.config.bz2


打包指令: tar
[root@www ~]# tar [-j|-z] [cv] [-f 建立的档名] filename...     <==打包与压缩
[root@www ~]# tar [-j|-z] [tv] [-f 建立的档名]                             <==察看档名
[root@www ~]# tar [-j|-z] [xv] [-f 建立的档名] [-C 目录]         <==解压缩
选项与参数:
-c :建立打包档案,可搭配 -v 来察看过程中被打包的档名(filename)
-t :察看打包档案的内容含有哪些档名,重点在察看『档名』就是了
-x :解打包或解压缩的功能,可搭配-C在特定目录解开 特别留意的是,-c,-t,-x 不可同时出现在一串指令列中
-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为*.tar.bz2
-z :透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f :filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选顷
-C :这个选顷用在解压缩,若要在特定目录解压缩,可以使用这个选顷。
-P :(大写)保留备份数据的原本权限不属性,常用于备份(-c)重要的配置文件
-p :保留绝对路径,亦即允讲备份数据中含有根目录存在之意
--exclude=FILE:在压缩的过程中,不要将 FILE 打包!既出了file都要打包的意思。

tar == bzip2的用法:
压 缩:
tar -jcvf filename.tar.bz2 要被压缩的档案或目录名称
查 询:
tar -jtvf filename.tar.bz2
解压缩:
tar -jxvf filename.tar.bz2 -C 解压到欲要指定的目录

tar == gz的用法;
压 缩:
tar -zcvf filename.tar.gz 要被压缩的档案或目录名称
查 询:
tar -ztvf filename.tar.gz
解压缩:
tar -zxvf filename.tar.gz -C 解压到欲要指定的目录

仅解开单一档案的方法(只想要解开打包档案内的其中一个档案时:)
1.先找到我们要的档名,假设解开shadow档案好了
[root@www ~]# tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'    <== -t:察看打包档案的内容含有哪些档名
2.将该档案解开!语法与实际作法如下
[root@www ~]# tar -jxv -f 打包档.tar.bz2 待解开档名
[root@www ~]# tar -jxv -f /root/etc.tar.bz2 etc/shadow

打包某目录,但不含该目录下的某些档案之作法
要打包/etc/ /root这几个重要的目录,但却不想要打包/root/etc*和/root/system.tar.bz2
[root@www ~]# tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2 /etc /root

仅备份比某个时刻还要新的档案
--newer                            表示后续的日期包含『 mtime 与 ctime 』
--newer-mtime                则仅是 mtime 而已
1. 先由find找出比 /etc/passwd 还要新的档案
[root@www ~]# find /etc -newer /etc/passwd
[root@www ~]# ll /etc/passwd
-rw-r--r-- 1 root root 1945 Sep 29 02:21 /etc/passwd
[root@www ~]# tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 --newer-mtime="2008/09/29" /etc/*
[root@www ~]# tar -jtv -f /root/etc.newer.then.passwd.tar.bz2 | grep -v '/$'
透过这个指令可以呼叫出tar.bz2内的结尾非/的档名

tarfile和tarball的区别:
tarfile        仅是打包而已,tar -cv -f file.tar 这个档案我们称呼为 tarfil
tarbal        如果还有进行压缩的支持,tar -jcv -f file.tar.bz2 我们就称呼为 tarball(tar球)

系统备份范例
1. 先处理要放置备份数据的目录不权限
[root@www ~]# mkdir /backups
[root@www ~]# chmod 700 /backups
[root@www ~]# ll -d /backups
2. 假设今天是 2009/11/30 ,则建立备份的方式如下:
[root@www ~]# tar -jcv -f /backups/backup-system-20091130.tar.bz2 --exclude=/root/*.bz2 --exclude=/root/*.gz --exclude=/home/loop* /etc /home /var/spool/mail /var/spool/cron /root

完整备份工具:dump
某些时刻你想要针对文件系统进行备份或者是储存的功能时,不能不谈到这个dump指令
dump 的功能颇强,他除了可以备份整个文件系统之外,还可以制定等级
假设你的/home是独立的一个文件系统,那你第一次进行过dump后,再进行第二次dump时,你可以指定不同的备份等级,假如指定等级为1时,此时新备份的数据只会记录与第一次备份所有差异的档案而已
#:当待备份的资料为单一文件系统
如果是单一文件系统(filesystem),那么该文件系统可以使用完整的dump功能,包括利用0~9的数个level来备份, 同时,备份时可以使用挂载点或者是装置文件名(例如/dev/sda5之类的装置文件名)来进行备份!
dump 的限制
虽然dump支持整个文件系统或者是单一各别目录,但是对于目录的支持是比较不足的
#:待备份的数据只是目录,并非单一文件系统:
例如你仅想要备份/home/someone/,但是该目录并非独立的文件系统时。此时备份就有限制啦!包括:
1、所有的备份数据都必项要在该目录 (本例为:/home/someone/) 底下;
2、且仅能使用level 0 亦即仅支持完整备份而已
3、不支持-u选顷,亦即无法建立/etc/dumpdates 这个各别level备份的时间记录文件
[root@www ~]# dump [-Suvj] [-level] [-f 备份档] 待备份资料
[root@www ~]# dump -W
选顷与参数:
-S :    仅列出后面的待备份数据需要多少磁盘空间才能够备份完毕
-u :    将这次dump的时间记录到/etc/dumpdates档案中
-v :    将dump的档案过程显示出来
-j :    加入 bzip2 的支持!将数据进行压缩,默认 bzip2 压缩等级为2
-level:就是我们谈到的等级,从 -0 ~ -9 共十个等级
-f :    有点类似 tar 啦!后面接产生的档案,亦可接例如 /dev/st0 装置文件名等
-W :    列出在/etc/fstab里面的具有dump设定的partition是否有备份过


用dump备份完整的文件系统
假如要将系统的最小的文件系统找出来进行备份
1、<==查处哪个文件系统最小    -/boot 最小
[root@www ~]# df -h               
/dev/hdc1 99M 11M 83M 12% /boot
2、先测试一下,如果要备份此文件系统,需多少容量?
[root@www ~]# dump -S /dev/hdc1
5630976 <==注意一下,这个单位是bytes,所以差不多是5.6MBytes
3、将完整备份的文件名记录成为/root/boot.dump 同时更新记录文件
[root@www ~]# dump -0u -f /root/boot.dump /boot
[root@www ~]# ll /root/boot.dump /etc/dumpdates
由于加上-u的选顷,因此/etc/dumpdates该档案的内容会被更新
4、观察一下系统主动建立的记录文件:
[root@www ~]# cat /etc/dumpdates

测试,检查看看能否真的建立level 1 的备份?
1、看一下有没有任何文件系统被dump过的资料
[root@www ~]# dump -W
可以显示我们曾经对/dev/hdc1进行过dump的备份动作
2、建立一个大约10MB的档案在/boot内
[root@www ~]# dd if=/dev/zero of=/boot/testing.img bs=1M count=10
3、开始建立差异备份档,此时我们使用level 1
[root@www ~]# dump -1u -f /root/boot.dump.1 /boot
[root@www ~]# ll /root/boot*
4、最后再看一下是否有记录level 1 备份的时间点?
[root@www ~]# dump -W


用dump备份非文件系统,亦即单一目录的方法
以/etc整个目为例,通过dump进行备份,且含压缩功能
#注意:-u, level 1~9 都是不适用的。我们只能够使用level 0 的完整备份将/etc给他dump下来。
[root@www ~]# dump -0j -f /root/etc.dump.bz2 /etc


恢复dump的备份:==restore==
[root@www ~]# restore -t [-f dumpfile] [-h]                <==用来察看dump档
[root@www ~]# restore -C [-f dumpfile] [-D 挂载点]     <==比较dump与实际档案
[root@www ~]# restore -i [-f dumpfile]                             <==进入互动模式
[root@www ~]# restore -r [-f dumpfile]                             <==还原整个文件系统
选顷与参数:
-t :此模式用在察看dump起来的备份文件中含有什么重要数据!类似 tar -t功能
-C :此模式可以将dump内的数据拿出来跟实际的文件系统做比较
-i :进入互动模式,可以仅还原部分档案,用在dump<目录>时的还原!
-r :将整个filesystem还原的一种模式,用在还原针对文件系统的dump备份
其他常用到的选顷功能:
-h :察看完整备份数据中的inode与文件系统label等信息
-f :后面就接你要处理的那个dump档案
-D :不-C进行搭配,可以查出后面接的挂载点与dump内有不同的档案
用restore观察dump后的备份数据内容
[root@www ~]# restore -t -f /root/boot.dump            <==文件系统查看
[root@www ~]# restore -t -f /root/etc.dump            <==目录查看

比较差异并且还原整个文件系统
为什么dump可以进行累积备份呢?就是因为他具有可以查询文件系统与备份文件之间的差异,并且将分析到的差异数据进行备份的缘故。
如何查询有变动过的信息呢?你可以使用如下的方法检验:
1、先尝试变更文件系统的内容:
[root@www ~]# cd /boot
[root@www boot]# mv config-2.6.18-128.el5 config-2.6.18-128.el5-back
2、看使进行文件系统与备份文件之间的差异
[root@www boot]# restore -C -f /root/boot.dump

那如何还原呢?由亍dump是记录整个文件系统的,因此还原时你也应该要给予一个全新的文件系统才行
1、先建立一个新的partition来使用,假设我们需要的是150M的容量(创建并格式化)
[root@www ~]# fdisk /dev/hdc
n    +150M    w   
[root@www ~]# partprobe
[root@www ~]# mkfs -t ext3 /dev/hdc8
[root@www ~]# mount /dev/hdc8 /mnt
2、开始进行还原的动作!== 请您务必到新文件系统的挂载点底下去
[root@www ~]# cd /mnt
[root@www mnt]# restore -r -f /root/boot.dump

仅还原部分档案的restore互动模式
某些时候你只是要将备份档的某个内容捉出来而已,并不想要全部解开
进入restore的互动模式(interactive mode)
[root@www ~]# cd /mnt
[root@www mnt]# restore -i -f /root/etc.dump
help
ls [arg] - list directory <==列出etc.dump内的档案或目录
cd arg - change directory <==在etc.dump内变更目录
pwd - print current directory <==列出在etc.dump内的路径文件名
add file :将file加入等一下要解压缩的档案列表中
delete file :将 file 移除出解压缩的列表,并非删除etc.dump内的档案
extract :开始将刚刚选择的档案列表解压缩了去
quit <==离开restore的功能
透过交互式的restore功能,可以让你将备份的数据取出一部份,而不必全部都得解压缩才能够取得你想要的档案数据


mkisofs:建立映像文件
[root@www ~]#mkisofs [-o 映像档] [-rv] [-m file] 待备份文件.. [-V vol] -graft-point isodir=systemdir
选项与参数:
-o :后面接你想要产生的那个映像档档名
-r :透过Rock Ridge产生支持Unix/Linux的档案数据,可记录较多的信息
-v :显示建置ISO档案的过程
-m file :-m 为排除档案(exclude)的意思,后面的档案不备份到映像档中去
-V vol :建立Volume,有点像Windows的CD title的东西
-graft-point:graft有转嫁或移植的意思 此选项很重要:规划文档的作用
光盘的格式一般称为 iso9660
[root@www ~]# mkisofs -r -V 'linux_file' -o /tmp/system.iso -m /home/lost+found -graft-point /root=/root /home=/home /etc=/etc
-graft-point 后面接的就是我们要备份的数据
[root@www ~]# mount -o loop /tmp/system.iso /mnt
[root@www ~]# ll /mnt

dd 用法:
dd 可备份完整的partition或disk ,因为dd可读取磁盘的sector表面数据
dd 可以读取磁盘装置的内容(几乎是直接读取扇区"sector"),然后将整个装置备份成一个档案
1、建立大文档:
[root@www ~]# dd if="input_file" of="output_file" bs="block_size" count="number"
选项与参数:
if :就是input file,也可以是装置喔
of :就是output file,也可以是装置
bs :规划的一个block的大小,若未指定则预设是512bytes(一个 sector的大小)
count:多少个bs的意思
2、备份
将/etc/passwd备份到/tmp/passwd.back当中
[root@www ~]# dd if=/etc/passwd of=/tmp/passwd.back
3、
将你的/dev/hdc1进行完整的复制到另一个partition上
#不需要格式化,直接迚行sector表面的复制
[root@www ~]# dd if=/dev/hdc1 of=/dev/hdc9
[root@www ~]# mount /dev/hdc9 /mnt

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值