在linux上用dd命令實現ghost功能

 by沈東良                                                                                                 

ghostg4l

        安裝操作系統,速度太慢,整個過程太冗長乏味了。

       安裝過程中,需要回答若干問題,系統需要安裝無數個軟件,創建和寫入無數的文件。因爲涉及到大量的文件定位和讀寫,速度一定是快不起來的。

       Windows下我們常常使用ghost系統來備份和刻錄操作系統。ghost可以clone整個系統的鏡像,然後在新的電腦上恢復,相當簡單。用ghost系統安裝操作系統比使用安裝光盤安裝系統要快捷多了,也不需要回答任何問題了。


      那麼,我們能不能用ghost來備份和恢復Linux系統呢。

     答案是不行。因爲ghost只能識別很少的老舊Linux文件系統,也無法識別grubLILO等引導加載程序。


     其實,Linux下也有ghost工具,最著名的有g4l—ghostForLinux

     用了一下ghostForLinux。如果是整個磁盤的複製和恢復,還算簡單。但是,我試了半天,也沒辦法實現對一個或者幾個分區的恢復。


     g4l,還是太弱了,無法滿足我的要求!


神奇的fdiskdd命令

        深深的苦惱中,靈光乍現:神奇的ghost的原理是什麼呢?不就是數據複製嗎?Linux下的dd命令不就是最強大的數據複製工具!


       既然如此,我爲什麼要使用g4l這樣複雜的工具呢?一條dd命令不就可以幫我實現任意複雜的鏡像複製和恢復的需求了嗎?管他是grub,還是ext4btrfsFAT32NTFS...dd面前衆生平等。


       進入Linux操作系統,打開命令行,執行如下命令:

      sudo  fdisk -u -l

      可以查看所有磁盤上的所有分區的尺寸和佈局情況。

-u,讓startend中數字的單位是512字節,也就是一個sector扇區的大小。

     假設我有一個/dev/sda磁盤,有100GB大小。我安裝了一個Ubuntu操作系統。使用瞭如下分區:

/dev/sda1 5GB

/dev/sda2 1GB 擴展分區

/dev/sda5 1GB 擴展分區

/dev/sda2是所有擴展分區,它的大小和/dev/sda5重合。

/dev/sda1ext4格式的文件系統。用於安裝ubuntu操作系統。

/dev/sda5swap格式的文件系統,作爲交換分區。

      如果我用弱智的g4l工具製作系統的鏡像,就需要備份整個磁盤100GB,而不是我需要的6GB

      g4l也可以單獨備份分區,但是在恢復時,就需要在目標計算機上安裝好grub,並進行了適當的分區。很麻煩!


      我這裏,可以使用一條dd命令就生成6GB的鏡像。然後可以在任意硬盤大於6GB的計算機上恢復出完整的系統,包括MBR3個分區sda1,sda2,sda5



具體步驟

        找一個U盤,安裝UbuntuLive Cd系統。【具體如何製作U盤啓動的UbuntuLive CD,可以參考Ubuntu官方網站的幫助。】

UbuntuLive CdWindowsPE系統類似,是光盤/U盤引導的Ubuntu操作系統,不需要安裝就可以直接使用。


       U盤啓動,進入盤上的Ubuntu系統,打開命令行,執行:

       sudo  fdisk -u -l /dev/sda

       查看硬件的分區情況。


然後執行:


    dd   bs=512 count=[fdisk命令中最大的end+1] if=/dev/sda of=/ghost.img


    這樣,就可以把我需要的分區數據全部copyghost.img文件中。鏡像製作完成了!



      然後,我們就可以把U盤插到其他系統上,用U盤啓動,進入UbuntuLiveCD,打開命令行,執行如下命令:

dd if=/ghost.img of=/dev/sda


    完成後,拔掉U盤,啓動計算機,就可以看到我們的Linux系統已經安裝完畢了!

注意:

       不要直接在計算機上用本地磁盤啓動系統後執行dd命令生成本地磁盤的鏡像。而應該使用livecd啓動計算機。

        因此計算機運行時會對系統盤產生大量寫操作。 直接對運行中的系統盤生成的鏡像,在恢復到其他硬盤上時,很可能會無法啓動!



一樣適用於非Linux操作系統

       在linux上用dd命令實現系統鏡像備份和恢復,是不是很簡單呢?


       對於Windows系統,甚至Mac等等任意系統,其實都可以用dd命令實現系統鏡像的備份和恢復。

       因爲,Linuxfdisk命令能夠識別任意系統下的分區格式。fdisk並不關係分區上的文件系統,甚至有無文件系統都不關心。fdisk總是可以報告分區佔用了哪些扇區。

 dd命令也不關心磁盤的文件系統格式,它只是簡單地按照要求從指定的位置,複製多少字節數據而已。

      dd命令實現鏡像備份和恢復,比Ghost軟件簡單和強大多了。使用ghost軟件,依然需要用戶進行復雜而危險的磁盤分區操作。

      而使用fdiskdd這兩條命令,一切都免了!



壓縮和解壓縮

        可能我們需要備份的分區很大,使用dd命令生成的鏡像文件也就很大。存儲和傳輸這些鏡像不太方便。  我們也可以使用壓縮程序壓縮生成的鏡像文件。 這裏,我選擇使用gzip程序,配合dd命令一起使用。

gzip參數:

-c 表示輸出到stdout

-d  表示解壓縮

-1 表示最快壓縮

-9 表示最好壓縮

默認使用的是-6壓縮級別。


      

   

要使用 dd 和 gzip 生成壓縮的鏡像文件,可以執行命令:   dd   bs=512
count=[fdisk命令中最大的end數+1] if=/dev/sda | gzip -6 > /ghost.img.gz

還原時,可以執行下列命令: gzip -dc /ghost.img.gz.gz | dd of=/dev/sda

提醒:

       如果你把鏡像恢復到另一臺計算機上,你可能會發現你的網卡是eth1,而不是eth0。這是因爲

/etc/udev/rules.d/70-persistent-net.rules   文件把你做鏡像的計算機的網卡作爲eth0登記了。  

     如果你的網絡腳本對eth0進行了處理,而沒有對eth1進行處理,那麼不修改網絡腳本,你可能就無法上網了。

  

    也許你會希望在做鏡像之前,先刪除 /etc/udev/rules.d/70-persistent-net.rules 文件。這樣你恢復鏡像時,網卡的名字就是eth0。   就不會造成你在恢復後的計算機上無法上網的問題了。

    

  

         


                                                                                                                                                                                                                                                by沈東良 http://blog.csdn.net/shendl


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章