{"id":150,"date":"2017-04-06T11:01:28","date_gmt":"2017-04-06T14:01:28","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2017\/04\/usando-comando-dd-no-linux\/"},"modified":"2026-09-08T01:15:13","modified_gmt":"2026-09-08T04:15:13","slug":"usando-comando-dd-no-linux","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/es\/2017\/04\/usando-comando-dd-no-linux\/","title":{"rendered":"Usando o comando dd no Linux"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro na oficina, com um HD e um pendrive e blocos de dados fluindo entre eles, ao lado de uma placa de alerta\" src=\"\/wp-content\/uploads\/2026\/09\/comando-dd-v4.webp\" width=\"1052\" height=\"652\" \/><\/p>\n<div style=\"background:#fff8e1;border-left:4px solid #8b1a1a;padding:.8em 1em;margin:1em 0\"><strong>Nota (2026):<\/strong> post de 2017, revisado e completado. O que mudou de mais \u00fatil: <code data-no-translation=\"\">status=progress<\/code> deixou de ser truque e virou o jeito normal de acompanhar a c\u00f3pia, e hoje existem ferramentas melhores que o <code data-no-translation=\"\">dd<\/code> para algumas das tarefas que ele fazia sozinho.<\/div>\n<p>O <strong>dd<\/strong> copia dados bloco a bloco, sem interpretar o que est\u00e1 copiando. \u00c9 isso que o torna capaz de gravar uma ISO num pendrive, clonar um disco inteiro ou salvar o setor de boot \u2014 e \u00e9 exatamente isso que o torna perigoso: ele obedece sem perguntar, e um device errado no <code data-no-translation=\"\">of=<\/code> destr\u00f3i dados sem confirma\u00e7\u00e3o nem lixeira.<\/p>\n<p>Este post mostra o que o comando faz de \u00fatil no dia a dia, com os cuidados que separam a ferramenta do desastre.<\/p>\n<p><!-- more --><\/p>\n<h2>De onde vem o nome<\/h2>\n<p>O <code data-no-translation=\"\">dd<\/code> apareceu na <strong>Vers\u00e3o 5 do Unix<\/strong> e foi criado para converter dados entre ASCII e EBCDIC. A sintaxe estranha \u2014 <code data-no-translation=\"\">if=<\/code>, <code data-no-translation=\"\">of=<\/code>, <code data-no-translation=\"\">bs=<\/code>, em vez das flags com h\u00edfen que todo comando Unix usa \u2014 \u00e9 heran\u00e7a direta da instru\u00e7\u00e3o <em>DD<\/em> (Data Definition) do JCL da IBM. H\u00e1 quem diga que a semelhan\u00e7a foi piada de programador. O comando \u00e9 padronizado pelo IEEE Std 1003.1 \u2014 hoje na Issue 8, a POSIX.1-2024. Mas aten\u00e7\u00e3o: o <code data-no-translation=\"\">dd<\/code> do GNU coreutils, que \u00e9 o do Linux, vai bem al\u00e9m do padr\u00e3o. O POSIX define <code data-no-translation=\"\">if<\/code>, <code data-no-translation=\"\">of<\/code>, <code data-no-translation=\"\">bs<\/code>, <code data-no-translation=\"\">cbs<\/code>, <code data-no-translation=\"\">conv<\/code>, <code data-no-translation=\"\">count<\/code>, <code data-no-translation=\"\">ibs<\/code>, <code data-no-translation=\"\">obs<\/code>, <code data-no-translation=\"\">seek<\/code> e <code data-no-translation=\"\">skip<\/code>, e s\u00f3 admite os sufixos <code data-no-translation=\"\">k<\/code>, <code data-no-translation=\"\">b<\/code> e <code data-no-translation=\"\">x<\/code> no tamanho de bloco. <strong><code data-no-translation=\"\">status=progress<\/code>, <code data-no-translation=\"\">oflag=<\/code>, <code data-no-translation=\"\">iflag=<\/code> e o sufixo <code data-no-translation=\"\">M<\/code> s\u00e3o extens\u00f5es GNU<\/strong> \u2014 o pr\u00f3prio manual do coreutils diz isso com todas as letras. Os exemplos deste post valem no Linux; em outro Unix, confira o manual de l\u00e1. O <code data-no-translation=\"\">status=progress<\/code>, em particular, existe a partir do coreutils 8.24, de 2015.<\/p>\n<p>O que o torna poderoso em Linux \u00e9 uma caracter\u00edstica do sistema, n\u00e3o dele: aqui, disco, parti\u00e7\u00e3o, mem\u00f3ria e geradores como <code data-no-translation=\"\">\/dev\/zero<\/code> e <code data-no-translation=\"\">\/dev\/urandom<\/code> s\u00e3o todos arquivos. O <code data-no-translation=\"\">dd<\/code> s\u00f3 sabe ler de um arquivo e escrever em outro \u2014 o resto \u00e9 consequ\u00eancia.<\/p>\n<h2>Antes de qualquer coisa: descubra o device certo<\/h2>\n<p>Toda trag\u00e9dia com <code data-no-translation=\"\">dd<\/code> come\u00e7a no mesmo lugar: a pessoa achou que o pendrive era <code data-no-translation=\"\">\/dev\/sdb<\/code> e era <code data-no-translation=\"\">\/dev\/sda<\/code>. Confira sempre:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">lsblk -o NAME,SIZE,TYPE,MOUNTPOINTS,MODEL\n<\/code><\/pre>\n<p>Voc\u00ea vai ver algo assim \u2014 repare no tamanho e no modelo, n\u00e3o s\u00f3 na letra:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-text\" data-no-translation=\"\">NAME   SIZE TYPE MOUNTPOINTS MODEL\nsda    931G disk             Samsung SSD 870\n\u251c\u2500sda1   1G part \/boot\/efi\n\u2514\u2500sda2 930G part \/\nsdb     29G disk             SanDisk Cruzer\n\u2514\u2500sdb1  29G part \/media\/nilton\/PENDRIVE\n<\/code><\/pre>\n<p>O de 931 GB \u00e9 o seu sistema. O de 29 GB \u00e9 o pendrive. E note: o alvo do <code data-no-translation=\"\">dd<\/code> \u00e9 o <strong>disco<\/strong> (<code data-no-translation=\"\">\/dev\/sdb<\/code>), n\u00e3o a parti\u00e7\u00e3o (<code data-no-translation=\"\">\/dev\/sdb1<\/code>). Antes de gravar, desmonte \u2014 mas n\u00e3o ejete:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sudo umount \/dev\/sdb1\n<\/code><\/pre>\n<h2>Gravar uma ISO num pendrive<\/h2>\n<p>\u00c9 o uso mais comum, e o \u00fanico comando deste post que voc\u00ea provavelmente vai repetir:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sudo dd if=ubuntu-24.04.2-desktop-amd64.iso of=\/dev\/sdb bs=4M status=progress oflag=sync\n<\/code><\/pre>\n<p>Cada peda\u00e7o importa:<\/p>\n<ul>\n<li><code data-no-translation=\"\">if=<\/code> \u2014 <em>input file<\/em>, a origem. Aqui, a imagem.<\/li>\n<li><code data-no-translation=\"\">of=<\/code> \u2014 <em>output file<\/em>, o destino. <strong>\u00c9 esta que destr\u00f3i dados se estiver errada.<\/strong><\/li>\n<li><code data-no-translation=\"\">bs=4M<\/code> \u2014 tamanho do bloco. O padr\u00e3o \u00e9 512 bytes, o que faz milh\u00f5es de opera\u00e7\u00f5es min\u00fasculas e deixa a grava\u00e7\u00e3o lenta. Com 4 MB a diferen\u00e7a \u00e9 de minutos para segundos.<\/li>\n<li><code data-no-translation=\"\">status=progress<\/code> \u2014 mostra bytes copiados e velocidade em tempo real. Sem isso, o terminal fica mudo e parece travado.<\/li>\n<li><code data-no-translation=\"\">oflag=sync<\/code> \u2014 grava de verdade em vez de acumular em cache, para o comando s\u00f3 terminar quando o dado estiver no pendrive.<\/li>\n<\/ul>\n<p>Ao terminar, force a descarga do cache antes de puxar o dispositivo:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sync\n<\/code><\/pre>\n<p>Um detalhe que economiza tempo: para ISO h\u00edbrida \u2014 que \u00e9 o caso de praticamente toda distribui\u00e7\u00e3o atual \u2014 o <code data-no-translation=\"\">cp<\/code> faz o mesmo trabalho, e \u00e9 bem mais dif\u00edcil de errar:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sudo cp ubuntu-24.04.2-desktop-amd64.iso \/dev\/sdb &amp;&amp; sync\n<\/code><\/pre>\n<h2>Apagar o MBR<\/h2>\n<p>O <strong>MBR<\/strong> (Master Boot Record) \u00e9 o primeiro setor do disco, com 512 bytes divididos assim:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-text\" data-no-translation=\"\">446 bytes  bootstrap (o c\u00f3digo que inicia o boot)\n 64 bytes  tabela de particoes\n  2 bytes  assinatura 0x55AA\n---------\n512 bytes\n<\/code><\/pre>\n<p><strong>Estes comandos destroem dados. Confira o device duas vezes.<\/strong><\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\"># apaga o MBR inteiro, INCLUSIVE a tabela de particoes\nsudo dd if=\/dev\/zero of=\/dev\/sdX bs=512 count=1\n\n# apaga so o bootstrap e PRESERVA a tabela de particoes\nsudo dd if=\/dev\/zero of=\/dev\/sdX bs=446 count=1\n<\/code><\/pre>\n<p>Uma ressalva sobre esses 446 bytes: nem todos s\u00e3o c\u00f3digo. Os quatro \u00faltimos (offsets 440 a 443) guardam a <strong>assinatura de disco de 32 bits<\/strong>, que o Windows registra no BCD e que o Linux usa para montar o <code data-no-translation=\"\">PARTUUID<\/code> de discos MBR. Zer\u00e1-los pode impedir o Windows de iniciar e muda o <code data-no-translation=\"\">PARTUUID<\/code> das parti\u00e7\u00f5es. Se voc\u00ea quer preservar a assinatura, o alvo \u00e9 <code data-no-translation=\"\">bs=440 count=1<\/code>.<\/p>\n<p>A diferen\u00e7a entre 512 e 446 \u00e9 a diferen\u00e7a entre perder as parti\u00e7\u00f5es e apenas remover o gerenciador de boot. Antes de qualquer um dos dois, salve uma c\u00f3pia \u2014 s\u00e3o 512 bytes, n\u00e3o custa nada:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sudo dd if=\/dev\/sdX of=~\/mbr-backup.img bs=512 count=1\n# para restaurar:\nsudo dd if=~\/mbr-backup.img of=\/dev\/sdX bs=512 count=1\n<\/code><\/pre>\n<p>Detalhe que pega quem repete esses comandos num arquivo em vez de num device: o <code data-no-translation=\"\">dd<\/code> <strong>trunca o arquivo de sa\u00edda<\/strong> no tamanho escrito. Em <code data-no-translation=\"\">\/dev\/sdX<\/code> isso n\u00e3o acontece, porque truncar n\u00e3o faz sentido num dispositivo de bloco \u2014 mas <code data-no-translation=\"\">dd if=\/dev\/zero of=imagem.img bs=446 count=1<\/code> deixa a imagem com 446 bytes. Quando o alvo for arquivo, acrescente <code data-no-translation=\"\">conv=notrunc<\/code>.<\/p>\n<p>Vale saber que isso vale para discos com particionamento MBR. M\u00e1quinas com <strong>UEFI e GPT<\/strong>, que s\u00e3o a maioria hoje, guardam o boot na parti\u00e7\u00e3o EFI e t\u00eam uma c\u00f3pia da tabela GPT no fim do disco \u2014 ali o remendo \u00e9 com <code data-no-translation=\"\">gdisk<\/code> o <code data-no-translation=\"\">sgdisk<\/code>, n\u00e3o com <code data-no-translation=\"\">dd<\/code>.<\/p>\n<h2>Outros usos que valem<\/h2>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\"># criar um arquivo de tamanho fixo (ex.: swap de 2 GB)\nsudo dd if=\/dev\/zero of=\/swapfile bs=1M count=2048 status=progress\nsudo chmod 600 \/swapfile &amp;&amp; sudo mkswap \/swapfile &amp;&amp; sudo swapon \/swapfile\n# para sobreviver ao reboot, acrescente ao \/etc\/fstab:\n#   \/swapfile none swap sw 0 0\n\n# medir a velocidade bruta de escrita do disco\ndd if=\/dev\/zero of=teste.img bs=1M count=1024 oflag=direct status=progress\n\n# clonar um disco inteiro para outro do mesmo tamanho ou maior\nsudo dd if=\/dev\/sda of=\/dev\/sdb bs=64M status=progress conv=noerror,sync\n\n# gerar um arquivo com dados aleatorios\ndd if=\/dev\/urandom of=aleatorio.bin bs=1M count=10\n<\/code><\/pre>\n<p>Dois detalhes desses exemplos: o <code data-no-translation=\"\">oflag=direct<\/code> no teste de velocidade contorna o cache do sistema, sen\u00e3o voc\u00ea mede a RAM e n\u00e3o o disco. E o <code data-no-translation=\"\">conv=noerror,sync<\/code> na clonagem manda o <code data-no-translation=\"\">dd<\/code> seguir adiante quando encontra um setor ileg\u00edvel, preenchendo com zeros para n\u00e3o desalinhar o resto \u2014 sem ele, um \u00fanico setor defeituoso aborta a c\u00f3pia.<\/p>\n<h2>Quando n\u00e3o usar o dd<\/h2>\n<p>O <code data-no-translation=\"\">dd<\/code> resolve muita coisa, mas em 2026 h\u00e1 ferramentas melhores para alguns casos:<\/p>\n<ul>\n<li><strong>Disco com setores defeituosos:<\/strong> use <code data-no-translation=\"\">ddrescue<\/code> (pacote <code data-no-translation=\"\">gddrescue<\/code>). Ele tenta v\u00e1rias passadas, mapeia o que conseguiu ler e permite retomar de onde parou \u2014 o <code data-no-translation=\"\">dd<\/code> n\u00e3o faz nada disso.<\/li>\n<li><strong>Acompanhar progresso com barra:<\/strong> <code data-no-translation=\"\">pv<\/code> d\u00e1 barra, percentual e tempo estimado \u2014 <code data-no-translation=\"\">pv arquivo.iso | sudo dd of=\/dev\/sdb bs=4M iflag=fullblock<\/code> \u2014 o <code data-no-translation=\"\">iflag=fullblock<\/code> n\u00e3o \u00e9 opcional aqui: o buffer de um pipe no Linux \u00e9 de 64 KB e, sem ele, o <code data-no-translation=\"\">bs=4M<\/code> n\u00e3o tem efeito nenhum.<\/li>\n<li><strong>Copiar arquivos comuns:<\/strong> <code data-no-translation=\"\">cp<\/code> e <code data-no-translation=\"\">rsync<\/code> s\u00e3o mais r\u00e1pidos, mais seguros e sabem lidar com permiss\u00f5es e links.<\/li>\n<li><strong>Criar arquivo grande sem escrever nada:<\/strong> <code data-no-translation=\"\">fallocate -l 2G arquivo<\/code> \u00e9 instant\u00e2neo, porque s\u00f3 reserva espa\u00e7o.<\/li>\n<\/ul>\n<p class=\"translation-block\">E, sim: <strong>o <code>dd<\/code> cai em prova da LPI<\/strong>. Vale saber de cor o que s\u00e3o <code>if<\/code>, <code>of<\/code>, <code>bs<\/code> e <code>count<\/code>, e a conta dos 512 bytes do MBR.<\/p>\n<h2>Para continuar<\/h2>\n<ul>\n<li><a href=\"\/es\/2017\/04\/usando-comando-wget-no-linux\/\">Usando o comando wget<\/a> \u2014 para baixar a ISO que voc\u00ea vai gravar<\/li>\n<li><a href=\"\/es\/2017\/04\/500-comandos-do-linux\/\">500 comandos do Linux<\/a><\/li>\n<li><a href=\"https:\/\/www.gnu.org\/software\/coreutils\/manual\/html_node\/dd-invocation.html\">Manual do dd no GNU coreutils<\/a> \u00b7 <a href=\"https:\/\/www.lpi.org\/\">Linux Professional Institute<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>O dd copia dados bloco a bloco, sem interpretar o que est\u00e1 copiando. \u00c9 isso que o torna capaz de gravar uma ISO num pendrive, clonar um disco inteiro ou salvar o setor de boot \u2014 e \u00e9 exatamente isso &#8230; <a title=\"Usando o comando dd no Linux\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/es\/2017\/04\/usando-comando-dd-no-linux\/\" aria-label=\"Read more about Usando o comando dd no Linux\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,2],"tags":[410,124,409,4,365,117],"class_list":["post-150","post","type-post","status-publish","format-standard","hentry","category-dicas","category-linux","tag-backup","tag-comandos","tag-dd","tag-linux","tag-lpi","tag-terminal"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/150","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/comments?post=150"}],"version-history":[{"count":8,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/150\/revisions"}],"predecessor-version":[{"id":1019,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/150\/revisions\/1019"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/media?parent=150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/categories?post=150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/tags?post=150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}