1. 前言
本文主要介紹linux dd命令的強大功能與日常的使用案例。
Linux中的dd命令是一個用于復制和轉換文件的實用工具,有許多實際用途。
有人提出,這個名稱是源自一個較老的IBM作業控制語言函數,其中dd代表Data Definition,翻譯為數據定義。在Linux中,這個縮寫表示Data Duplicator(數據復制器)或Disk Dump(磁盤轉儲)或其他各種名稱,具體取決于您的源代碼。
它甚至還贏得了一個令人心酸的綽號data destroyer(數據破壞者),這讓我想到了一個重要的問題。在練習dd命令時請多加小心。
這個命令能造成一些嚴重的破壞。一定要仔細檢查語法,以避免代價高昂的錯誤。不肯定不想看到由于操作不當而造成數據丟失。
Linux dd日常使用案例
2. 開始了解`dd`命令
dd命令使用以下語法:
dd if=<filename> of=<filename> [options]
這個命令有廣泛的用途,我將介紹一些常見的方法。
3. 使用`dd`命令進行物理介質分區克隆或備份
在上面的語法中,if和of分別用于輸入文件和輸出文件。這是dd的核心功能,它將數據從一個源復制到另一個源。您不需要在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的磁盤。
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的每個塊。即刪除數據并無法還原。
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