使用dd命令

dd(數據集定義)命令是一種簡單,有用且令人驚訝的易於使用的工具。 使用此工具,您可以在設備上執行相同的操作:磁盤和分區,就像Windows上的Norton Ghost等商業程序,或者Linux上的諸如CloneZilla的免費程序一樣,只需短命令行即可。

基本語法:

使用dd命令的最基本語法是:

sudo dd if=origen of=destino

哪裡 如果意思是“輸入文件=輸入文件“,也就是說,您要復制和 的“輸出文件=輸出文件“,即目標文件(將在其中復制數據);起源和 目標可以是設備(CD或DVD閱讀器,硬盤,軟盤,pendrive,分區等),備份文件或磁盤映像等,但不能是文件夾或子文件夾。

為了順利使用此命令,首先要弄清楚在Linux中調用了哪些分區/硬盤驅動器(例如,/ dev / sda1; / dev源自device = device,英文)。 為了找到源磁盤和目標磁盤/分區,我們可以使用sudo fdisk -lo命令和一些圖形分區程序(例如gparted)輕鬆找到。 有關dd命令的所有信息都可以通過命令man dd和info dd進行查詢,

請謹慎使用此命令,並始終檢查磁盤/分區的順序和名稱,因為就像克隆磁盤一樣,它會立即擦除它。

pv命令的語法:將dd命令與以前的語法一起使用有一個小缺點,因為它是一個非常保留的命令-它不提供信息-因為在執行時,終端提示符仍然不動,因此我們不知道發生了什麼,還有多少時間可以完成執行。 可以通過在dd命令的語法中添加命令pv(*)(充當測量通過它的數據的終端管道)來解決此不便之處,現在的語法為:

dd if=origen |pv|dd of=destino

結果,我們將在終端中獲得一種進度條,有關已傳輸字節的信息,已運行時間和傳輸速率的所有實時信息。

(alf)-(〜)└──┤dd if = / devmmcblk0p1 | pv | dd = / dev / mmcblk0p2 1,630GB 0:21:30 [1,12MB / s] [

同樣,完成後,它會向我們顯示傳輸速率,傳輸的總字節數以及傳輸所有數據所需的總時間的統計信息。

(alf)-(〜)└──┤dd if = / devmmcblk0p1 | pv | dd = / dev / mmcblk0p2 10530816 +讀取0條記錄<=> 10530816 +寫入0條記錄複製5391777792字節(5.4 GB),3873,48 s,1,4 MB / s 5,02GB 1:04:33 [1,33MB / s] [<=> 10530816 +讀取0條記錄<=> 10530816 + 0寫入的記錄5391777792字節(5.4GB)已復制,3873,48, 1,4 s,XNUMX MB / s(alf)-(〜)└──┤

(*)在使用第二種語法執行任何命令行之前,請檢查是否已在系統上安裝了pv軟件包,如果沒有,請安裝該軟件包:兩者均與Synaptic一起安裝。

讓我們看一下此命令的一些實際示例和選項(在其版本中帶有先前通過pv命令說明的技巧):

A)關於硬盤驅動器和分區:

=克隆硬盤:

這樣,我們就可以將hda磁盤克隆到hdb中。 (IDE磁盤):

sudo dd if=/dev/hda |pv|dd of=/dev/hdb bs=1M

這樣我們將在sdb中克隆sda磁盤。 (SATA磁盤):

sudo dd if=/dev/sda |pv|dd of=/dev/sdb bs=1M

通過選擇bs = 1M,可以實現在1兆字節的塊中進行讀取和寫入(更少,這樣做會更慢,但更安全,並且有更多的風險,因此我們會丟失數據)。

請記住,以這種方式將磁盤“按原樣”記錄,MBR,分區表,空白空間等記錄,因此您只能在大小相同或更大的磁盤上進行記錄。

=僅將源磁盤的第一個分區(hda1)寫入目標磁盤(hdb):

sudo dd if=/dev/hda1 |pv|dd of=/dev/hdb bs=1M

=將整個磁盤(hda)刻錄到目標磁盤的第一個分區(hdb1):

sudo dd if=/dev/hda |pv|dd of=/dev/hdb1 bs=1M

=從/ home目錄中的硬盤(hda)創建映像-可以是bin或iso-:

sudo dd if=/dev/hda |pv|dd of=/home/hda.bin

=完全擦除磁盤上的信息:為此,用隨機字符填充磁盤XNUMX次。 磁盤上將沒有任何信息跟踪:

for n in {1..5}; do dd if=/dev/urandom |pv|dd of=/dev/hda bs=8b conv=notrunc;

=從任何設備擦除任何分區和整個磁盤:

sudo dd if=/dev/zero |pv|dd of=/dev/sdx (全盤擦除)

sudo dd if=/dev/zero |pv|dd of=/dev/sdxa (磁盤分區擦除)

其中:x是要擦除的磁盤,a是要擦除的分區

此操作對於完全擦除任何分區非常有用,此外,將無法恢復將要擦除的數據,因此這是一種低級且非常安全的擦除,例如在數位驅動器被我們的病毒感染時非常有用親愛的窗戶。

B)在CD / DVD上

=從CD(或DVD)創建/掛載.iso映像

要在/ home目錄中創建CD的.iso映像,請執行以下操作:

sudo dd if=/dev/cdrom |pv|dd of=/home/imagendeCD.iso

要從CD掛載.iso映像:

sudo mount -o loop imagedeCD.iso /mnt/home

=恢復劃傷的DVD(這不會恢復整個DVD,在這種情況下,僅恢復可讀扇區)。 它還適用於有缺陷的硬盤驅動器:

sudo dd if=/dev/cdrom |pv|dd of=/home/dvd_recuperado.iso conv=noerror,sync

noerror選項用於避免在任何情況下讀取錯誤。

C)關於MBR和VBS:

=複製/還原主引導記錄(MBR):

複製MBR:

sudo dd if=/dev/hda |pv|dd of=mbr count=1 bs=512

還原MBR:

sudo dd if=mbr |pv|dd of=/dev/hda

=清理我們的MBR和分區表:

sudo dd if=/dev/zero |pv|dd of=/dev/hda bs=512 count=1

=清除MBR但不接觸分區表(對擦除GRUB而不丟失分區上的數據非常有用):

sudo dd if=/dev/zero |pv|dd of=/dev/hda bs=446 count=1

=複製/還原卷啟動扇區(VBS):

複製VBS:

sudo dd if=/dev/hda |pv|dd of=/home/sector_arranque_hda count=1 bs=512

要還原VBS:

sudo dd if=/home/sector_arranque_hda |pv|dd of=/dev/hda

D)其他:

=在我們的/ home目錄中刻錄磁盤映像,跳過磁盤錯誤(對即將死去的磁盤非常有用):

sudo dd conv=noerror if=/dev/hda |pv|dd of=~/home/imagen_disco_con_errores.iso

=創建一個空的1 Mb文件:

sudo dd if=/dev/zero |pv|dd of=archivo_nuevo_vacio bs=1024 count=1024

=創建2Gb交換文件:

sudo dd if=/dev/zero |pv|dd of=/swapspace bs=4k count=2048M
mkswap /swapspace
swapon /swapspace

=將所有字母都轉換為大寫:

sudo dd if=miarchivo |pv|dd of=miarchivo conv=ucase

將dd命令與圖形環境程序一起使用: Gdiskdump是此dd命令的圖形環境,可簡化以下任務: 克隆分區或磁盤,輕鬆快捷。 可以從頁面下載 https://launchpad.net/gdiskdump/ 一旦打開了具有root權限sudo gdiskdump的程序,該程序就非常易於使用,因為我們只需要告訴它要克隆的分區或磁盤(輸入格式)及其目的地(輸出格式)即可。


43條評論,留下您的評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   圍攻84 他說:

    濫用dd命令使我幾乎變得糖尿病。
    順便說一句,dd_rescue有什麼區別?

    1.    評估 他說:

      默認情況下,ddrescue不會因讀取錯誤而停止,而是通過各種方式嘗試恢復不可讀的信息。

    2.    舍科 他說:

      哈哈哈哈,我還非常糟糕地使用了dd命令,它比我想像的要強大得多。

  2.   腐爛87 他說:

    我評論說,我相信每個Arch用戶在某個時候都使用過

  3.   阿爾夫 他說:

    @ sieg84,不同之處在於dd被讀取或設備錯誤中斷,在這種情況下不會發生這種情況,因為損壞的塊將讀取一定次數並繼續下一次,它還具有以下優勢:我們可以在同一張圖像上多次運行它,它不會從頭開始,但是會嘗試完成它。

    值得一提的是dd_rescue我從未使用過。

    1.    褐鐵礦梅林 他說:

      如果在Qt中為KDE製作了使用此命令的GUI,是否? 還是我必須辭職?

      1.    七月 他說:

        Gdiskdump不僅是此命令的GUI(基於它),儘管我不知道他們是否在qt中做過(我認為不是),但它幾乎肯定可以在KDE中為您工作

    2.    圍攻84 他說:

      感謝您的澄清。
      我僅使用dd_rescue將ISO複製到USB(主要是因為在openSUSE Wiki中他們擁有它)。
      dd_rescue your.iso / dev / sdX
      我喜歡的是它顯示進度條:
      http://box.jisko.net/i/110db781.png

  4.   克雷爾 他說:

    Alf:
    我最近在Hatteras博客上看到了相同的帖子。 他很可能不會採取這種錯誤的方式,但我不知道,至少出於禮貌,最好提及一下。 因此,他在網絡定位方面也很成功。

    我不想為此創建一個難題,但是乍看之下,本文似乎具有95%的相同性,只不過您已經適應了終端屏幕截圖。 他甚至提到了他的消息來源。

  5.   褐鐵礦梅林 他說:

    有趣的是,我承認| pv | 不認識他。

    克雷爾,我認為來源來自ubuntu Wiki或arch問候。

  6.   阿爾夫 他說:

    @ krel,Linux是這樣的:

    在這個世界的整個過程中,我閱讀並收集了很多東西,我在Ubuntu墨西哥擁有一個筆記本,上面有400多個帖子,這是我一生貢獻最大的社區,不幸的是,如果您回顧很多,事情可以重複發生在網絡上發布,它們幾乎是相同的順序,但事實是大多數都較短。

    我可以在一周內再發布5個帖子,您可以找到其他相似或相同的帖子,原因是什麼? Ubuntu在網絡上擁有最多的論壇/博客。

    我絕對不認為會有兩難選擇,而且如果管理員考慮刪除它,那絕對不會冒犯或打擾我,我遵守規則以及遵循的規則,在我的筆記8中,我沒有按順序排列它們)我希望添加一些東西避免巧合。

    問候

    1.    克雷爾 他說:

      對於任何人來說,網絡上生成的內容最多只有10%是新的,這並不奇怪。 其他90個內容的複制,更新或搶救與之無關,我並不是說這並不重要,相反,它是知識傳播的一種形式。

      但是,我停下來的地方還有其他事情。 當您擁有此類博客時,就會有個人動機去幫助甚至獲得認可。 同時,我確信大多數撰寫關於自由軟件的內容的人都同意共享的想法。 但是,請不要忘記,即使是像BSD這樣的最崇高的許可證也要求承認。

      另外,引用是某些搜索引擎(如google)改善網站定位的一種方式。 我只是說,由於材料是用來表達感激之情的,因此我將其作為參考。

      我認為你的分享很好,但是作為參考你會失去什麼?試想一下,如果另一個部落格的定位比這個部落格更好,那麼這個部落格的內容就會被重複。 desdelinux 如果不參考它,他們最終會埋葬這個部落格。

      哈特拉斯(Hatteras)在10天前出版了這本書,除非他從筆記本中取出它,或者您是路易斯·普恩特(Luis Puente),否則我無法解釋您在說什麼,因為幾乎所有內容都是文本。 不太可能但並非不可能。

      但是,這種事情沒有發生。 而且我不知道,出於個人道德以及與其他同事的合作,我會提及他。 這取決於您,我也不認為哈特拉斯也不會採取這種錯誤的方式,相反。

      1.    MSX 他說:
  7.   前一個 他說:

    嗯……如果= = media./media/hard drive的= file.iso,我就弄錯了……
    從硬盤恢復文件的任何方法?

    1.    拉夫 他說:

      您可以使用Testdisk

    2.    褐鐵礦梅林 他說:

      我的一個朋友發生在我的測試磁盤上,或者是一個專門的實時發行版來搶救數據。 自從我使用新命令以來,我建議下次進行備份,這在我的菜鳥時代是很微妙的,它可以格式化整個硬盤而不希望現在又可以很好地重新啟動……不用說,這兩個grub都沒有啟動。

  8.   勞爾 他說:

    誰能告訴我使用什麼命令來查看dd命令的複制進度,我的意思是看到進度條以及已復制的%。

    SLD

    1.    七月 他說:

      朋友! 添加命令pv。 在同一篇文章中,他幾乎在開始時就說過,並解釋瞭如何使用它。 再讀一次

  9.   佩德羅 他說:

    使用此命令:
    dd if = / dev / sdc | bzip2> /media/Elements/iso.gz
    我設法製作了16Gb磁盤的iso映像並將其保存到400Gb磁盤。
    但是我不知道將映像還原到原始16GB磁盤或另一個相同容量的命令是什麼

  10.   路易斯羅德里格茲 他說:

    一個問題

    使用此命令
    為{1..5}中的n; 做dd if = / dev / urandom | pv | dd = / dev / hda bs = 8b conv = notrunc;
    用於2TB磁盤
    然後我會留在控制台上
    >
    我應該運行另一個命令還是該過程需要多長時間?

    謝謝你,繼續前進

    1.    賈茲布 他說:

      …的末尾有錯字。 在{1..5}中完成了“停留” n個; 做dd如果= / dev / urandom | pv | dd = / dev / hda bs = 8b conv = notrunc; 完成»

  11.   亨利·薩拉查 他說:

    很好的文章.....我要付諸實踐...問候朋友

  12.   馬科斯禮服 他說:

    非常有用,對我很有幫助

  13.   EDFR 他說:

    好阿爾夫謝謝(你的)信息。

    一個問題。 有沒有辦法只複製部分源磁盤? 情況是,如果我有一個僅使用120Gb的25Gb磁盤,並且想複製到40Gb磁盤,那麼我只會對複制已用空間(25Gb)感興趣,是否可以使用此命令?
    感謝在前進。

    1.    友喜 他說:

      最好使用rsync,通過命令rsync -av / path / to / origin / path / to / destiny,您將已經使用其相應的權限備份了所有權限。

    2.    友喜 他說:

      我的意思是:“所有具有相應權限的文件”

  14.   狐狸 他說:

    親愛的,有人知道為什麼在使用dd命令時,它只能達到4.2GB並指示文件很大嗎? 它是一個250GB磁盤的映像,並移至1TB外部磁盤。

    sudo dd if = / dev / sda | pv | dd = / home / fox / backup.iso

    1.    綁架者 他說:

      4Gb錯誤正在提供給您,因為您嘗試在具有fs FAT16的分區中進行備份

  15.   伯爾尼 他說:

    多麼好的博客。 非常有用的輸入。 我已經在其他地方看到了此命令的用法,但是他們根本沒有解釋任何內容。 謝謝。

  16.   卡洛斯·托雷斯(Carlos Torres) 他說:

    您好,我有一台注射機,因為它們替換了BIOS堆棧,所以程序丟失了,我們沒有備份,但是有另一台相同的機器,它只有軟盤,串行和並行端口,我如何對該機器進行備份加載到另一個,我希望你能幫助我,謝謝

  17.   埃內斯托 他說:

    我只想複製一個分區而不從LIVE CD開始。 例如,我有一個帶有/ dev / sda1,/ dev / sda5,/ dev / sda6的磁盤,並且我想從另一個磁盤/ dev / sdb5複製到/ dev / sda1。

    如果= / dev / sda1 = / dev / sda5 bs = 1M,則命令為dd ????

  18.   佩德羅·洛巴托(Pedro Lobato) 他說:

    你好,你好嗎。 我也住在瓜達拉哈拉。
    您關於DD命令的文章非常有趣。 我想測試一些Linux發行版,尤其是Archlinux,但是我無法使用DD命令並將已經下載的Archilinux ISO複製到USB記憶棒上。 我不知道您是否可以在此打勾。 謝謝Pedro lobato

  19.   勝利者 他說:

    因為當用命令“ dd”記錄一個iso時,它僅可在某些PC上啟動嗎?
    經驗我有2台筆記本電腦,但它們都無法啟動任何Linux發行版的iso; 但是相反,它確實可以在具有空閒磁盤的舊台式機上啟動

    1.    SEB 他說:

      最好的辦法是使用unetbootin進行安全操作,關於dd的問題我也被遺忘了,為什麼有時它不起作用。

      1.    拉夫 他說:

        我不認為它取決於DD,而是取決於ISO。 Unetbootin也會發生同樣的情況,它不適用於所有發行版。

  20.   勝利者 他說:

    有時它可以在所有PC上運行,但是您必須將mbr和syslinux添加到該進程的usb中。 但這是漫長而乏味的。
    關於unetboot的簡單部分

    請注意:對我而言,它不是iso或dd,而是您記錄的方式。

  21.   丹尼 他說:

    我懷疑是否使用以下命令:
    sudo dd if = / dev /零= / dev / diskdrive
    取而代之的是,低級格式化是相同的或需要更長的時間:
    sudo dd如果= / dev /零= / dev / diskdrive bs = 1M ..

  22.   精氨酸0 他說:

    可以使用dd命令刪除特定文件嗎?

    例如

    dd if = / dev / urandom == / home / myfile刪除

  23.   精氨酸0 他說:

    bs = 1M時變得更快

  24.   亞歷克斯 他說:

    如果我要將一個磁盤的所有分區(交換,sda ...)和兩個磁盤完全相同地從一個磁盤精確複製到另一個磁盤,但是一個在PC上,另一個在網絡上的NAS上?
    謝謝

  25.   赫拉爾多 他說:

    發表評論,我在狀態末尾使用status = progress,並且我不需要PV,所以debian對我來說很好,可以看到進度。
    第二,有沒有辦法只獲取數據而不是整個單元,因為如果它是2TB磁盤,而我僅使用100 GB,則需要所有空間。 有沒有辦法備份那100GB? 當我將它傳遞到另一種介質時,它可能是一個較小的磁盤,可能是500個磁盤中的一個?

  26.   亞歷山大 他說:

    救命 !!!
    執行命令
    dd如果= = / dev / sdb的cbpp-9.0-amd64-20170621.iso

    一切都很好...但是現在我想使用USB作為存儲單元並...

    USB未安裝,甚至沒有出現在GParted中。

    有誰知道我該怎麼辦。

    PS:這將是從光盤和CD DVD中恢復信息的最佳程序。

    1.    匿名 他說:

      您必須使用fdisk重新分區測試