如何在 Linux 系統中使用 dd 命令而不會損毀你的磁碟

如何在 Linux 系統中使用 dd 命令而不會損毀你的磁盤

編譯自: https://opensource.com/article/18/7/how-use-dd-linux

使用 Linux 中的 dd 工具安全、可靠地製作一個驅動器、分區和文件系統的完整鏡像。

這篇文章節選自 Manning 出版社出版的圖書 Linux in Action 的第 4 章。

你是否正在從一個即將損壞的存儲驅動器挽救數據,或者要把本地歸檔進行遠程備份,或者要把一個別處的活動分區做個完整的副本,那麼你需要懂得如何安全而可靠的複製驅動器和文件系統。幸運的是,dd 是一個可以使用的簡單而又功能強大的鏡像複製命令,從現在到未來很長的時間內,也許直到永遠都不會出現比 dd 更好的工具了。

對驅動器和分區做個完整的副本

仔細研究後,你會發現你可以使用 dd 做各種任務,但是它最重要的功能是處理磁盤分區。當然,你可以使用 tar 命令或者 scp 命令從一臺計算機複製整個文件系統的文件,然後把這些文件原樣粘貼在另一臺剛剛安裝好 Linux 操作系統的計算機中。但是,因為那些文件系統歸檔不是完整的映像文件,所以在複製文件的過程中需要計算機操作系統的運行作為基礎。

另一方面,使用 dd 可以對任何數字信息完美的進行逐個字節的鏡像。但是不論何時何地,當你要對分區進行操作時,我要告訴你早期的 Unix 管理員曾開過這樣的玩笑:“ dd 的意思是 磁盤毀滅者(disk destroyer)”(LCTT 譯註:dd 原意是 磁盤複製(disk dump))。 在使用 dd 命令的時候,如果你輸入了哪怕是一個字母,也可能立即永久性的擦除掉整個磁盤驅動器裡的所有重要的數據。因此,一定要注意命令的拼寫格式規範。

記住: 在按下回車鍵執行 dd 命令之前,暫時停下來仔細的認真思考一下。

dd 命令的基本操作

現在你已經得到了適當的提醒,我們將從簡單的事情開始。假設你要對代號為 /dev/sda 的整個磁盤數據創建精確的映像,你已經插入了一塊空的磁盤驅動器 (理想情況下具有與代號為 /dev/sda 的磁盤驅動器相同的容量)。語法很簡單: if= 定義源驅動器,of= 定義你要將數據保存到的文件或位置:

# dd if=/dev/sda of=/dev/sdb

接下來的例子將要對 /dev/sda 驅動器創建一個 .img 的映像文件,然後把該文件保存到你的用戶帳號家目錄:

# dd if=/dev/sda of=/home/username/sdadisk.img

上面的命令針對整個驅動器創建映像文件,你也可以針對驅動器上的單個分區進行操作。下面的例子針對驅動器的單個分區進行操作,同時使用了一個 bs 參數用於設置單次拷貝的字節數量 (此例中是 4096)。設定 bs 參數值可能會影響 dd 命令的整體操作速度,該參數的理想設置取決於你的硬件配置和其它考慮。

# dd if=/dev/sda2 of=/home/username/partition2.img bs=4096

數據的恢復非常簡單:通過顛倒 if 和 of 參數可以有效的完成任務。在此例中,if= 使用你要恢復的映像,of= 使用你想要寫入映像的目標驅動器:

# dd if=sdadisk.img of=/dev/sdb

你也可以在一條命令中同時完成創建和拷貝任務。下面的例子中將使用 SSH 從遠程驅動器創建一個壓縮的映像文件,並把該文件保存到你的本地計算機中:

# ssh [email protected] "dd if=/dev/sda | gzip -1 -" | dd of=backup.gz

你應該經常測試你的歸檔,確保它們可正常使用。如果它是你創建的啟動驅動器,將它粘貼到計算機中,看看它是否能夠按預期啟動。如果它是普通分區的數據,掛載該分區,確保文件都存在而且可以正常的訪問。

使用 dd 擦除磁盤數據

多年以前,我的一個負責政府海外大使館安全的朋友曾經告訴我,在他當時在任的時候, 政府會給每一個大使館提供一個官方版的錘子。為什麼呢? 一旦大使館設施可能被不友善的人員侵佔,就會使用這個錘子毀壞所有的硬盤.

為什麼要那樣做?為什麼不是刪除數據就好了?你在開玩笑,對吧?所有人都知道從存儲設備中刪除包含敏感信息的文件實際上並沒有真正移除這些數據。除非使用錘子徹底的毀壞這些存儲介質,否則,只要有足夠的時間和動機, 幾乎所有的內容都可以從幾乎任何數字存儲介質重新獲取。

但是,你可以使用 dd 命令讓壞人非常難以獲得你的舊數據。這個命令需要花費一些時間在 /dev/sda1 分區的每個扇區寫入數百萬個 0(LCTT 譯註:是指 0x0 字節,意即 NUL ,而不是數字 0 ):

# dd if=/dev/zero of=/dev/sda1

還有更好的方法。通過使用 /dev/urandom 作為源文件,你可以在磁盤上寫入隨機字符:

# dd if=/dev/urandom of=/dev/sda1

監控 dd 的操作

由於磁盤或磁盤分區的歸檔可能需要很長的時間,因此你可能需要在命令中添加進度查看器。安裝管道查看器(在 Ubuntu 系統上安裝命令為 sudo apt install pv),然後把 pv 命令和 dd 命令結合在一起。使用 pv,最終的命令是這樣的:

# dd if=/dev/urandom | pv | dd of=/dev/sda1

4,14MB 0:00:05 [ 98kB/s] [ <=> ]

想要推遲備份和磁盤管理工作?有了 dd 工具,你不會有太多的藉口。它真的非常簡單,但是要小心。祝你好運!


via: https://opensource.com/article/18/7/how-use-dd-linux

作者: David Clinton 選題: lujun9972 譯者: SunWave 校對: wxy

本文由 LCTT 原創編譯, Linux中國 榮譽推出


分享到:


相關文章: