天天看點

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的方案。     

繼續閱讀