12.09 Linux dd命令有多強大?


1. 前言

本文主要介紹Linux dd命令的強大功能與日常的使用案例。
Linux中的dd命令是一個用於複製和轉換文件的實用工具,有許多實際用途。
有人提出,這個名稱是源自一個較老的IBM作業控制語言函數,其中dd代表Data Definition,翻譯為數據定義。在Linux中,這個縮寫表示Data Duplicator(數據複製器)或Disk Dump(磁盤轉儲)或其他各種名稱,具體取決於您的源代碼。
它甚至還贏得了一個令人心酸的綽號data destroyer(數據破壞者),這讓我想到了一個重要的問題。在練習dd命令時請多加小心。
這個命令能造成一些嚴重的破壞。一定要仔細檢查語法,以避免代價高昂的錯誤。不肯定不想看到由於操作不當而造成數據丟失。

Linux dd命令有多強大?

Linux dd日常使用案例


2. 開始瞭解`dd`命令

dd命令使用以下語法:

dd if=<filename> of=<filename> [options]
/<filename>/<filename>

這個命令有廣泛的用途,我將介紹一些常見的方法。

3. 使用`dd`命令進行物理介質分區克隆或備份

在上面的語法中,if和of分別用於輸入文件和輸出文件。這是dd的核心功能,它將數據從一個源複製到另一個源。您不需要在dd中使用物理媒體。

Linux dd命令有多強大?

使用dd命令進行物理介質分區克隆或備份


4. 使用`dd`命令進行文本處理

可以從鍵盤使用stdin(標準輸入)來收集輸入並將其指向文件。還可以快速轉換大小寫,手冊頁中還包括各種其他有用的文本編輯工具。

我之前提到過IBM,指的是這個程序的悠久歷史。該命令的原始功能之一實際上是將EBCDIDC (IBM創建的一種編碼模式)轉換為ASCII。

5. 使用`dd`命令進行文件系統操作

您也可以使用它來複制文件,但是對於這個簡單的應用程序,建議使用cp命令而不是dd。我們有一篇關於cp命令的文章。

Linux cp命令複製文件

6. 使用`dd`命令一些行為記錄

使用dd進行復制時,您還應該注意,在默認情況下,它將從指定的源複製完整的信息。

這意味著如果您試圖複製一個分區或磁盤,它也會複製空閒空間。

因此,例如,如果您要克隆一個具有4TB的硬盤驅動器,您將需要一個至少具有4TB的目標驅動器,以防止文件被截斷和出現錯誤。還要記住,如果磁盤只有1TB的數據,dd仍然會複製其他3TB的空間。這是一個糟糕的舉動,會浪費很多時間和資源。

我們可以限制dd的一些行為,通過指定豐富的參數進行控制。

注意!為了練習,請使用虛擬機

我強烈建議您將您的目標概念化,並小心地執行它,以避免破壞或破壞重要的文件。很明顯,我們對丟失你的信息不承擔責任。如果你犯錯了。別說我們沒警告過你。

我建議在嘗試更改任何生產環境配置之前,先在虛擬的虛擬機上練習加以熟悉。這是因為dd命令能夠在您不正確地使用文件系統時進行更改,從而損壞文件系統。

對於本教程,我決定嘗試一下Debian體系之外的Linux發行版,並在VirtualBox中創建了一個Fedora 31的副本。

7. `dd`命令的5個實際例子

有了警告和一些上下文信息之後,我們就可以開始討論這個簡單但功能強大的命令的一些應用程序了。

7.1 `dd`命令使用案使用示例1:克隆磁盤

使用dd可以很容易地將一個磁盤複製到另一個磁盤。例如,我有兩個名為sda和sdb的磁盤。

Linux dd命令有多強大?

dd命令使用案使用示例1:克隆磁盤


請記住,sda將試圖複製到sdb使用驅動器的整個內容,而不僅僅是數據。

您需要在輸出文件上分配足夠的空間來容納扇區上未使用的空間。您還可以選擇將驅動器重新分區到當前由數據填充的確切大小。我推薦這種方法。它將減少執行操作所需的時間,並創建更有用的文檔。

當您準備克隆一個磁盤時,您可以運行fdisk來識別您的磁盤、它們的分區和容量。

sudo fdisk -l

運行此命令將列出可用的驅動器和分區及其各自的大小。這有助於正確識別目標設備。

同樣,對於我們的應用程序,我們使用的名稱是sda和sdb,我們將假設它們的大小相同。

[zcwyou@fedora ~]$ sudo dd if=/dev/sda of=/dev/sdb
[[enter pw for sudo]]
dd: writing to 'dev/sdb': No space left on device
8108369+0 records in
8108369+0 records out
4151484416 bytes (4.2 GB, 3.9 GiB) copied, 12.3602 s 336 MB/s

輸出讓我們知道寫入成功,我們可以忽略sdb上已經沒有任何空間的消息。

摘要還列出了複製的數據量、所需時間和複製速度。當我講到塊大小的時候,我們會再多講一點。

7.2 `dd`命令使用案例2:備份一個磁盤分區

克隆設備和備份分區的步驟類似。我們可以創建一個.img(原始磁盤映像)文件,而不是將目標文件作為一個設備。

假設我們的系統在sda2有一個單獨的主目錄分區,我們希望將它備份到一個名為home_backup的文件中。在我們當前的目錄中。

dd if=/dev/sda2 of=home_backup.img

就是這麼簡單!簡單和強大的備份程序就在您手上。但總是有更多的東西要學。

7.3 `dd`命令使用案例3:刪除數據並將磁盤歸零

還記得之前的所有警告嗎?這個命令將用0替換sda的每個塊。即刪除數據並無法還原。

Linux dd命令有多強大?

dd命令使用案例3:刪除數據並將磁盤歸零


dd if=/dev/zero of=/dev/sda

這是怎麼做到的呢?本質上,與所有其他in和out 選項相同。/dev/zero是什麼?

它是一個包含在Unix/Linux操作系統中的偽設備,它將向文件寫入0,直到它到達文件的末尾。

你也可以使用dev/random來輸出隨機的數據。如果您計劃使用原始圖像文件來替換內容,這可能是不必要的,因為使用dd已經複製了未使用的空間。

請注意,一些惡意有心的人在各種Linux論壇上欺騙不知情的用戶來運行這個命令。現在你知道這個命令的作用了,你就不會成為這個邪惡惡作劇的犧牲品了。

7.4 `dd`命令使用案例4:`CD/DVD`中創建`.ISO`文件

如果你的電腦還有光驅的話,你可以直接從光驅上拷貝。之前我提到過cd-rom的標準字節大小是2048。我們將設置與之匹配的字節大小以避免轉換問題,然後添加幾個其他命令。

dd if=/dev/cdrom of=space_jam_dvd.iso bs=2048 conv=noerror,sync

讓我解釋一些事情。使用conv=noerror,任何錯誤都將被忽略。這個程序將一直運行到最後一個塊而不停止。它不會為他們停止。

當與noerror一起使用時,sync將確保任何丟失的數據塊將自動用空信息填充。

這意味著現有數據將被映射到相同的位置,可能會盡可能多地保留內容。

確保源文件和目標文件具有相同的bs來進行這些操作是很重要的,否則它們將不會得到預期的結果。

7.5 `dd`命令使用案例5:創建一個可啟動的USB

您可以使用dd創建一個可啟動的USB,它就像您所期望的那樣簡單。事實上,這是dd命令最流行的用法之一。

這裡涉及到一個額外的步驟。在運行dd之前,我們使用mkfs命令在我們的USB上構建文件系統。

沒有選項,它使用默認的ext2系統。因此,假設我們要準備的USB被稱為sdb,我們想要將文件系統更改為ext4,我們將運行以下命令:

sudo mkfs.ext4 /dev/sdb

如果希望與Windows系統一起使用,可以使用mkfs.ntfs來替換命令的第一部分。

你也可以使用以下語法:

mkfs -t [for type] $filesystem.

一旦準備好了可啟動的介質,我們就可以繼續執行dd命令。

dd if=someFile.iso of=/dev/sdb

使用.iso文件掛載映像並複製到usb設備的相應驅動器名。

8. 結論

本文主要介紹Linux dd命令的強大功能與日常的使用案例。有很多不同的方法可以使用這個命令。我試著講了很多更有用的例子。如果你有什麼想看的或直接的問題,我很樂意幫忙。請在評論中告訴我你的想法。

本文已同步至博客站,尊重原創,轉載時請在正文中附帶以下鏈接:
https://www.linuxrumen.com/rmxx/1526.html

點擊瞭解更多,快速查看更多的技術文章列表。


分享到:


相關文章: