注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

谷搜互联网应用www.iguso.com

谷搜专注企业邮箱十二年

 
 
 

日志

 
 

linux中其他常见的压缩和备份工具  

2014-05-21 09:50:57|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

dd

  我们在之前的特殊 loop 装置挂载时使用过 dd 这个指令了。 不过,这个指令可不只是制作一个档案那么简单的。其实dd 指令最大的功效,应该是在于『备份』啦! 因为 dd 可以读取磁碟装置的内容(几乎是直接读取磁区"sector"),然后将整个装置备份成一个档案呢!真的是相当的好用,dd 的用途有很多,但是我们仅讲一些比较重要的选项,如下:

  [root@www ~]# dd if="input_file" of="output_file" bs="block_size" \

  > count="number"

  选项与参数:

  if :就是 input file 啰~也可以是装置喔!

  of :就是 output file 喔~也可以是装置;

  bs :规划的一个 block 的大小,若未指定则预设是 512 bytes(一个 sector 的大小)

  count:多少个 bs 的意思。

  範例一:将 /etc/passwd 备份到 /tmp/passwd.back 当中

  [root@www ~]# dd if=/etc/passwd of=/tmp/passwd.back

  3+1 records in

  3+1 records out

  1945 bytes (1.9 kB) copied, 0.000332893 seconds, 5.8 MB/s

  [root@www ~]# ll /etc/passwd /tmp/passwd.back

  -rw-r--r-- 1 root root 1945 Sep 29 02:21 /etc/passwd

  -rw-r--r-- 1 root root 1945 Dec 17 18:09 /tmp/passwd.back

  # 仔细的看一下,我的 /etc/passwd 档案大小为 1945 bytes,因为我没有设定 bs ,

  # 所以预设是 512 bytes 为一个单位,因此,上面那个 3+1 表示有 3 个完整的

  # 512 bytes,以及未满 512 bytes 的另一个 block 的意思啦!海外主机空间,香港主机空间

  # 事实上,感觉好像是 cp 这个指令啦~

  範例二:将自己的磁碟之第一个磁区备份下来

  [root@www ~]# dd if=/dev/hdc of=/tmp/mbr.back bs=512 count=1

  1+0 records in

  1+0 records out

  512 bytes (512 B) copied, 0.0104586 seconds, 49.0 kB/s

  # 第一个磁区内含有 MBR 与 partition table ,透过这个动作,

  # 我们可以一口气将这个磁碟的 MBR 与 partition table 进行备份哩!

  範例叁:找出你系统最小的那个分割槽,并且将他备份下来:

  [root@www ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  /dev/hdc2 9.5G 3.9G 5.1G 44% /

  /dev/hdc3 4.8G 651M 3.9G 15% /home

  /dev/hdc1 99M 21M 73M 23% /boot <==就捉他好了!

  [root@www ~]# dd if=/dev/hdc1 of=/tmp/boot.whole.disk

  208782+0 records in

  208782+0 records out

  106896384 bytes (107 MB) copied, 6.24721 seconds, 17.1 MB/s

  [root@www ~]# ll -h /tmp/boot.whole.disk

  -rw-r--r-- 1 root root 102M Dec 17 18:14 /tmp/boot.whole.disk

  # 等于是将整个 /dev/hdc1 通通捉下来的意思~如果要还塬呢?就反向回去!

  # dd if=/tmp/boot.whole.disk of=/dev/hdc1 即可!非常简单吧!

  # 简单的说,如果想要整个硬碟备份的话,就类似 Norton 的 ghost 软体一般,

  # 由 disk 到 disk ,嘿嘿~利用 dd 就可以啦~厉害厉害!

  你可以说, tar 可以用来备份关键资料,而 dd 则可以用来备份整颗 partition 或 整颗 disk ,很不错啊~不过,如果要将资料填回到 filesystem 当中, 可能需要考虑到塬本的 filesystem 才能成功啊!让我们来完成底下的例题试看看:

  例题:

  你想要将你的 /dev/hdc1 进行完整的复製到另一个 partition 上,请使用你的系统上面未分割完毕的容量再建立一个与 /dev/hdc1 差不多大小的分割槽 (只能比 /dev/hdc1 大,不能比他小!),然后将之进行完整的复製 (包括需要复製 boot sector 的区块)。

  答:

  由于需要复製 boot sector 的区块,所以使用 cp 或者是 tar 这种指令是无法达成需求的! 此时那个 dd 就派的上用场了。你可以这样做:

  # 1. 先进行分割的动作

  [root@www ~]# fdisk -l /dev/hdc

  Device Boot Start End Blocks Id System

  /dev/hdc1 * 1 13 104391 83 Linux

  # 上面鸟哥仅撷取重要的资料而已!我们可以看到 /dev/hdc1 仅有 13 个磁柱

  [root@www ~]# fdisk /dev/hdc

  Command (m for help): n

  First cylinder (2354-5005, default 2354): 这裡按 enter

  Using default value 2354

  Last cylinder or +size or +sizeM or +sizeK (2354-5005, default 5005): 2366

  Command (m for help): p

  Device Boot Start End Blocks Id System

  /dev/hdc9 2354 2366 104391 83 Linux

  Command (m for help): w

  # 为什么要使用 2366 呢?因为 /dev/hdc1 使用 13 个磁柱,因此新的 partition

  # 我们也给她 13 个磁柱,因此 2354 + 13 -1 = 2366 啰!

  [root@www ~]# partprobe

  # 2. 不需要格式化,直接进行 sector 表面的复製!

  [root@www ~]# dd if=/dev/hdc1 of=/dev/hdc9

  208782+0 records in

  208782+0 records out

  106896384 bytes (107 MB) copied, 16.8797 seconds, 6.3 MB/s

  [root@www ~]# mount /dev/hdc9 /mnt

  [root@www ~]# df

  Filesystem 1K-blocks Used Available Use% Mounted on

  /dev/hdc1 101086 21408 74459 23% /boot

  /dev/hdc9 101086 21408 74459 23% /mnt

  # 这两个玩意儿会『一模一样』喔!

  [root@www ~]# umount /mnt

  非常有趣的範例吧!新分割出来的 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 该被备份的资料在哪裡啊! 有点小麻烦啦~因为牵涉到我们在第叁篇才会谈到的资料流重导向说~ 所以这裡你就先背一下语法,等到第叁篇讲完你就知道如何使用 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 方式储存

  你应该会发现一件事情,就是上述的选项与指令中怎么会没有指定需要备份的资料呢?还有那个大于 (>) 与小于 (<) 符号是怎么回事啊?因为 cpio 会将资料整个显示到萤幕上,因此我们可以透过将这些萤幕的资料重新导向 (>) 一个新的档案! 至于还塬呢?就是将备份档案读进来 cpio (<) 进行处理之意!我们来进行几个案例你就知道啥是啥了!

  範例:找出 /boot 底下的所有档案,然后将他备份到 /tmp/boot.cpio 去!

  [root@www ~]# find /boot -print

  /boot

  /boot/message

  /boot/initrd-2.6.18-128.el5.img

  ....以下省略....

  # 透过这个 find 我们可以找到 /boot 底下应该要存在的档名!包括档案与目录

  [root@www ~]# find /boot | cpio -ocvB > /tmp/boot.cpio

  [root@www ~]# ll -h /tmp/boot.cpio

  -rw-r--r-- 1 root root 16M Dec 17 23:30 /tmp/boot.cpio

  我们使用 find /boot 可以找出档名,然后透过那条管线 (|, 亦即键盘上的 shift+\ 的组合), 就能将档名传给 cpio 来进行处理!最终会得到 /tmp/boot.cpio 那个档案喔!接下来让我们来进行解压缩看看。

  範例:将刚刚的档案给他在 /root/ 目录下解开

  [root@www ~]# cpio -idvc < /tmp/boot.cpio

  [root@www ~]# ll /root/boot

  # 你可以自行比较一下 /root/boot 与 /boot 的内容是否一模一样!

  事实上 cpio 可以将系统的资料完整的备份到磁带机上头去喔!如果你有磁带机的话!

  备份:find / | cpio -ocvB > /dev/st0

  还塬:cpio -idvc < /dev/st0

  这个 cpio 好像不怎么好用呦!但是,他可是备份的时候的一项利器呢!因为他可以备份任何的档案, 包括 /dev 底下的任何装置档案!所以他可是相当重要的呢!而由于 cpio 必需要配合其他的程式,例如 find 来建立档名,所以 cpio 与管线命令及资料流重导向的相关性就相当的重要了!

  其实系统裡面已经含有一个使用 cpio 建立的档案喔!那就是 /boot/initrd-xxx 这个档案啦! 现在让我们来将这个档案解压缩看看,看你能不能发现该档案的内容为何?

  # 1. 我们先来看看该档案是属于什么档案格式,然后再加以处理:

  [root@www ~]# file /boot/initrd-2.6.18-128.el5.img

  /boot/initrd-2.6.18-128.el5.img: gzip compressed data, ...

  # 唔!看起来似乎是使用 gzip 进行压缩过~那如何处理呢?

  # 2. 透过更名,将该档案增加副档名,然后予以解压缩看看:

  [root@www ~]# mkdir initrd

  [root@www ~]# cd initrd

  [root@www initrd]# cp /boot/initrd-2.6.18-128.el5.img initrd.img.gz

  [root@www initrd]# gzip -d initrd.img.gz

  [root@www initrd]# ll

  -rw------- 1 root root 5408768 Dec 17 23:53 initrd.img

  [root@www initrd]# file initrd.img

  initrd.img: ASCII cpio archive (SVR4 with no CRC)

  # 嘿嘿!露出马脚了吧!确实是 cpio 的文件档喔!

  # 3. 开始使用 cpio 解开此档案:

  [root@www initrd]# cpio -iduvc < initrd.img

  sbin

  init

  sysroot

  ....以下省略....


文章源自谷搜企业邮箱服务商 linux中其他常见的压缩和备份工具
  评论这张
 
阅读(3)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017