如何在Linux下使用dd制作副本又不破壞你的磁盤(pán)?
譯文【51CTO.com快譯】 本文教你使用Linux dd工具,安全可靠地為驅(qū)動(dòng)器、分區(qū)和文件系統(tǒng)制作***副本。
無(wú)論你試圖從即將壞掉的存儲(chǔ)驅(qū)動(dòng)器搶救數(shù)據(jù),將歸檔備份到遠(yuǎn)程存儲(chǔ),還是在別處對(duì)活動(dòng)分區(qū)制作一份***副本,都要知道如何安全可靠地復(fù)制驅(qū)動(dòng)器和文件系統(tǒng)。幸好,有dd這款簡(jiǎn)單而強(qiáng)大的鏡像復(fù)制工具,而且歷史悠久。在這方面沒(méi)有比它更出色的工具了。
為驅(qū)動(dòng)器和分區(qū)制作***副本
如果你研究足夠深入,可以用dd執(zhí)行各種任務(wù),但它最出色的功能就是讓你可以玩轉(zhuǎn)分區(qū)。當(dāng)然,可以使用tar甚至scp來(lái)復(fù)制整個(gè)文件系統(tǒng),辦法就是從一臺(tái)計(jì)算機(jī)復(fù)制文件,然后將它們?cè)獠粍?dòng)地粘貼到另一臺(tái)計(jì)算機(jī)上新安裝的Linux。但是,由于那些文件系統(tǒng)歸檔不是完整的鏡像,它們需要在兩頭都運(yùn)行主機(jī)操作系統(tǒng)作為基礎(chǔ)。
另一方面,使用dd可以為幾乎任何數(shù)字化內(nèi)容制作逐字節(jié)對(duì)應(yīng)的***鏡像。但是在你開(kāi)始將分區(qū)從一個(gè)地方復(fù)制到另一個(gè)地方,有必要提一下:“dd代表磁盤(pán)破壞者”這句盛傳于Unix管理員當(dāng)中的老話有一定道理。即使在dd命令中輸錯(cuò)哪怕一個(gè)字符,都會(huì)立即***地清除整個(gè)驅(qū)動(dòng)器的寶貴數(shù)據(jù)。是的,確保輸入無(wú)誤很重要。
切記:在按下回車鍵調(diào)用dd之前,務(wù)必要考慮清楚!
dd的基本操作
我們已對(duì)你作了必要的警告,先從簡(jiǎn)單的方面開(kāi)始入手。假設(shè)你想為被指定為/dev/sda的整個(gè)磁盤(pán)的數(shù)據(jù)創(chuàng)建一個(gè)精確鏡像。你已插入了空的驅(qū)動(dòng)器(理想情況下容量與/dev/sda系統(tǒng)一樣大)。語(yǔ)法很簡(jiǎn)單:if =定義源驅(qū)動(dòng)器,of =定義保存數(shù)據(jù)的文件或位置:
- # dd if=/dev/sda of=/dev/sdb
下一個(gè)例子將創(chuàng)建/dev/sda驅(qū)動(dòng)器的.img歸檔,將其保存到用戶帳戶的主目錄中:
- # dd if=/dev/sda of=/home/username/sdadisk.img
那些命令創(chuàng)建了整個(gè)驅(qū)動(dòng)器的鏡像。你還可以專注于驅(qū)動(dòng)器中的單個(gè)分區(qū)。下一個(gè)例子執(zhí)行該操作,還使用bs設(shè)置一次復(fù)制的字節(jié)數(shù)(本例中是4096個(gè)字節(jié))。調(diào)整bs值可能會(huì)影響dd操作的整體速度,但理想的設(shè)置將取決于你的硬件配置文件及其他考量因素。
- # dd if=/dev/sda2 of=/home/username/partition2.img bs=4096
恢復(fù)起來(lái)很簡(jiǎn)單:實(shí)際上只要將if的值和of的值反過(guò)來(lái)。在本文中,if=對(duì)應(yīng)你想要恢復(fù)的鏡像,of=對(duì)應(yīng)你想要寫(xiě)入鏡像的目標(biāo)驅(qū)動(dòng)器:
- # dd if=sdadisk.img of=/dev/sdb
還可以在一個(gè)命令中同時(shí)執(zhí)行創(chuàng)建操作和復(fù)制操作。比如說(shuō),該例子將使用SSH創(chuàng)建遠(yuǎn)程驅(qū)動(dòng)器的壓縮鏡像,并將生成的歸檔保存到本地計(jì)算機(jī):
- # ssh username@54.98.132.10 "dd if=/dev/sda | gzip -1 -" | dd of=backup.gz
你應(yīng)該始終測(cè)試歸檔,確認(rèn)它們是否正常可用。如果它是你創(chuàng)建的啟動(dòng)驅(qū)動(dòng)器,將它插入到計(jì)算機(jī),看看是否正常啟動(dòng)。如果它是普通的數(shù)據(jù)分區(qū),掛載它以確保文件存在且可以正常訪問(wèn)。
用dd擦除磁盤(pán)
多年前,我有個(gè)朋友為其政府負(fù)責(zé)海外大使館的安保工作。他曾告訴我,他監(jiān)管的每個(gè)大使館都配有政府發(fā)放的一把錘子。為什么?萬(wàn)一大使館遇到什么危險(xiǎn),可以使用這把錘子砸爛所有硬盤(pán)。
那為什么不刪除數(shù)據(jù)呢?你不是在開(kāi)玩笑吧?眾所周知,從存儲(chǔ)設(shè)備刪除含有敏感數(shù)據(jù)的文件實(shí)際上刪除不了數(shù)據(jù)。如果時(shí)間夠充裕、動(dòng)機(jī)夠強(qiáng)烈,可以從幾乎任何數(shù)字介質(zhì)找回幾乎任何數(shù)據(jù),那些被砸得稀巴爛的數(shù)字介質(zhì)除外。
然而,你可以使用dd讓不法分子極難搞到你的舊數(shù)據(jù)。這個(gè)命令將花一些時(shí)間在/dev/sda1分區(qū)的每個(gè)角落上創(chuàng)建數(shù)百萬(wàn)個(gè)0:
- # dd if=/dev/zero of=/dev/sda1
但它可以變得更好。使用/dev/urandom文件作為來(lái)源,你可以使用隨機(jī)字符寫(xiě)入到磁盤(pán):
- # dd if=/dev/urandom of=/dev/sda1
監(jiān)控dd操作
由于磁盤(pán)或分區(qū)歸檔可能要花很長(zhǎng)時(shí)間,你可能需要為命令添加進(jìn)度監(jiān)控工具。安裝Pipe Viewer(Ubuntu上執(zhí)行sudo apt install pv),并將其插入到dd。使用pv,***一個(gè)命令看起來(lái)像這樣:
- # dd if=/dev/urandom | pv | dd of=/dev/sda1
- 4,14MB 0:00:05 [ 98kB/s] [ <=> ]
厭煩了備份和磁盤(pán)管理?有了dd,你不會(huì)有太多的借口。它用起來(lái)其實(shí)不難,不過(guò)要小心。祝你好運(yùn)!
原文標(biāo)題:How to use dd in Linux without destroying your disk,作者:David Clinton
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】