文件的压缩打包与系统备份
一、Linux 系统常见的压缩命令
压缩文件的扩展名大多是:*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2;在Linux的环境中,知道该文件是由哪种压缩命令所制作出来的,好用来对照著解压缩。
*.Z compress 程序压缩的文件;
*.gz gzip 程序压缩的文件;
*.bz2 bzip2 程序压缩的文件;
*.tar tar 程序打包的数据,并没有压缩过;
*.tar.gz tar 程序打包的文件,其中并且经过 gzip 的压缩
*.tar.bz2 tar 程序打包的文件,其中并且经过 bzip2 的压缩
二、压缩命令
压缩命:令常见的就是 gzip 与 bzip2; gzip 是由 GNU所开发出来的压缩命令,取代compress命令,后来开发bzip2命令。命令通常仅能针对一个文件来压缩与解压缩。
打包命令:tar;可以将很多文件打包成为一个文件,包括目录,但并没有提供压缩的功能。
后来,GNU把tar结合了压缩功能。这样用户面对更多文件的需要压缩与打包时就便于操作。
①compress
[root@localhost ~]#yum install ncompress //安装
[root@localhost ~]# compress[-rcv] 文件或目录 <==这里是压缩
选项与参数:
-r :可以连同目录下的文件也同时给予压缩呢!
-c :将压缩数据输出成为standard output (输出到萤幕)
-v :可以秀出压缩后的文件资讯以及压缩过程中的一些档名变化。
uncompress 文件.Z <==这里是解压
在默认的情况中,被 compress 压缩的原始文件会不见,而压缩文件会被创建起来,而且扩展名会是 *.Z。compress 已经很少使用,因为无法解开 *.gz 的文件。
②gzip, zcat
gzip 可以说是应用度最广的压缩命令了!可以解开compress, zip 与 gzip 等软件所压缩的文件。
[root@localhost ~]# gzip[-cdtv#] 档名
[root@localhost ~]#zcat档名.gz
选项与参数:
-c :将压缩的数据输出到萤幕上,可透过数据流重导向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩档的一致性~看看文件有无错误;
-v :可以显示出原文件/压缩文件的压缩比等资讯;
-# :压缩等级,-1 最快,但是压缩比最差、-9最慢,但是压缩比最好!默认是 -6
范例1:将/etc/man.config 复制到/tmp,并且以gzip压缩
[root@localhost ~]# cd /tmp
[root@localhost tmp]# cp /etc/man.config . <==复制文件
[root@localhost tmp]# gzip -v man.config <==gzip压缩
man.config: 56.1% -- replaced with man.config.gz
[root@localhost tmp]# ll /etc/man.config/tmp/man* <==压缩前后对比下
-rw-r--r-- 1 root root 4617 Jul 13 2006 /etc/man.config
-rw-r--r-- 1 root root 2057 Nov 19 11:29/tmp/man.config.gz
当你使用 gzip 进行压缩时,在默认的状态下原本的文件会被压缩成为 .gz 的档名,原始文件就不再存在了。
此外,使用 gzip 压缩的文件在 Windows 系统中,竟然可以被 WinRAR 这个软件解压缩。
范例2:将/tmp/man.config.gz解压
[root@localhost tmp]# gzip -d man.config.gz //比gunzip好用
[root@localhost tmp]# ll man*
-rw-r--r-- 1 root root 4617 Nov 19 11:29man.config
③bzip2, bzcat
bzip2 则是为了取代 gzip 并提供更佳的压缩比。
[root@localhost ~]# bzip2[-cdkzv#] 档名
[root@localhost ~]#bzcat档名.bz2
选项与参数:
-c :将压缩的过程产生的数据输出到萤幕上!
-d :解压缩的参数
-k :保留原始文件,而不会删除原始的文件喔!
-z :压缩的参数
-v :可以显示出原文件/压缩文件的压缩比等资讯;
-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快
范例3、将/tmp/man.config 以 bzip2 压缩
[root@localhost tmp]# bzip2 man.config //压缩
[root@localhost tmp]# bzip2 -dman.config.bz2 //解压缩
④打包命令:tar
可以将多个目录或文件打包成一个大文件,同时还可以透过 gzip/bzip2 的支持,将该文件同时进行压缩!目前 Windows 的 WinRAR 也支持 .tar.gz 档名的解压缩。
[root@localhost ~]#tar [-j|-z] [cv] [-f 创建的档名]filename... <==打包与压缩
[root@localhost ~]#tar [-j|-z] [tv] [-f 创建的档名] <==察看档名
[root@localhost ~]# 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 打包!
其实最简单的使用 tar 就只要记忆底下的方式即可:
压 缩:tar -jcv-f filename.tar.bz2 要被压缩的文件或目录名称;
查 询:tar -jtv-f filename.tar.bz2 ;
解压缩:tar -jxv-f filename.tar.bz2 -C 欲解压缩的目录;
如果是 -j 选项,代表有 bzip2 的支持,因此档名最好就取为 *.tar.bz2;
如果是加上了 -z 的 gzip 的支持,那档名最好取为 *.tar.gz。
范例4、备份 /etc/ 目录
[root@localhost~]# tar -zcv -p -f/root/etc.tar.gz /etc //备份目录
[root@localhost~]# tar -jcv -p -f /root/etc.tar.bz2 /etc //备份目录
[root@localhost~]# ll -h
-rw-r--r--1 root root 7.2M Nov 19 14:30 etc.tar.bz2
-rw-r--r--1 root root 11M Nov 19 13:54 etc.tar.gz //gzip压缩比小于bzip2
加上『 -p 』这个选项的原因是为了保存原本文件的权限与属性!
⑤查阅 tar 文件的数据内容(可察看档名)
[root@localhost ~]# tar -jtv -f/root/etc.tar.bz2
⑥解压缩,并考虑特定目录的解压缩动作 (-C 选项的应用)
[root@localhost ~]# tar-jxv -f /root/etc.tar.bz2
此时该打包文件会在『本目录下进行解压缩』的动作;想要将该文件在 /tmp 底下解开,请看如下的动作:
[root@localhost ~]# tar-jxv -f /root/etc.tar.bz2 -C /tmp //解压到/tmp目录下面
[root@localhost ~]#ll /tmp
drwxr-xr-x 98 root root 12288 Nov 19 09:06 etc
⑦仅解开单一文件的方法
[root@localhost ~]# tar -jxv -f 打包档.tar.bz2 待解开档名
[root@localhost ~]#tar -jtv -f etc.tar.bz2 | grep 'shadow'
-r-------- root/root 577 2015-11-16 23:55:08 etc/gshadow-
-r-------- root/root 568 2015-11-17 19:15:19 etc/gshadow
-r-------- root/root 1064 2015-11-16 23:55:08 etc/shadow-
-r-------- root/root 1037 2015-11-17 19:15:19 etc/shadow
[root@localhost ~]#tar -jxv -f /root/etc.tar.bz2 etc/shadow
[root@localhost ~]# ll etc/
-r-------- 1 root root 1037 Nov 17 19:15shadow
⑧打包某目录,但不含该目录下的某些文件之作法(--exclude)
我们想要打包 /etc/ /root 这几个重要的目录,但却不想要打包 /root/etc* 开头的文件。假设这个新的打包文件要放置成为 /root/system.tar.bz2 ,当然这个文件自己不要打包自己。
[root@localhost ~]# tar-jcv -f /root/system.tar.bz2 --exclude=/root/etc* \
>--exclude=/root/system.tar.bz2 /etc /root
最后面加上反斜线 (\) 并立刻按下 [enter] ,就能够到第二行继续输入了。
⑨仅备份比某个时刻还要新的文件
某些情况下你会想要备份新的文件而已,并不想要备份旧文件,此时 --newer-mtime 这个选项就粉重要。有两个选项,一个是 --newer ,另一个就是--newer-mtime 。
# 1. 先由 find 找出比/etc/passwd 还要新的文件
[root@localhost ~]#find /etc -newer /etc/passwd
[root@localhost ~]#ll --full-time /etc/passwd
-rw-r--r-- 1 root root 1656 2015-11-1719:15:19.000000000 +0800 /etc/passwd
[root@localhost ~]#tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 \
> --newer-mtime="2008/09/29"/etc/*
⑩备份到磁带机
[root@localhost ~]#tar -cv -f /dev/st0 /home /root /etc //不压缩
⑩①特殊应用:利用管线命令与数据流
将 /etc 底下的数据直接 copy 到目前所在的路径,也就是 /tmp 底下, 使用 cp -r 有点麻烦。
[root@localhost~]# cd /tmp
[root@localhosttmp]# tar -cv -f - /etc | tar -xv -f -
这个动作有点像是# cp -r /etc /tmp。
三、系统备份范例
系统上有非常多的重要目录需要进行备份,而且不建议将备份数据放置到 /root 目录下。
重要目录:
/etc/ (配置档)
/home/ (使用者的家目录)
/var/spool/mail/ (系统中,所有帐号的邮件信箱)
/var/spool/cron/ (所有帐号的工作排成配置档)
/root (系统管理员的家目录)
条件:
#/root 底下的压缩档也不需要备份
#/home/loop* 不需要备份
#将备份的数据放置到/backups
#每次备份的档名都希望不相同
# 1. 先处理要放置备份数据的目录与权限:
[root@localhost~]# mkdir /backpus
[root@localhost ~]# chmod700 /backpus
[root@localhost ~]# ll-d /backpus/
drwx------ 2 root root 4096 Nov 19 17:00/backpus/
# 2. 假设今天是 2015/11/19,则创建备份的方式如下:
//编辑shell文件
[root@localhost ~]# vi tarbackups.sh
tar -jcv -f/backups/backup-system-20151119.tar.bz2 \
--exclude=/root/*.bz2 --exclude=/root/*.gz--exclude=/home/loop* \
/etc /home /var/spool/mail /var/spool/cron/root
[root@localhost ~]#wq
[root@localhost ~]#chmod +x tarbackups.sh
[root@localhost ~]# ./tarbackpus.sh
四、系统备份工具dump
如上图所示,上方的『即时文件系统』是一直随著时间而变化的数据,例如在 /home 里面的文件数据会一直变化一样。而底下的方块则是 dump 备份起来的数据,第一次备份时使用的是 level 0 ,这个等级也是完整的备份啦!等到第二次备份时,即时文件系统内的数据已经与 level 0 不一样了,而 level 1 仅只是比较目前的文件系统与 level 0 之间的差异后,备份有变化过的文件而已。至於 level 2 则是与 level 1 进行比较。
[root@localhost~]#dump [-Suvj] [-level] [-f 备份档] 待备份数据
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是否有备份过
范例1、用 dump 备份完整的文件系统
# 1. 先找出系统中最小的那个文件系统,如下所示:
[root@localhost~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 4.8G 426M 4.1G 10% /
/dev/sda9 1.9G 36M 1.8G 2% /tmp
/dev/sda7 9.5G 151M 8.9G 2% /home
/dev/sda5 19G 2.1G 16G 12% /usr
/dev/sda6 9.5G 151M 8.9G 2% /usr/local
/dev/sda3 19G 223M 18G 2% /var
/dev/sda1 99M 15M 80M 16% /boot
tmpfs 945M 0 945M 0% /dev/shm
# 2. 先测试一下,如果要备份此文件系统,需多少容量?
[root@localhost~]# dump -S /dev/sda1
9041920 <==注意一下,这个单位是 bytes,大约9M空间
# 3. 将完整备份的档名记录成为/root/boot.dump ,同时升级记录档:
[root@localhost~]# dump -0u -f /root/boot.dump /boot
[root@localhost~]# ll /root/boot.dump /etc/dumpdates
-rw-rw-r-- 1 rootdisk 43 Nov 19 20:34 /etc/dumpdates
-rw-r--r-- 1 rootroot 9103360 Nov 19 20:34 /root/boot.dump
# 由於加上 -u 的选项,因此/etc/dumpdates 该文件的内容会被升级!注意,
# 这个文件仅有在 dump 完整的文件系统时才有支持主动升级的功能。
# 4. 观察一下系统主动创建的记录档:
[root@localhost ~]# cat /etc/dumpdates
/dev/sda1 0 Thu Nov 19 20:34:34 2015 +0800
范例2、创建 level 1 的备份
# 0. 看一下有没有任何文件系统被 dump 过的数据?
[root@localhost ~]# dump -W
Last dump(s) done (Dump '>' filesystems):
> /dev/sda2 ( /) Last dump: never
> /dev/sda9 ( /tmp) Last dump: never
> /dev/sda7 ( /home) Last dump: never
> /dev/sda5 ( /usr) Last dump: never
> /dev/sda6 (/usr/local) Last dump: never
> /dev/sda3 ( /var) Last dump: never
/dev/sda1 ( /boot) Last dump:Level 0, Date Thu Nov 19 20:34:34 2015
# 1. 先恶搞一下,创建一个大约 10 MB 的文件在 /boot 内
[root@localhost ~]# dd if=/dev/zero of=/boot/testing.img bs=1M count=10
# 2. 开始创建差异备份档,此时我们使用level 1 吧:
[root@localhost ~]# dump -1u -f /root/boot.dump.1 /boot
[root@localhost ~]#ll -h /root/boot*
-rw-r--r-- 1 root root 8.7M Nov 19 20:34/root/boot.dump
-rw-r--r-- 1 root root 11M Nov 19 20:43 /root/boot.dump.1
范例3、用 dump 备份非文件系统,亦即单一目录的方法
处理一下 /etc 的 dump 备份,因为 /etc 并非单一文件系统,他只是个目录而已。
# 让我们将 /etc 整个目录透过 dump 进行备份,且含压缩功能
[root@localhost ~]# dump -0j -f /root/etc.dump.bz2 /etc
五、系统复原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 :将整个filesystem 还原的一种模式,用在还原针对文件系统的 dump 备份;
其他较常用到的选项功能:
-h :察看完整备份数据中的inode 与文件系统 label 等资讯
-f :后面就接你要处理的那个dump 文件罗!
-D :与 -C 进行搭配,可以查出后面接的挂载点与 dump 内有不同的文件!
范例1、用 restore 观察 dump 后的备份数据内容
[root@localhost ~]# restore-t -f /root/boot.dump
范例2、比较差异并且还原整个文件系统
为什么 dump 可以进行累积备份呢?就是因为他具有可以查询文件系统与备份文件之间的差异,并且将分析到的差异数据进行备份的缘故。
#实验目录/boot ---/dev/sda1
//查询对/boot目录有过备份
[root@localhost ~]#ll boot*
-rw-r--r-- 1 root root 9103360 Nov 19 20:48 boot.dump
-rw-r--r-- 1 root root 10547200 Nov 19 20:49boot.dump.1
# 0. 先尝试变更文件系统的内容:
[root@localhost ~]# cd /boot
[root@localhost boot]# mv config-2.6.18-238.el5config-2.6.18-238.el5-back
# 1. 看使进行文件系统与备份文件之间的差异!
[root@localhost boot]# mv config-2.6.18-238.el5 config-2.6.18-238.el5-back
[root@localhost boot]# restore -C -f /root/boot.dump
Dump date: Thu Nov 19 20:48:30 2015
Dumped from: the epoch
Level 0 dump of /boot on localhost:/dev/sda1
Label: /boot
filesys = /boot
restore:unable to stat ./config-2.6.18-238.el5: No such file or directory
Somefiles were modified! 1 compare errors
# 2. 将文件系统改回来啊!
[root@localhost boot]# mv config-2.6.18-238.el5-back config-2.6.18-238.el5
[root@localhostboot]# restore -C -f /root/boot.dump
Dump date: Thu Nov 19 20:48:30 2015
Dumpedfrom: the epoch
Level0 dump of /boot on localhost:/dev/sda1
Label:/boot
filesys= /boot
范例3、还原时你也应该要给予一个全新的文件系统才行
范例4、仅还原部分文件的 restore 互动模式
某些时候你只是要将备份档的某个内容捉出来而已,并不想要全部解开;此时你可以进入 restore 的互动模式 (interactive mode)。在底下我们使用 etc.dump 来进行范例说明。假如你要将 etc.dump 内的 passwd 与 shadow 捉出来而已,该如何进行呢?
[root@localhost~]# cd /mnt
[root@localhostmnt]# restore -i -f /root/etc.dump
restore> help
restore> ls
restore> cd etc <==在 etc.dump 内变换路径到 etc 目录下
restore> pwd <==列出本目录的档名为?
restore> ls passwd shadow group <==看看,真的有这三个文件喔!
passwd
shadow
group
restore> add passwd shadow group <==加入解压缩列表
restore> delete group <==加错了!将 group 移除解压缩列表
restore> ls passwd shadow group
*passwd <==有要被解压缩的,档名之前会出现 * 的符号呢!
*shadow
group
restore> extract <==开始进行解压缩去!
Youhave not read any volumes yet. <==这里会询问你需要的volume
Unlessyou know which volume your file(s) are on you should start
withthe last volume and work towards the first.
Specifynext volume # (none if no more volumes): 1 <==只有一个 volume
setowner/mode for '.'? [yn] n <==不需要修改权限
restore> quit <==离开 restore 的功能
[root@localhostmnt]# ll etc
total16
-rw-r--r--1 root root 1656 Nov 17 19:15 passwd
-r--------1 root root 1037 Nov 17 19:15 shadow
透过互动式的 restore 功能,可以让你将备份的数据取出一部份,而不必全部都得解压缩才能够取得你想要的文件数据。而 restore 内的 add 除了可以添加、文件外,也能够添加整个备份的『目录』。
六、光盘的映像文件制作工具:mkisofs
系统配置档或者是讨论区的数据库文件(变动性非常的频繁),不过某些重要的、需要重复备份的数据(可能具有时间特性),你可能会需要使用类似 DVD 之类的储存媒体来备份出来!
先将所需要备份的数据建置成为一个映像档(iso),利用 mkisofs 命令来处理;
将该映像档烧录至光盘或 DVD 当中,利用 cdrecord 命令来处理。
[root@www~]# mkisofs [-o 映像档] [-rv] [-m file] 待备份文件.. [-V vol] \
> -graft-point isodir=systemdir ...
选项与参数:
-o :后面接你想要产生的那个映像档档名。
-r :透过 Rock Ridge 产生支持 Unix/Linux 的文件数据,可记录较多的资讯;
-v :显示建置 ISO 文件的过程
-mfile :-m 为排除文件 (exclude) 的意思,后面的文件不备份到映像档中
-Vvol :创建 Volume,有点像 Windows 在文件总管内看到的 CD title 的东西
-graft-point:graft有转嫁或移植的意思,相关数据在底下文章内说明。
范例1、将 /root, /home, /etc 等目录内的数据通通烧录起来的话,先得要处理一下映像档。
[root@localhost~]# mkisofs -r -V 'Linux_file' -o/tmp/system.img \
> -m /home/lost+found-graft-point /root=/root /home=/home /etc=/etc
[root@localhost~]# ll -h /tmp/system.img
-rw-r--r--1 root root 114M Nov 20 10:28 /tmp/system.img
[root@localhost~]# mount -o loop /tmp/system.img/mnt
[root@localhost ~]#ll /mnt
total 38
dr-xr-xr-x 98 root root 30720 Nov 20 10:28etc
dr-xr-xr-x 4 root root 2048 Nov 20 10:28home
dr-xr-xr-x 17 root root 6144 Nov 20 10:28 root
# 数据是分门别类的在各个目录中
七、光盘烧录工具:cdrecord
我们是透过 cdrecord 这个命令来进行文字介面的烧录行为,这个命令常见的选项有底下数个。
[root@www ~]# cdrecord -scanbus dev=ATA <==查询烧录机位置
[root@www ~]# cdrecord -v dev=ATA:x,y,zblank=[fast|all] <==抹除重复读写片
[root@www ~]# cdrecord -v dev=ATA:x,y,z-format <==格式化DVD+RW
[root@www ~]# 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 这种格式的 DVD 而已;
[可用选项功能] 主要是写入 CD/DVD 时可使用的选项,常见的选项包括有:
-data :指定后面的文件以数据格式写入,不是以 CD 音轨(-audio)方式写入!
speed=X :指定烧录速度,例如CD可用 speed=40 为40倍数,DVD则可用 speed=4 之类
-eject :指定烧录完毕后自动退出光盘
fs=Ym :指定多少缓冲内存,可用在将映像档先缓存至缓冲内存。默认为 4m,
一般建议可添加到 8m ,不过,还是得视你的烧录机而定。
针对 DVD 的选项功能:
driveropts=burnfree :打开 Buffer Underrun Free 模式的写入功能
-sao :支持 DVD-RW 的格式
#1侦测你的烧录机所在位置:
[root@localhost ~]# cdrecord -scanbus dev=ATA
scsibus1:
1,0,0 100) 'Optiarc' 'CD-RW CRX880A ' 'KX07' Removable CD-ROM
这部烧录机的位置在『 ATA:1,0,0 』这个地方
#2将 /tmp/system.img 烧录到 CD/DVD 里面去
#进行 CD 的烧录动作过程如下:
# 0. 先抹除光盘的原始内容:(非可重复读写则可略过此步骤)
[root@www ~]# cdrecord -v dev=ATA:1,1,0blank=fast
# 1. 开始烧录:
[root@www ~]# cdrecord -v dev=ATA:1,1,0fs=8m -dummy -data \
> /tmp/system.img
# 2. 烧录完毕后,测试挂载一下,检验内容:
[root@www ~]# mount -t iso9660 /dev/cdrom/mnt
[root@www ~]# df -h /mnt
#3、进行 DVD-RW 的烧录动作
# 0. 同样的,先来抹除一下原本的内容:
[root@www ~]# cdrecord -v dev=ATA:1,1,0blank=fast
# 1. 开始写入 DVD ,请注意,有些选项与 CD并不相同了喔!
[root@www ~]# cdrecord -v dev=ATA:1,1,0fs=8m -data -sao \
> driveropts=burnfree /tmp/system.img
# 2. 同样的,来给他测试测试!
[root@www ~]# mount /dev/cdrom /mnt
[root@www ~]# df -h /mnt
八、其它备份工具:dd,cpio
①dd
可以读取磁碟装置的内容(几乎是直接读取磁区"sector"),然后将整个装置备份成一个文件。
[root@www ~]# dd if="input_file"of="output_file" bs="block_size" \
> count="number"
选项与参数:
if :就是 inputfile 罗~也可以是装置喔!
of :就是 outputfile 喔~也可以是装置;
bs :规划的一个 block 的大小,若未指定则默认是512 bytes(一个 sector 的大小)
count:多少个 bs 的意思。
范例1、将 /etc/passwd 备份到/tmp/passwd.back 当中
[root@localhost ~]# ddif=/etc/passwd of=/tmp/passwd.back
3+1 records in
3+1 records out
1656 bytes (1.7 kB) copied, 0.000153511seconds, 10.8 MB/s
[root@localhost ~]# ll /etc/passwd/tmp/passwd.back
-rw-r--r-- 1 root root 1656 Nov 17 19:15/etc/passwd
-rw-r--r-- 1 root root 1656 Nov 20 11:52/tmp/passwd.back
范例2、将自己的磁碟之第一个磁区备份下来
[root@localhost ~]# ddif=/dev/sda1 of=/tmp/mbr.back bs=512 count=1
范例3、找到系统最小的那个分割槽,并且将他备份下来
[root@localhost ~]# ddif=/dev/sda1 of=/tmp/boot.whole.disk
#复制 boot sector 的区块,使用 cp 或者是 tar 这种命令是无法达成,dd 就派的上用场。
范例4、将 /dev/hdc1 进行完整的复制到另一个partition 上
[root@localhost ~]# ddif=/dev/sda1 of=/dev/sda10
[root@localhost ~]# mount/dev/sda10 /mnt
[root@localhost ~]#df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 101086 24746 71121 26% /boot
/dev/sda10 101086 24746 71121 26% /mnt
②cpio
cpio可以备份任何东西,包括装置设备文件,有个大问题, 那就是 cpio 不会主动的去找文件来备份。cpio 得要配合类似 find 等可以找到档名的命令来告知 cpio 该被备份的数据在哪里。
[root@www~]# cpio -ovcB > [file|device] <==备份
[root@www~]# cpio -ivcdu < [file|device] <==还原
[root@www~]# cpio -ivct < [file|device] <==察看
备份会使用到的选项与参数:
-o :将数据 copy 输出到文件或装置上
-B :让默认的 Blocks 可以添加至 5120 bytes ,默认是 512 bytes !
这样的好处是可以让大文件的储存速度加快(请参考 i-nodes 的观念)
还原会使用到的选项与参数:
-i :将数据自文件或装置 copy 出来系统当中
-d :自动创建目录!使用 cpio 所备份的数据内容不见得会在同一层目录中,因此我们
必须要让 cpio 在还原时可以创建新目录,此时就得要 -d 选项的帮助!
-u :自动的将较新的文件覆盖较旧的文件!
-t :需配合 -i 选项,可用在"察看"以 cpio 创建的文件或装置的内容
一些可共享的选项与参数:
-v :让储存的过程中文件名称可以在萤幕上显示
-c :一种较新的 portable format 方式储存
范例1、找出 /boot 底下的所有文件,然后将他备份到 /tmp/boot.cpio 去!
[root@localhost ~]# find /boot| cpio -ocvB > /tmp/boot.cpio
[root@localhost ~]# ll -h/tmp/boot.cpio
-rw-r--r-- 1 root root 19M Nov 20 14:31 /tmp/boot.cpio
范例2、将刚刚的文件给他在 /root/ 目录下解开
[root@localhost ~]# cpio -idvc < /tmp/boot.cpio
事实上 cpio 可以将系统的数据完整的备份到磁带机
备份:find / | cpio-ocvB > /dev/st0
还原:cpio -idvc < /dev/st0
范例3、/boot/initrd-xxx解压
# 1. 我们先来看看该文件是属於什么文件格式,然后再加以处理
[root@localhost boot]# file/boot/initrd-2.6.18-238.el5.img
/boot/initrd-2.6.18-238.el5.img: gzip compressed data, from Unix, last modified: ThuNov 12 23:39:30 2015, max compression
#使用 gzip 进行压缩过
# 2. 透过更名,将该文件添加扩展名,然后予以解压缩看看:
[root@localhost ~]#mkdir initrd
[root@localhost ~]# cd initrd
[root@localhost initrd]#cp /boot/initrd-2.6.18-128.el5.img initrd.img.gz
[root@localhostinitrd]# gzip -d initrd.img.gz
[root@localhostinitrd]#ll
[root@localhostinitrd]# file initrd.img
initrd.img: ASCIIcpio archive (SVR4 with no CRC)
# 嘿嘿!露出马脚了吧!确实是cpio 的文件档喔!
# 3. 开始使用 cpio 解开此文件:
[root@localhostinitrd]# cpio -iduvc < initrd.img

本文介绍了Linux环境下常用的压缩命令,如gzip、bzip2、tar,以及系统备份工具dump和restore的使用方法。还讲解了光盘映像文件的制作与烧录工具mkisofs和cdrecord的使用。

被折叠的 条评论
为什么被折叠?



