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

2022-06-21 08:36:06 字數 3195 閱讀 9229

**:

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

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

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

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

答案是不行。因為ghost只能識別很少的老舊linux檔案系統,也無法識別grub和lilo等引導引導程式。

其實,linux下也有ghost工具,最著名的有g4l—ghostforlinux。

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

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

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

既然如此,我為什麼要使用g4l這樣複雜的工具呢?一條dd命令不就可以幫我實現任意複雜的映象複製和恢復的需求了嗎?管他是grub,還是ext4,btrfs,fat32,ntfs…dd面前眾生平等。

進入linux作業系統,開啟命令列,執行如下命令:

1sudo  fdisk-u-l

可以檢視所有磁碟上的所有分割槽的尺寸和布局情況。

-u,讓start和end中數字的單位是512位元組,也就是乙個sector扇區的大小。

假設我有乙個/dev/sda磁碟,有100gb大小。我安裝了乙個ubuntu作業系統。使用了如下分割槽:

/dev/sda1 5gb

/dev/sda2 1gb擴充套件分割槽

/dev/sda5 1gb擴充套件分割槽

/dev/sda2是所有擴充套件分割槽,它的大小和/dev/sda5重合。

/dev/sda1是ext4格式的檔案系統。用於安裝ubuntu作業系統。

/dev/sda5是swap格式的檔案系統,作為交換分割槽。

如果我用弱智的g4l工具製作系統的映象,就需要備份整個磁碟100gb,而不是我需要的6gb。

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

我這裡,可以使用一條dd命令就生成6gb的映象。然後可以在任意硬碟大於6gb的計算機上恢復出完整的系統,包括mbr和3個分割槽sda1,sda2,sda5。

ubuntulive cd和windowspe系統類似,是光碟/u盤引導的ubuntu作業系統,不需要安裝就可以直接使用。

u盤啟動,進入盤上的ubuntu系統,開啟命令列,執行:

1sudo  fdisk-u-l/dev/sda

檢視硬體的分割槽情況。

然後執行:

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

這樣,就可以把我需要的分割槽資料全部copy到ghost.img檔案中。映象製作完成了!

然後,我們就可以把u盤插到其他系統上,用u盤啟動,進入ubuntulivecd,開啟命令列,執行如下命令:

1ddif=/ghost.imgof=/dev/sda

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

注意:

不要直接在計算機上用本地磁碟啟動系統後執行dd命令生成本地磁碟的映象。而應該使用livecd啟動計算機。

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

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

對於windows系統,甚至mac等等任意系統,其實都可以用dd命令實現系統映象的備份和恢復。

因為,linux的fdisk命令能夠識別任意系統下的分割槽格式。fdisk並不關係分割槽上的檔案系統,甚至有無檔案系統都不關心。fdisk總是可以報告分割槽占用了哪些扇區。

dd命令也不關心磁碟的檔案系統格式,它只是簡單地按照要求從指定的位置,複製多少位元組資料而已。

dd命令實現映象備份和恢復,比ghost軟體簡單和強大多了。使用ghost軟體,依然需要使用者進行複雜而危險的磁碟分割槽操作。

而使用fdisk和dd這兩條命令,一切都免了!

可能我們需要備份的分割槽很大,使用dd命令生成的映象檔案也就很大。儲存和傳輸這些映象不太方便。  我們也可以使用壓縮程式壓縮生成的映象檔案。 這裡,我選擇使用gzip程式,配合dd命令一起使用。

gzip引數:

-c 表示輸出到stdout

-d  表示解壓縮

-1 表示最快壓縮

-9 表示最好壓縮

預設使用的是-6壓縮級別。

要使用 dd 和 gzip 生成壓縮的映象檔案,可以執行命令:

1ddbs=512count=[fdisk命令中最大的end數+1]if=/dev/sda|gzip-6>/ghost.img.gz

還原時,可以執行下列命令:

1gzip-dc/ghost.img.gz.gz|ddof=/dev/sda

如果你把映象恢復到另一台計算機上,你可能會發現你的網絡卡是eth1,而不是eth0。這是因為/etc/udev/rules.d/70-persistent-net.rules檔案把你做映象的計算機的網絡卡作為eth0登記了。

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

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

注意:

最好在dd生成映象之前,先umount所有 if和of 裝置的分割槽。這樣可以確保在dd的過程中檔案系統沒有被改變。

在完成dd(生成映象和恢復映象)後,執行sudo sync,確保資料被真正寫入到硬碟上。

另外,如果你想要對整個硬碟進行備份和恢復,而不是只備份和恢復部分分割槽,那麼就請把dd命令中的count=[fdisk命令中最大的end數+1]去掉。bs=512也可以去掉。

**:

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

安裝作業系統,速度太慢,整個過程太冗長乏味了。安裝過程中,需要回答若干問題,系統需要安裝無數個軟體,建立和寫入無數的檔案。因為涉及到大量的檔案定位和讀寫,速度一定是快不起來的。windows下我們常常使用ghost系統來備份和燒錄作業系統。ghost可以clone整個系統的映象,然後在新的電腦上恢復...

用dd實現linux硬碟備份

乙個去年的老本,500g硬碟,空間各種捉急,準備遷移到公司的台式電腦上,卻發現linux上遷移環境沒有windows下那麼方便,只能複製整塊硬碟了。從公司拿了一塊1t的硬碟,插入移動硬碟盒 上搞的乙個移動硬碟盒,40元 加電識別,格式化,開始硬碟複製。市面上針對資料備份的軟體不計其數,我們不討論他們...

用Bresenham演算法在FPGA上實現小數分頻器

最近朋友問了乙個問題,輸入時鐘是33mhz,要分出一路2.048mhz的時鐘來,要求相位抖動盡可能小。我想到可以用計算機圖形學中繪製直線的bresenham演算法來解決,獲得成功。輸入時鐘是33000khz,輸出時鐘是2048khz,好比從原點畫一條到 33000,2048 的直線,用輸入時鐘驅動畫...