這篇文章節(jié)選自 Manning 出版社出版的圖書Linux in Action的第 4 章。
你是否正在從一個(gè)即將損壞的存儲(chǔ)驅(qū)動(dòng)器挽救數(shù)據(jù),或者要把本地歸檔進(jìn)行遠(yuǎn)程備份,或者要把一個(gè)別處的活動(dòng)分區(qū)做個(gè)完整的副本,那么你需要懂得如何安全而可靠的復(fù)制驅(qū)動(dòng)器和文件系統(tǒng)。幸運(yùn)的是,dd是一個(gè)可以使用的簡單而又功能強(qiáng)大的鏡像復(fù)制命令,從現(xiàn)在到未來很長的時(shí)間內(nèi),也許直到永遠(yuǎn)都不會(huì)出現(xiàn)比dd更好的工具了。
對驅(qū)動(dòng)器和分區(qū)做個(gè)完整的副本
仔細(xì)研究后,你會(huì)發(fā)現(xiàn)你可以使用dd做各種任務(wù),但是它最重要的功能是處理磁盤分區(qū)。當(dāng)然,你可以使用tar命令或者scp命令從一臺計(jì)算機(jī)復(fù)制整個(gè)文件系統(tǒng)的文件,然后把這些文件原樣粘貼在另一臺剛剛安裝好 Linux 操作系統(tǒng)的計(jì)算機(jī)中。但是,因?yàn)槟切┪募到y(tǒng)歸檔不是完整的映像文件,所以在復(fù)制文件的過程中需要計(jì)算機(jī)操作系統(tǒng)的運(yùn)行作為基礎(chǔ)。
另一方面,使用dd可以對任何數(shù)字信息完美的進(jìn)行逐個(gè)字節(jié)的鏡像。但是不論何時(shí)何地,當(dāng)你要對分區(qū)進(jìn)行操作時(shí),我要告訴你早期的 Unix 管理員曾開過這樣的玩笑:“ dd 的意思是磁盤毀滅者(disk destroyer)”(LCTT 譯注:dd原意是磁盤復(fù)制 disk dump)。 在使用dd命令的時(shí)候,如果你輸入了哪怕是一個(gè)字母,也可能立即永久性的擦除掉整個(gè)磁盤驅(qū)動(dòng)器里的所有重要的數(shù)據(jù)。因此,一定要注意命令的拼寫格式規(guī)范。
記?。涸诎聪禄剀囨I執(zhí)行dd命令之前,暫時(shí)停下來仔細(xì)的認(rèn)真思考一下。
dd 命令的基本操作
現(xiàn)在你已經(jīng)得到了適當(dāng)?shù)奶嵝?,我們將從簡單的事情開始。假設(shè)你要對代號為/dev/sda的整個(gè)磁盤數(shù)據(jù)創(chuàng)建精確的映像,你已經(jīng)插入了一塊空的磁盤驅(qū)動(dòng)器 (理想情況下具有與代號為/dev/sda的磁盤驅(qū)動(dòng)器相同的容量)。語法很簡單:if=定義源驅(qū)動(dòng)器,of=定義你要將數(shù)據(jù)保存到的文件或位置:
# dd if=/dev/sda of=/dev/sdb
接下來的例子將要對/dev/sda驅(qū)動(dòng)器創(chuàng)建一個(gè) .img 的映像文件,然后把該文件保存的你的用戶帳號家目錄:
# dd if=/dev/sda of=/home/username/sdadisk.img
上面的命令針對整個(gè)驅(qū)動(dòng)器創(chuàng)建映像文件,你也可以針對驅(qū)動(dòng)器上的單個(gè)分區(qū)進(jìn)行操作。下面的例子針對驅(qū)動(dòng)器的單個(gè)分區(qū)進(jìn)行操作,同時(shí)使用了一個(gè)bs參數(shù)用于設(shè)置單次拷貝的字節(jié)數(shù)量 (此例中是 4096)。設(shè)定bs參數(shù)值可能會(huì)影響dd命令的整體操作速度,該參數(shù)的理想設(shè)置取決于你的硬件配置和其它考慮。
# dd if=/dev/sda2 of=/home/username/partition2.img bs=4096
數(shù)據(jù)的恢復(fù)非常簡單:通過顛倒if和of參數(shù)可以有效的完成任務(wù)。在此例中,if=使用你要恢復(fù)的映像,of=使用你想要寫入映像的目標(biāo)驅(qū)動(dòng)器:
# dd if=sdadisk.img of=/dev/sdb
你也可以在一條命令中同時(shí)完成創(chuàng)建和拷貝任務(wù)。下面的例子中將使用 SSH 從遠(yuǎn)程驅(qū)動(dòng)器創(chuàng)建一個(gè)壓縮的映像文件,并把該文件保存到你的本地計(jì)算機(jī)中:
# ssh username@54.98.132.10 "dd if=/dev/sda | gzip -1 -" | dd of=backup.gz
你應(yīng)該經(jīng)常測試你的歸檔,確保它們可正常使用。如果它是你創(chuàng)建的啟動(dòng)驅(qū)動(dòng)器,將它粘貼到計(jì)算機(jī)中,看看它是否能夠按預(yù)期啟動(dòng)。如果它是普通分區(qū)的數(shù)據(jù),掛載該分區(qū),確保文件都存在而且可以正常的訪問。
使用 dd 擦除磁盤數(shù)據(jù)
多年以前,我的一個(gè)負(fù)責(zé)政府海外大使館安全的朋友曾經(jīng)告訴我,在他當(dāng)時(shí)在任的時(shí)候, 政府會(huì)給每一個(gè)大使館提供一個(gè)官方版的錘子。為什么呢? 一旦大使館設(shè)施可能被不友善的人員侵占,就會(huì)使用這個(gè)錘子毀壞所有的硬盤.
為什么要那樣做?為什么不是刪除數(shù)據(jù)就好了?你在開玩笑,對吧?所有人都知道從存儲(chǔ)設(shè)備中刪除包含敏感信息的文件實(shí)際上并沒有真正移除這些數(shù)據(jù)。除非使用錘子徹底的毀壞這些存儲(chǔ)介質(zhì),否則,只要有足夠的時(shí)間和動(dòng)機(jī), 幾乎所有的內(nèi)容都可以從幾乎任何數(shù)字存儲(chǔ)介質(zhì)重新獲取。
但是,你可以使用dd命令讓壞人非常難以獲得你的舊數(shù)據(jù)。這個(gè)命令需要花費(fèi)一些時(shí)間在/dev/sda1分區(qū)的每個(gè)扇區(qū)寫入數(shù)百萬個(gè)0(LCTT 譯注:是指 0x0 字節(jié),意即 NUL ,而不是數(shù)字 0 ):
# dd if=/dev/zero of=/dev/sda1
還有更好的方法。通過使用/dev/urandom作為源文件,你可以在磁盤上寫入隨機(jī)字符:
# dd if=/dev/urandom of=/dev/sda1
監(jiān)控 dd 的操作
由于磁盤或磁盤分區(qū)的歸檔可能需要很長的時(shí)間,因此你可能需要在命令中添加進(jìn)度查看器。安裝管道查看器(在 Ubuntu 系統(tǒng)上安裝命令為sudo apt install pv),然后把pv命令和dd命令結(jié)合在一起。使用pv,最終的命令是這樣的:
# dd if=/dev/urandom | pv | dd of=/dev/sda1
4,14MB 0:00:05 [ 98kB/s] [ <=> ]
想要推遲備份和磁盤管理工作?有了dd工具,你不會(huì)有太多的借口。它真的非常簡單,但是要小心。祝你好運(yùn)!
-
驅(qū)動(dòng)器
+關(guān)注
關(guān)注
54文章
8681瀏覽量
149747 -
磁盤
+關(guān)注
關(guān)注
1文章
390瀏覽量
25799
原文標(biāo)題:如何在 Linux 系統(tǒng)中使用 dd 命令而不會(huì)損毀你的磁盤
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄

uClinux的塊驅(qū)動(dòng)器
什么是led驅(qū)動(dòng)器

什么是邏輯驅(qū)動(dòng)器
驅(qū)動(dòng)器/接收器,驅(qū)動(dòng)器/接收器原理是什么?
顯示驅(qū)動(dòng)器,顯示驅(qū)動(dòng)器基本原理是什么?
外圍驅(qū)動(dòng)器,什么是外圍驅(qū)動(dòng)器
TI宣布推出一款完整LED照明驅(qū)動(dòng)器參考板
電機(jī)驅(qū)動(dòng)器是什么
電機(jī)驅(qū)動(dòng)器解決方案以及從分立元件構(gòu)建驅(qū)動(dòng)器

Commodore 1581副本磁盤驅(qū)動(dòng)器構(gòu)建項(xiàng)目

驅(qū)動(dòng)器和電機(jī)驅(qū)動(dòng)器的概念
驅(qū)動(dòng)器的分類及應(yīng)用

評論