天天看点

linux环境下的硬盘批量复制

    Linux设备在行业应用领域里,基本上都是先把系统安装到一台设备,调试完成后,再取出做好系统的硬盘(也称之为母盘),通过复制这个母盘到新的硬盘,达到批量生产的目的。     硬盘的复制有两种形式,一个是使用硬盘复制机(也称硬盘拷贝机),普通1拖5的硬盘复制机价格大概在2万元左右,对于微小创业公司而言是一笔不小的数目。另一种就是通过软件的方式,在windows平台下这种类型的软件非常多,最出名的,就是Ghost了。本文主要介绍在Linux环境下,如何实现硬盘的批量复制。        Linux环境中,主要有两种方式,一种是纯粹DD,第二种是DD+TAR,下面分别介绍并比较各自的优缺点。       注:以下讨论的复制功能,基于母盘和等待复制的硬盘容量相等的情况下,如果容量不相等,可能导致数据不完整甚至出错。       一、DD方式     DD是linux下最常用的复制数据的命令,因其能进行字节级别的复制,可以保证两块硬盘的数据完全相同。     普通硬盘在Linux中一般使用sdx标识,其中x为:a,b,c...,如sda代表第一个硬盘,sdb代表第二个硬盘,以此类推。假设第一个硬盘也就是sda做母盘,复制到第二块硬盘sdb中,完整dd命令如下:

dd if = /dev /sda of = /dev /sdb bs = 1024K     简单说明:     if:输入位置;     of:输出位置,可以是硬盘的盘符,也可以某个文件路径;     bs:缓存大小,合适的缓存能够加快复制速度;     更多参数,请参考dd帮助文档。       此方法的优点在于,硬盘sda和sdb的数据完全一样,缺点也很明显,就是把空白数据区也复制一遍。在硬盘容量比较大,同时数据量很小的情况下,非常浪费时间。比如一块500G的硬盘,只使用了3G的内容,使用DD命令,会复制500G的数据,如果是普通5400转的硬盘,以50M/S的速度算,约需要166分钟,也就是2个多小时。       二、DD+TAR方式     硬盘上的数据分为两种,一种是硬盘的引导及分区信息(俗称MBR),一种是用户数据(包括操作系统)。     先看看MBR介绍:硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。     通过以上说明,我们发现,其实复制硬盘时,只需要复制MBR数据和用户数据,就能达到硬盘复制效果。     考虑以后的方便性,这里使用一个安装了Linux操作系统的U盘做为复制中介,母盘的所有数据先保存在U盘上,通过U盘复制到目标硬盘上。这样只要接上U盘,就可以进行数据复制的操作。       下面介绍详细步骤。     1、安装Linux操作系统到U盘中。最简单的办法就是在Windows环境下,使用unetbootin把ubutu桌面版的ISO镜像(如ubuntu-12.04-desktop-i386.iso)写到U盘上。     2、把U盘接到安装有母盘的设备中,并设置从U盘启动。     3、复制MBR到U盘中。

sudo dd if = /dev /sda of = /media /back/mbr.img bs = 1024K count = 1     说明:使用缓存1M,复制一次,也就是总共复制了硬盘最前面的1M数据,包括了MBR(MBR总共512字节)。      2、复制分区数据到文件中,假设操作系统安装在分区sda1,数据保存在分区sda2。

sudo mount -o rw /dev /sda1 /mnt

sudo tar -cpzvf /media /back /bak.os.tgz -C /mnt . --exclude =. /mnt/tmp 

sudo umount /mnt

sudo mount -o rw /dev /sda2 /mnt

sudo tar -cpzvf /media /back /bak.data.tgz -C /mnt . 

sudo umount /mnt     3、把U盘接到需要复制的目标设备上,设置从U盘启动。     4、复制MBR到目标盘上,在目标设备上,硬盘同样是sba。

sudo dd if = /media /back /mbr.img of = /dev /sda bs = 1024K count = 1     5、格式化目标盘的分区,然后复制分区数据到目标盘上。

sudo mkfs -t ext4 /dev /sda1

sudo mkfs -t ext4 /dev /sda2

sudo mount -o rw /dev /sda1 /mnt

sudo tar -xpzvf /media /back /bak.os.tgz   -C /mnt

sudo umount /mnt

sudo mount -o rw /dev /sda2 /mnt

sudo tar -xpzvf /media /back /bak.data..tgz   -C /mnt

sudo umount /mnt          此方法的优点在于复制时间短,尤其在硬盘容量大,数据量小的情况下,非常明显。同样是一块500G的硬盘,只使用了3G的数据,普通5400转的硬盘,以50M/S的速度算,1分钟左右就可以复制完成,就算加上系统切换时间,也比dd 500G硬盘要少得多。缺点在于前期准备工作比较多。另外,推荐把命令写在脚本中,直接执行脚本可以节省不少敲命令的时间。       通过以上的比较,如果偶尔做硬盘的备份,直接使用dd更加简单而方便。如果是需要批量复制几十甚至上百台设备,又不想投资购买硬盘复制机,可以考虑dd+tar的方案。     

继续阅读