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

2021-03-02 Linux中國

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

這篇文章節選自 Manning 出版社出版的圖書 Linux in Action[1]的第 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 username@54.98.132.10 "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[3] 選題:lujun9972 譯者:SunWave 校對:wxy

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

相關焦點

  • 如何在 Linux 中整理磁碟碎片
    在大多數情況下這是真的,大多數因為是使用的是優秀的日誌文件系統(ext3、4等等)來處理文件系統。然而,在一些特殊情況下,碎片仍舊會產生。如果正巧發生在你身上,解決方法很簡單。什麼是磁碟碎片文件系統會按塊更新文件,如果這些塊沒有連成一整塊而是分布在磁碟的各個角落中時,就會形成磁碟碎片。這對於 FAT 和 FAT32 文件系統而言是這樣的。
  • 如何在 Linux 中使用 parted 對磁碟分區 | Linux 中國
    學習如何在 Linux 中使用 parted 命令來對存儲設備分區。在 Linux 中創建和刪除分區是一種常見的操作,因為存儲設備(如硬碟驅動器和 USB 驅動器)在使用之前必須以某種方式進行結構化。在大多數情況下,大型存儲設備被分為稱為分區partition的獨立部分。分區操作允許您將硬碟分割成獨立的部分,每個部分都像是一個硬碟驅動器一樣。
  • linux磁碟分區命令--fdisk與parted
    linux前文簡單總結了如何掛載一個新硬碟進行硬碟分區,詳見Linux存儲管理二:磁碟分區和Linux存儲管理一:磁碟分區相關知識硬碟分區的命令沒來的及整理,今天系統整理一下linux分區常用的兩個命令:fdisk與parted。
  • 如何使用命令行檢查 Linux 上的磁碟空間 | Linux 中國
    Linux 提供了所有必要的工具來幫助你確切地發現你的驅動器上剩餘多少空間。Jack 在這裡展示了如何做。快速提問:你的驅動器剩餘多少剩餘空間?一點點還是很多?接下來的提問是:你知道如何找出這些剩餘空間嗎?如果你碰巧使用的是 GUI 桌面( 例如 GNOME、KDE、Mate、Pantheon 等 ),則任務可能非常簡單。
  • 6個關於dd命令備份Linux系統的例子
    有幾種方法來備份Linux系統,包括rsync的和rsnapshot等。本文提供有關使用dd命令備份Linux系統的6個實例。dd是一個功能強大的UNIX工具,由Linux內核的makefile進行引導映像,它也可以用來複製數據。例 1:備份整個硬碟使用dd命令備份整個硬碟。
  • Linux/UNIX: 使用 dd 命令創建 1GB 大小的二進位
    我如何使用 Shell 命令,在 UNIX/Linux/BSD 系統上使用dd命令創建1GB或者10GB鏡像文件?
  • Linux磁碟查看命令
  • Linux命令拾遺-查看系統信息
    相信你也發現了一些Linux磁碟命名的規律,如果有3個磁碟,命名就是sda、sdb、sdc,如果sda有3個分區,分區名就是sda1、sda2、sda3,以此類推。# 查看usb設備$ lsusb# 查看pci設備,一般外圍設備都是通過pci總線連接進來的,所以這個命令一般可以看到很多設備,包括磁碟與網卡等# 輸出中Kernel driver in use表示設備驅動,Kernel modules表示內核模塊$ lspci -v# 通過這個命令
  • 使用 df 命令查看 Linux 上的可用磁碟空間 | Linux 中國
    https://linux.cn/article-13646-1.html作者:Seth Kenlon譯者:Piaoshi磁碟空間已經不像計算機早期那樣珍貴,但無論你有多少磁碟空間,總有耗盡的可能。計算機需要一些磁碟空間才能啟動運行,所以為了確保你沒有在無意間用盡了所有的硬碟空間,偶爾檢查一下是非常必要的。在 Linux 終端,你可以用 df 命令來做這件事。
  • 如何在Linux中創建磁碟分區
    在本文中,我們將解釋如何在Linux系統中對存儲磁碟進行分區,例如CentOS,RHEL,Fedora,Debian和Ubuntu發行版。在Linux中創建磁碟分區在本節中,我們將介紹如何使用parted命令在Linux中對存儲磁碟進行分區。第一步是查看所有塊設備上的分區表或布局。
  • 用於檢測查看磁碟活動的Linux命令
    在這篇文章中,我們將研究五個非常有用的命令來查看磁碟活動。 可能必須將兩個命令(iostat和ioping)添加到您的系統中,這兩個命令要求您使用sudo權限,但所有五個命令都提供了查看磁碟活動的有用方法。可能這些命令中最容易和最明顯的一個是dstat。dstat儘管dstat命令以字母「d」開頭,但它提供的數據不僅僅是磁碟活動。
  • Linux或Ubuntu中查看磁碟空間大小的10個df命令
    在Linux中,您可以使用名為df命令的命令行工具檢查磁碟空間。 df命令代表磁碟文件系統。 使用df命令,您可以在Linux上找到磁碟空間摘要信息,例如可用磁碟空間和已用磁碟空間。在本教程中,我們將教你十個不同的df命令和實際例子來管理Linux上的磁碟空間。
  • 如何在 Linux 中擴展/增加 LVM 大小(邏輯卷調整) | Linux 中國
    LVM 的主要目的是靈活的磁碟管理,當你需要的時候,可以很方便地調整、擴展和縮小邏輯卷的大小。如果你是邏輯卷管理(LVM) 新手,我建議你從我們之前的文章開始學習。擴展邏輯卷涉及到以下步驟:◈ 檢查邏輯卷(LV)所在的卷組中是否有足夠的未分配磁碟空間
  • 如何使用find命令在Linux中查找文件
    Linux Find命令是Linux系統管理員工具庫中最強大的工具之一。
  • linux系統命令
    linux命令分為兩種:內部命令(系統自帶)和外部命令(需要安裝)。
  • Linux基本命令之磁碟管理命令
    磁  盤  管  理1、 分區一般情況下,分區主要有兩種方式,分別為MBR 、
  • 一步步教你如何安裝 Arch Linux | Linux 中國
    簡要說明:這一教程會教你如何用簡單步驟安裝 Arch Linux。Arch Linux[1] 是一個 x86-64 通用發行版,它流行於那些喜歡 DIY[2] Linux 系統的用戶和 Linux 鐵桿粉絲當中。其默認的安裝文件只含有一個最基本的系統,它希望使用者自己配置並使用 Arch 系統。
  • 在 Linux 上檢測 IDE/SATA SSD 硬碟的傳輸速度 | Linux 中國
    你知道你的硬碟在 Linux 下傳輸有多快嗎?不打開電腦的機箱或者機櫃,你知道它運行在 SATA I (150 MB/s) 、 SATA II (300 MB/s) 還是 SATA III (6.0Gb/s) 呢?你能夠使用 hdparm 和 dd 命令來檢測你的硬碟速度。
  • 如何使用 date 命令 | Linux 中國
    作者 | Rosehosting 譯者 | lujun9972在本文中, 我們會通過一些案例來演示如何使用 Linux 中的 date 命令。[+FORMAT]  or:  date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]以給定格式顯示當前時間,或設置系統時間。案例下面這些案例會向你演示如何使用 date 命令來查看前後一段時間的日期時間。
  • 如何使用ln命令在Linux中創建符號連結
    在本指南中,我們將介紹如何使用ln命令創建符號連結。連結類型Linux/UNIX系統中有兩種類型的連結:命令ln是用於在文件之間創建連結的實用程序。默認情況下,ln命令會創建硬連結。要創建符號連結,請使用-s(--symbolic)選項。