Linux入职基础-2.5_文件的压缩打包与系统备份

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

文件的压缩打包与系统备份

一、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-pointgraft有转嫁或移植的意思,相关数据在底下文章内说明。

范例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

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值