1. 程式人生 > >DD命令備份Linux系統

DD命令備份Linux系統

神奇的fdiskdd命令

其實Linux使用dd命令備份系統就是Ghost,類似於window的Ghost版本。

       進入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。   就不會造成你在恢復後的計算機上無法上網的問題了。