Linux文件压缩与打包
第九章 总结压缩文件的用途与技术比较大型的文件通过所谓的压缩技术之后,可以将它的磁盘使用量降低,可以达到减低文件大小的效果,此外,有的压缩程序还可以进行大小限制,使一个大型文件系统可以分成为数个小型文件,以方便软盘携带。1byte等于8位,对于未使用的位,则置为空。利用一些复杂的计算方式,将这些没有使用的空间丢出去,以让文件占用的空间变小的技术为压缩技术。压缩可以想象成这样,文件里面
第九章 总结
压缩文件的用途与技术
比较大型的文件通过所谓的压缩技术之后,可以将它的磁盘使用量降低,可以达到减低文件大小的效果,此外,有的压缩程序还可以进行大小限制,使一个大型文件系统可以分成为数个小型文件,以方便软盘携带。
1byte等于8位,对于未使用的位,则置为空。利用一些复杂的计算方式,将这些没有使用的空间丢出去,以让文件占用的空间变小的技术为压缩技术。
压缩可以想象成这样,文件里面有相当多的空间存在,并不是完全填满的,而压缩的技术就是将这些空间填满,以让整个文件占用的容量下降。将压缩过的文件还原的过程即为解压缩。压缩前与压缩后的文件所占用的磁盘空间大小称为压缩比。
压缩与解压缩好处:压缩过的文件变小了,所以硬盘无形之中就可以容纳更多的数据。此外,一些网络数据的传输中,也会由于数据量的降低,好让网络带宽可以用来做更多的工作。而不是老是卡在一些大型的文件传输上面。很多www网站就是利用文件压缩技术来进行数据的传送,提高带宽的可利用率。
Linux系统常见的压缩命令
在Linux环境下,压缩文件案的扩展名大多是.tar,.tar.gz,.tgz,.gz,.Z,.bz2。带有扩展名原因:Linux支持的压缩命令非常多,且不同的命令所用的压缩技术并不相同,彼此之间可能无法相互压缩/解压缩文件。所以,下载某个压缩文件时,需要知道该文件是由哪个压缩命令所制造出来的,好用来对照解压缩。即Linux文件的属性基本上与文件名没有绝对关系,但为了帮助记忆,使用适当的扩展名还是有必要的。
常见的压缩文件案扩展名:
*.Z:compress程序压缩的文件
*.gz:gzip程序压缩的文件
*.bz2:bzip2程序压缩的文件
*.tar:tar程序打包的数据,并没有压缩过
*.tar.gz:tar程序打包的文件,其中经过gzip的压缩
*.tar.bz2:tar程序打包的文件,其中经过bzip2的压缩
Compress
compress这个压缩命令是非常老旧的一款,大概只有在非常旧的UNIX机器上面还会找到这个软件。CentOS默认并没有安装这个软件到系统中,所以想了解这个软件的使用,需先安装ncompress这个软件。不过gzip已经可以解开使用compress压缩的文件。
安装ncompress软件
yum install ncompress
apt-get install ncompress
compress命令使用
compress [-rcv] 文件或目录 压缩命令
uncompress 文件名.Z 解压命令
参数
-r:可以连同目录下的文件也同时给予压缩
-c:将压缩数据输出成为standard output(输出到屏幕)
-v:可以显示出压缩后的文件信息以及压缩过程中的一些文件名变化
将/etc/man.config复制到/tmp,并加以压缩
cd /tmp
cp /etc/man.config .
compress –v man.config
ls –l /etc/man.config /tmp/man*
上述命令执行结果是man.config不见了,因为被压缩为man.config.Z了。默认情况下,被compress压缩的源文件会不见,而压缩文件会被创建起来,而且扩展名会是*.Z。
解压缩操作
uncompress man.config.Z
ll man*
解压缩直接用umcompress即可。解压缩完毕后该文件就自动会变回来了。不过压缩文件却又不存在了。如果想要保留源文件且又要压缩,使用-c选项。
compress –c man.config>man.config.back.Z
ll man*
-c选项会将压缩过程的数据输出到屏幕上,而不是写入文件,故通过数据流的重定向的方法将数据输出成另一个文件名。
再次强调,compress已经很少人在使用,因为这个程序无法解开.gz的文件,而gzip可以解开.Z的文件。
gzip,zcat
gzip应用非常广泛。gzip可以解开compress、zip、gzip等软件所压缩的文件。gzip所建的压缩文件为*.gz的文件名。此命令的语法如下:
gzip [-cdtv#] 文件名
zcat 文件名.gz
参数:
-c:将压缩的数据输出到屏幕上,可通过数据流重定向来处理;
-d:解压缩的参数;
-t:可以用来检验一个压缩文件的一致性,看看文件有无错误;
-v:可以显示出原文件/压缩文件的压缩比等信息;
-#:压缩等级,-1最快,但是压缩比最差,-9最慢,但是压缩比最好,默认是-6。
将/etc/man.config复制到/tmp中,并且以gzip压缩
cd /tmp
cp /etc/man.config .
gzip –v man.config
ll /etc/man.config /tmp/man*
与compress类似,当使用gzip进行压缩时,在默认的状态下原本的文件会被压缩成为.gz的文件名,原文件就不再存在了。可以发现,由于gzip的压缩比要比compress好得多,所以建议使用gzip。此外,使用gzip压缩的文件在windows系统中,竟然可以被WinRAR这个软件解压缩。其他用法如下:
将压缩文件中的内容读出来,使用如下命令:
zcat man.config.gz 由于man.config这个原本的文件是文本文件,故可以尝试使用zcat读取。屏幕上显示man.config.gz解压之后的文件内容。
将文件解压缩,使用如下命令:
gzip –d man.config.gz 使用-d选项可以将其解压,同时删除.gz文件
用最佳的压缩比压缩,并保留原来的文件,使用如下命令:
gzip -9 –c man.config>man.config.gz
gzip的压缩已经优化了,虽然gzip提供1~9的压缩等级,不过使用默认的6是非常好用的。
cat可以读取纯文本文件,zcat可以读取纯文本被压缩后的压缩文件。由于zip这个压缩命令主要想要用来替代compress的,不但compress的压缩文件可以使用gzip来解开,同时zcat这个命令可以同时读取compress和gzip的压缩文件。
bzip2,bzcat
gzip为了替代compress并提供更好的压缩比而成立的,而bzip2则是为了取代gzip并提供更佳的压缩比而来的。bzip2的用法与gzip相同。
bzip2 [-cdkzv#] 文件名
bzcat 文件名.bz2
参数:
-c:将压缩过程中产生的数据输出到屏幕上;
-d:解压缩的参数;
-k:保留原文件,而不会删除原始的文件;
-z:压缩的参数
-v:可以显示出原文件/压缩文件的压缩比等信息;
-#:与gzip同样的,都是在计算压缩比的参数,-9最佳,-1最快。
将刚才的/tmp/man.config以bzip压缩
bzip2 –z man.config
将压缩文件读出来
bzcat man.config.bz2
解压缩
bzip2 –d man.config.bz2
将man.config用最佳压缩比压缩,并保留原本的文件
bzip2 -9 –c man.config>man.config.bz2
使用compress扩展名自动创建为.Z,使用gizp扩展名自动创建为.gz,而使用bzip2则自动将扩展名构建为.bz2。使用bzcat这个命令可以读取.bz2压缩的文件。当要解开一个压缩文件时,这个文件的名称为.bz,.bz2,tbz,tbz2等,可以尝试使用bzip2来解压缩。也可以使用bunzip这个命令来替代bzip2 –d。
打包命令:tar
虽然gzip和bzip2都能够针对目录来进行压缩,不过,这两个命令对目录的压缩指的是将目录内的所有文件“分别”进行压缩的操作,而不像在Windows系统中,可以使用WinRAR这一类的压缩软件来将好多的数据“包成一个文件”的样式。
将多个文件或目录包成一个大文件的命令功能是打包命令。tar可以将多个目录或文件打包成一个大文件,同时还可以通过gzip/bzip2的支持,将该文件同时进行压缩。目前,tar使用比较广泛,且Windows的WinRAR也支持.tar.gz文件名的解压缩。
tar
tar [-j][-z] [cv] [-f 新建的文件名] filename 打包与压缩
tar [-j][-z][tv] [-f 新建的文件名] 查看文件名
tar [-j][-z] [xv] [-f 新建的文件名] [-C 目录] 解压缩
参数:
-c:新建打包文件,可搭配-v来查看过程中被打包的文件名(filename)
-t:查看打包文件的内容含有哪些文件名,重点在查看文件名。
-x:解打包或解压缩的功能,可以搭配-C(大写)在特定目录解开
-j:通过bzip2的支持进行压缩/解压缩,此时文件名最好为*.tar.bz2
-z:通过gzip的支持进行压缩/解压缩,此时文件名最好为*.tar.gz。
-v:在压缩/解压缩的过程中,将正在处理的文件名显示出来
-f filename:-f后面要接被处理的文件名。建议-f单独写一个参数
-C 目录:这个参数用在解压缩时,若要在特定目录解压缩,可以使用这个参数。
-p:保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件。
-P:保留绝对路径,即允许备份数据中含有根目录存在之意。
–exclude=FILE:在压缩的过程中,不要将FILE打包。
简单记忆tar命令,使用如下方式:
压缩:tar –jcv –f filename.tar.bz2要被压缩的文件或目录名称
查询:tar –jtv –f filename.tar.bz2
解压缩:tar –jxv –f filename.tar.bz2 –C 欲解压缩的目录
filename.tar.bz2是自己取得文件名,tar并不会主动产生创建的文件名。如果不加[-jl-z]的话,文件名最好取为.tar即可。如果是-j参数,代表有bzip2的支持,因此文件名最好就取名为.tar.bz2,因为bzip2会产生bz2的扩展名。如果使用-z参数,即支持gzip,故文件名最好取*.tar.gz。
使用tar加入-j或-z参数备份/etc/目录
tar –zpcv –f /root/etc.tar.gz /etc
tar –jpcv –f /root/etc.tar.bz2 /etc
使用bzip2也即-j参数来制作备份时,能够得到比较好的压缩比。加上-p参数原因是为了保存原本文件的权限与属性。在备份重要的系统数据时,原本文件的权限需要做完整的备份比较好。
查阅tar文件的数据内容(可查看文件名),与备份文件名有否根目录的意义
查看文件名,使用如下命令:
tar –jtv –f /root/etc.tar.bz2
使用-v参数,将显示详细的文件权限/属性。如果想知道文件名而已,则可以去掉-v选项。此时显示的每个文件名都没有根目录。原因是压缩过程中,去掉了根目录。
为什么要去掉根目录:主要是为了安全,使用tar备份的数据可能会需要解压缩回来使用,在tar所记录的文件名(即刚才使用tar –jtvf所查看到的文件名)那就是解压缩后的实际文件名。如果去掉了根目录,假设你将备份数据在/tmp中解压,那么解压缩的文件名就会变成/tmp/etc/。但如果没有去掉根目录,解压缩后的文件名就会是绝对路径,即解压缩后的数据一定会被放置到/etc/去。如此一来,原本的/etc/下面的数据就会被备份数据所覆盖。
如果确定需要备份根目录到tar文件中,可以使用-P(大写)这个参数。
将文件名中的(根)目录也备份下来,并查看备份文件的文件名
tar –jpPcv –f /root/etc.and.root.bz2 /etc
tar –jtf /root/etc.and.root.bz2
上面命令中,加上-P参数,则文件名内的根目录就会存在。建议:不要使用-P参数。因为很多时候,备份是用来追踪问题,而不是还原回原本的系统。
将备份的数据解压缩,并考虑特定目录的解压缩操作(-C参数的应用)
tar –jxv –f /root/etc.tar.bz2
ll
使用-C选项,可以将压缩文件解压到指定的文件,具体如下:
tar –jxv –f /root/etc.tar.bz2 –C /tmp
上面的命令即为将压缩文件解压到/tmp目录下。
删除解压后的文件,可以使用如下命令
rm – rf /etc
注意:rm –rf命令比较危险,使用时一定要确认后面的文件名没有错误。
仅解开单一文件方法
使用-jtv选项可以找到想要的文件名文件,并将其解压
首先查找要解压的文件,假设是shadow文件
tar –jtv –f /root/etc.tar.bz2 | grep ’shadow’
将文件解压,执行如下操作
tar –jxv –f 打包文件.tar.bz2 待解开文件名
tar –jxv –f /root/etc.tar.bz2 ect/shadow
ll etc
打包某目录,但不含该目录下的某些文件的做法
打包某目录,但不包含该目录下某些文件,使用—exclude参数,此参数的意思是不包含。
tar –jcv –f /root/system.tar.bz2 –exclude=/root/etc* –exclude=/root/system.tar.bz2 /etc /root
通过—exclude=”file”的操作,可以将几个特殊的文件或目录删除在打包之列,让打包的操作变得更简单。
仅备份比某个时刻还要新的文件
某些情况下会先要备份新的文件,并不想备份旧文件,此时使用—newer-mtime参数即可。-newer参数表示后续的日期包含mtime和ctime,而—newer-mtime则仅是mtime而已。
使用find找出比/etc/passwd还要新的文件
find /etc –newer /etc/passwd 显示出比/etc/passwd这个文件的mtime还要新的文件名
ll /etc/passwd
使用tar进行打包
tar –jcv –f /root/etc.newer.then.passwd.tar.bz2 –newer-mtime=”2008/09/29” /etc/*
显示文件即可
tar –jtv –f /root/etc.newer.then.passwd.tar.bz2 | grep-v ‘/$’ 通过这个命令可以调出tar.bz2内的结尾非/的文件名
tar这个命令甚至可以进行差异文件的记录与备份。如果在一个月前才进行过一次完整的数据备份,那么这个月想要备份时,可以仅备份上个月进行备份的那个时间点之后的更新文件即可。因为原本的文件已经有了备份。只要备份新数据即可。可以降低备份的容量。
基本名称:tarfile,tarball
tar打包出来的文件有没有进行压缩所得到的文件称谓不同。如果仅是打包而已,就是tar –cv –f file.tar而已,这个称为tarfile。如果还有进行压缩的支持,如tar –jcv –f file.tar.bz2时,称为tarball(tar球)。
tar除了可以将数据打包成文件之外,还能够将文件打包到某些特别设备去,如磁带机。磁带机由于是一次性读取/写入的设备,因此不能够使用cp命令来复制。如果想将/home,/root,/etc备份到磁带机(/dev/st0)时,就可以使用“tar –cv –f /dev/st0 /home /root /etc。磁带机用在备份(尤其是企业应用)是很常见的工作。
特殊应用:利用管道命令与数据流
将/etc整个目录一边打包一边在/tmp中解开
cd /tmp
tar –cvf - /etc | tar –xvf –
上面操作与cp –r /etc /tmp有相同的作用。要注意的地方在于输出文件变成-,而输入文件也变成-,又有一个|存在。分别代表standard output,standard input与管道命令,可以将-想成是内存中的一个设备(缓冲区)。
系统备份操作
系统上有非常多的重要目录需要进行备份,而且其实不建议将备份数据放置到/root下,假设目前已经知道的重要目录如下:
/etc/(配置文件)
/home/(用户的主文件夹)
/va/spool/mail/(系统中,所有账户的邮件信封)
/var/spool/cron/(所有账号的工作调度配置文件)
/root(系统管理员的主文件夹)
把之前建立的*.tar.bz2文件去除
首先处理要放置数据的目录与权限:
mkdir /backups
chmod 700 /backups
ll –d /backups
假设今天是2016/06/27,则新建备份的方式如下:
tar –jcv –f /backups/backup-system-20160627.tar.bz2 –exclude=/root/.bz2 –execlude=/root/.gz –execlude=/home/loop* /etc /home /var/spool/mail /var/spool/cron /root
ll –h /backups/
完整备份工具:dump
当要针对文件系统进行备份或者是存储功能时,不能不谈到dump命令。dump命令除了能够针对整个文件系统备份之外,也能够仅针对目录来备份。
dump
dump功能很强,它除了可以备份整个文件系统之外,还可以制定等级。如/home是独立的一个文件系统,则第一次经过dump后,再进行第二次dump,可以指定不同的备份等级。如制定等级为1时,此时新备份的数据只会记录与第一次备份有所差异的文件而已。虽然dump支持整个文件系统或者是单一目录,但是对于目录的支持是比较不足的,这也是dump的限制所在。具体限制如下:
当待备份的数据为单一文件系统
如果是单一文件系统,那么该文件系统可以使用完成的dump功能,包括利用0~9的数个level来备份,同时,备份时可以使用挂载点或者是设备文件名来进行备份。
待备份的数据只是目录,并非单一文件系统
如想要备份/home/someone,但是该目录并非独立的文件系统时,此时备份就有限制。包括:
所有的备份数据必须要在该目录下面
且仅能使用level 0,即仅支持完整备份而已
不支持-u参数,即无法创建/etc/dumpdates这个备份的时间记录文件
dump [-Suvj] [-level] [-f 备份文件] 待备份数据
dump –W
参数:
-S:仅列出后面的待备份数据需要多少磁盘空间才能够备份完毕
-u:将这次dump的时间记录到/etc/dumpdateS文件中
-v:将dump的文件过程显示出来
-j:加入bzip2的支持,将数据进行压缩,默认bzip2压缩等级为2
-level:即等级0~9共10个等级
-f:类似tar,后面接产生的文件,可接入/dev/st0设备文件名
-W:列出在/etc/fstab里面具有dump设置的分区是否有备份过
用dump备份完整的文件系统
先找出系统中最小的那个文件系统
df –h
测试一下如果要备份此文件系统需要多少容量
dump –S /dev/hdc1
将完整备份的文件名记录成为/root/boot.dump,同时更新记录文件
dump -0u –f /root/boot.dump/boot
ll /root/boot.dump /etc/dumpdates
查看一下系统自动新建的记录文件
cat /etc/dumpdates
这样就很简单地新建了/root/boot.dump文件,该文件将整个/boot/文件系统都备份起来。并且将备份的时间写入/etc/dumpdates文件中,准备让下次备份时可以作为一个参数依据。
看一下有没有任何文件系统被dump过的数据
dump –W
新建一个大约10MB的文件在/boot内
dd if=/dve/zero of=/boot/testing.img bs=1M Mcount=10
开始新建差异备份文件,使用level1
dump -1u –f /root/boot.dump.1 /boot
ll /root/boot*
最后查看是否有记录level 1备份时间点
dump –W
通过上述,就能够仅备份差异文件部分。
单一目录的dump用户
用dump备份非文件系统,即单一目录的方法
将整个/etc目录通过dump进行备份,且含压缩功能
dump -0j –f /root/etc.dump.bz2 /etc
一般来说dump不会使用包含压缩的功能,不过如果想要将备份的空间降低,-j参数可以使用。使用-j参数后dump的结果会使用较少的硬盘空间。
restore
备份文件就是在急用时可以恢复系统的重要参数。dump的恢复使用的是restore这个命令。
restore –t [-f dumpfile] [-h] 查看dump文件
restore –C [-f dumpfile] [-D 挂载点] 比较dump与实际文件
restore –i [-f dumpfile] 进入互动模式
restore –r [-f dumpfile] 还原整个文件系统
参数:
相关的各种模式,各种模式无法混用。如不可以写成-tC
-t:此模式用在查看dump起来的备份文件中含有什么重要数据,类似tar –t功能
-C:此模式可以在dump内的数据拿出来跟实际的文件系统作比较,最终会列出在dump文件内有记录的,且目前文件系统不一样的文件
-i:进入互动模式,可以仅还原部分文件,用在dump目录时的还原
-r:将整个文件系统还原的一种模式,用在还原针对文件系统的dump备份
其他常用到的参数功能:
-h:查看完整备份数据中的inode与文件系统label等信息
-f:后面就接要处理的那个dump文件
-D:与-C进行搭配,可以查出后面接的挂载点与dump内有不同的文件。
使用restore查看dump后的备份数据内容
restore –t –f /root/boot.dump
restore –t –f /root/etc.dump
这个查阅的数据显示出的是文件名与源文件的inode的状态,即dump会参考inode的记录。
比较差异并且还原整个文件系统
dump可以进行累积备份:因为它具有可以查询文件系统与备份文件之间的差异,并且将分析到的差异数据进行备份。
先尝试更改文件系统的内容
cd /root
mv config config.back
查询文件系统与备份文件之间的差异
restore –C –f /root/boot.dump
将文件系统改回来
mv configback config
cd /root
通过曾经备份过的信息,也可以找到与目前实际文件系统中有差异的数据。由于dump是记录整个文件系统的,因此还原时,应该要给予一个全新的文件系统才行。
先新建一个新的分区来使用
fdisk /dev/hdc
n
+150M
p
w
partprobe
格式化分区
mkfs –t ext3 /dev/hdc8
mount /dev/hdc8 /mnt
开始进行还原操作
cd /mnt
restore –r –f /root/boot.dump
当备份整个文件系统时,需要构建一个全新的文件系统来进行还原操作。这个还原操作不难,最后一个命令就是将备份文件中的数据还原到本目录下。注意:必须要更改目录到挂载点所在的那个目录才行。这样还原的文件才不会跑错地方。如果还想要将level 1的/root/boot.dump.1那个文件的内容还原,就继续使用restore –r –f /root/boot.dump.1去还原。
仅还原部分文件的restore互动模式
可以使用restore互动模式来还原备份文件的部分内容。
cd /mnt
restore –i –f /root/etc.dump
输入help命令,会显示相关参数信息
add file:将file加入等一下要解压缩的文件列表中
delete file:将file解压缩的列表中删除,并非删除etc.dump内的文件
extract:开始将刚才选择的文件列表解压缩
ls
cd etc
pwd
ls passwd shadowgroup
add passwd shadowgroud
delete group
ls passwd shadowgroup
extract
quit
ll –d etc
ll etc
通过交互式restore功能,可以让你将备份的数据取出一部分,而不必全部都得解压缩才能够取得你想要的文件数据。而restore内的add除了可以增加文件之外,也能够增加整个备份的目录。
光盘写入工具
某些重要的、需要重复备份的数据(可能具有时间特性),可能会需要使用类似的DVD之类的存储媒体来备份。
命令行模式的刻录行为处理做法如下:
先将所需要备份的数据构建成为一个镜像文件(iso),利用mkisofs命令来处理;
将该镜像文件刻录至光盘或DVD当中,利用cdrecord命令来处理。
mkisofs:新建镜像文件
从FTP站下载来的Linux镜像文件,都要继续刻录成为光盘/DVD后才能够进一步的使用,包括安装或更新你的Linux。同样,想要利用刻录机将你的数据刻录到DVD时,也得要先将你的数据包成一个镜像文件,这样才能够写入DVD片中。而将数据包成一个镜像文件的方式是通过mkisofs这个命令。Mkisofs使用方式如下:
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
-graft-point:graft有转嫁或移植的意思,相关数据在下面的文章内说明。
mkisofs有非常多好用的参数可以选择,不过如果只是想要制作数据光盘,上述参数就够用。光盘的格式一般称为ISO9660,这种格式一般仅支持旧版的DOS文件名,即文件名只能以8.3(文件名8个字符,扩展名3个字符)的方式存在。如果加上-r的参数之后,那么文件信息能够被记录得比较完整,可包含UID/GID与权限等。故应该加上-r的参数。
此外,一般默认情况下,所有要被加载到镜像文件中的文件都会被放置到镜像文件中的根目录,如此一来可能会造成刻录后的文件分类不清的情况。故可以使用-graft-point这个参数,当使用这个参数后,可以利用如下的方法来定义位于镜像文件中的目录,如:
镜像文件中的目录所在=实际Linux文件系统的目录所在
/movies/=/srv/movies/(在Linux的/srv/movies内的文件,加至镜像文件中的/movies/目录)
/linux/etc=/etc(将Linux中的/etc/内的所有数据备份到镜像文件中的/linux/etc/目录中)
想要将/root,/home,/etc等目录内的数据全部刻录起来的话,使用如下操作:
mkisofs –r –v –o /tmp/system.img /root /home /etc
ll –h /tmp/system.img
mount –o loop /tmp/system.img /mnt
df –h
ls /mnt
umount /mnt
上面命令将三个目录(/root,/home,/etc)的数据全部放置到了镜像文件的最顶层目录中。不太合理,下面使用-graft-point参数。
mkisofs –r –V ‘linux file’ –o /tmp/system.img –m /home/lost+found –graft-point /root=/root /home=/home /etc=/etc
ll –h /tmp/system.img
mount –o loop/tmp/system.img /mnt
ll /mnt
umount /mnt
cdrecord:光盘刻录工具
通过cdrecord命令来进行命令行界面的刻录,常见的参数如下:
cdrecord –scanbuSdev=ATA 查询刻录机位置
cdrecord –v dev=ATA:x,y,z blank=[fast|all] 抹除重复读写片
cdrecord –v dev=ATA:x,y,z –format 格式化DVD+RW
cdrecord –v dev=ATA:x,y,z [可用参数功能] file.iso
参数:
-scanbuS:用在扫描磁盘总线并找出可用的刻录机,后续的设备为ATA接口
-v:在cdrecord进行的过程中,显示过程而已。
dev=ATA:x,y,z:后续x,y,z为系统上刻录机所在的位置,非常重要
blank=[fast|all]:blank为抹除可重复写入的CD/DVD-RW,使用fast较快,all较完整。
-format:仅针对DVD+RW时可使用的参数,常见的参数如下:
-data:指定后面的文件以数据格式写入,不是以CD音轨(-audio)方式写入
speed=X:指定刻录速度,如CD可用speed=40为40倍数,DVD则用speed=4之类
-eject:指定刻录完毕后自动退出光盘
fs=Ym:指定多个缓冲器,可用在将镜像文件暂时存至存区,默认为4MB,建议可增加到8M,不过,还得视刻录机而定
针对DVD的参数功能
driveropts=burnfree:打开Buffer Underrun Free模式的写入功能
-sao:支持DVD-RW
检测刻录机所在位置
检测刻录机所在位置,使用如下命令:
cdrecord –scanbus dev=ATA
进行CD刻录操作
先抹除光盘的原始内容(非可重复读写则可忽略此过程)
cdrecord –v dev=ATA:1,1,0 blank=fast
开始刻录
cdrecord –v dev=ATA:1,1,0 fs=8m –dummy –data /tmp/system.img
刻录完毕后,测试挂载,检验
mount –t iso9660 /dev/cdrom /mnt
df –h /mnt
ll /mnt
umount /mnt
进行DVD-RW的刻录操作
先抹除以下原本的内容
cdrecord –v dev=ATA:1,1,0 blank=fast
开始写入DVD,注意有些参数与CD不同
cdrecord –v dev=ATA:1,1,0 fs=8m –data –sao driveropts=burnfree /tmp/system.img
同样,测试
mount /dev/cdrom /mnt
df –h /mnt
umount /mnt
其他常见的压缩与备份工具
dd
dd可以读取磁盘设备的内容(几乎直接读取扇区),然会将整个设备备份成一个文件。
dd if=”input file” of=”output file” bs=”block size” count=”number”
参数:
if:是input file,可以是设备
of:是output file,可以是设备
bs:规划的一个block大小,未指定默认为512bytes(一个扇区大小)
count:多少个bs
将/etc/passwd备份到/tmp/passwd.back当中
dd if=/etc/passwd of=/tmp/passwd.back
ll /etc/passwd /tmp/passwd.back
将自己的磁盘第一个扇区备份下来
dd if=/dev/hdc of=/tmp/mbr.back bs=512 count=1
找出系统中最小的那个分区,将它备份下来
df –h
dd if=/dev/hdc1 of=/tmp/boot.whole.disk
ll –h /tmp/boot.whole.disk
tar可以用来备份关键数据,而dd则可以用来备份整块分区或整块磁盘,如果想要将数据填回到文件系统中,可能需要考虑到原本的文件系统才能成功。
将/dev/hdc1完整地复制到另一分区上,请使用系统上面未分区完毕的空间再新建一个与/dev/hdc1差不多大小的分区,然后将之进行完整的复制(包括启动扇区区块)
1) 先进行分区的操作
fdisk –l /dev/hdc
fdisk /dev/hdc
n
输入分区大小
p
w
partprobe
2) 不需格式化,直接进行扇区表面的复制。
df if=/dev/hdc1 of=/dev/hdc9
mount /dev/hdc9 /mnt
df
umount /mnt
新分出来的分区不需要经过格式化,因为dd可以将原本就的分区中扇区表面的数据整个复制过来,当然连同super block,boot sector,meta data等全部复制过来。想构建两块一模一样的磁盘,只需执行dd if=/dev/sda of=/dev/sdb就能让两块磁盘一模一样,甚至/dev/sdb不需分区的格式化,因为该命令可以将/dev/sda内的所有数据,包括MBR与分区表也复制到/dev/sdb中。
cpio
cpio可以备份任何东西,包括设备文件。不过cpio有个大问题,就是cpio不会主动去找文件来备份。cpio配合类似find等可以找到文件名的命令来告知cpio该备份的数据在哪里。
cpio –ovcB > [file|device] 备份
cpio –ivcdu < [file|device] 还原
cpio –ivct < [file|device] 查看
参数:
-o:将数据copy输出到文件或设备上
-B:让默认的Blocks可以增加至5120bytes,默认是512bytes,这样的好处是可以让大文件的存储速度加快
还原使用到的参数
-i:将数据自文件或设备复制到系统当中
-d:自动新建目录。使用cpio所备份的数据内容不见得会在同一层目录中,因此必须要让cpio在还原时可以新建目录,此时就要-d参数的帮助
-u:自动将较新的文件覆盖较旧的文件
-t:需配合-i参数,可用在查看cpio新建的文件或设备的内容
一些可共享的参数:
-v:让存储的过程中文件名可以在屏幕上显示
-c:一种较新的protable format方式存储。
由于cpio会将数据整个显示到屏幕上,因此需通过将这些屏幕上的数据重新重定向一个新的文件。
找出/boot下面的所有文件,然后将它备份到/tmp/boot.cpio
find /boot –print
find /boot |cpio –ocvB > /tmp/boot.cpio
ll –h /tmp/boot.cpio
将上面的文件在/root目录下解开
cpio –idvc < /tmp/boot.cpio
ll /root/root
事实上,cpio可以将系统的数据完整地备份到磁带机上去
备份:find / | cpio –ocvB > /dev/st0
还原:cpio –idvc < /dev/st0
cpio是备份的一项利器。因为它可以备份任何的文件,包括/dev下面的任何设备文件。但由于cpio必须要配合其他的程序,如find来新建文件名,cpio与管道命令及数据流重定向的相关性很重要。
查看文件属性
file /boot/initrd.img
将文件增加扩展名,并解压
mkdir initrd
cd initrd
cp /boot/initrd.img iitrd.img.gz
gzip –d initrd.img.gz
ll
file initrd.img
开始使用cpio解压
cpio –iduvc < initrd.img
重点:
压缩命令为通过一些运算方法去将原本的文件进行压缩,以减少文件所占用的磁盘空间。压缩前与压缩后的文件所占用的磁盘空间比值,称为压缩比
压缩的好处是可以减少磁盘空间的浪费,在www网站可以利用压缩的技术来进行数据的传送,好让网站带宽的可利用率上升。
压缩文件的扩展名大多是.tar,.tar.gz,.tgz,.gz,.Z,*.bz2
常见的压缩命令包括gzip和bzip2,其中bzip2压缩比gzip还要更好,建议使用bzip2
tar可以用来进行文件打包,并可支持gzip,bzip2的压缩
压缩:tar –jcv –f filename.tar.bz2(被压缩的文件或目录名称)
查询:tar –jtv –f filename.tar.bz2
解压缩:tar –jxv –f filename.tar.bz2 –C 欲解压缩的目录
dump命令可备份文件系统或单一目录
dump的备份若针对文件系统时,可进行0~9的level差异备份。其中level 0为完整备份
restore命令还原被dump构建的备份文件
要新建光盘刻录数据时,可通过mkisofs命令来构建
可通过cdrecord来写入CD或DVD刻录机
dd可备份完整的分区或磁盘,因为dd可读取磁盘的扇区表面的数据
cpio为相当优秀的备份命令,不过必须搭配类似find命令来读入欲备份的文件名数据,才可进行备份操作。
更多推荐
所有评论(0)