{"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 el comando dd en 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 y completado. Lo que cambi\u00f3 de m\u00e1s \u00fatil: <code data-no-translation=\"\">status=progress<\/code> dej\u00f3 de ser un truco y se convirti\u00f3 en la forma normal de seguir la copia, y hoy existen herramientas mejores que el <code data-no-translation=\"\">dd<\/code> para algunas de las tareas que \u00e9l hac\u00eda solo.<\/div>\n<p>O <strong>dd<\/strong> copia datos bloque a bloque, sin interpretar lo que est\u00e1 copiando. Es eso lo que lo hace capaz de grabar una ISO en un pendrive, clonar un disco entero o guardar el sector de boot \u2014 y es exactamente eso lo que lo hace peligroso: obedece sin preguntar, y un device equivocado en el <code data-no-translation=\"\">of=<\/code> destruye datos sin confirmaci\u00f3n ni papelera.<\/p>\n<p>Este post muestra lo que el comando hace de \u00fatil en el d\u00eda a d\u00eda, con los cuidados que separan la herramienta del desastre.<\/p>\n<p><!-- more --><\/p>\n<h2>De d\u00f3nde viene el nombre<\/h2>\n<p>O <code data-no-translation=\"\">dd<\/code> apareci\u00f3 en la <strong>Versi\u00f3n 5 de Unix<\/strong> y se cre\u00f3 para convertir datos entre ASCII y EBCDIC. La sintaxis tan rara \u2014 <code data-no-translation=\"\">if=<\/code>, <code data-no-translation=\"\">of=<\/code>, <code data-no-translation=\"\">bs=<\/code>, en lugar de las flags con guion que usa cualquier comando Unix \u2014 es herencia directa de la instrucci\u00f3n <em>DD<\/em> (Data Definition) del JCL de IBM. Hay quien dice que el parecido fue una broma de programador. El comando est\u00e1 estandarizado por IEEE Std 1003.1 \u2014 hoy en la Issue 8, POSIX.1-2024. Pero ojo: el <code data-no-translation=\"\">dd<\/code> de GNU coreutils, que es el de Linux, va mucho m\u00e1s all\u00e1 del est\u00e1ndar. 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>, y solo admite los sufijos <code data-no-translation=\"\">k<\/code>, <code data-no-translation=\"\">b<\/code> e <code data-no-translation=\"\">x<\/code> en el tama\u00f1o de bloque. <strong><code data-no-translation=\"\">status=progress<\/code>, <code data-no-translation=\"\">oflag=<\/code>, <code data-no-translation=\"\">iflag=<\/code> y el sufijo <code data-no-translation=\"\">M<\/code> son extensiones GNU<\/strong> \u2014 el propio manual de coreutils lo dice con todas las letras. Los ejemplos de este post valen en Linux; en otro Unix, consulta el manual de all\u00ed. El <code data-no-translation=\"\">status=progress<\/code>, en concreto, existe a partir de coreutils 8.24, de 2015.<\/p>\n<p>Lo que lo hace potente en Linux es una caracter\u00edstica del sistema, no de \u00e9l: aqu\u00ed, disco, partici\u00f3n, memoria y generadores como <code data-no-translation=\"\">\/dev\/zero<\/code> e <code data-no-translation=\"\">\/dev\/urandom<\/code> son todos archivos. El <code data-no-translation=\"\">dd<\/code> solo sabe leer de un archivo y escribir en otro \u2014 el resto es consecuencia.<\/p>\n<h2>Antes de nada: descubre el device correcto<\/h2>\n<p>Toda tragedia con <code data-no-translation=\"\">dd<\/code> empieza en el mismo sitio: la persona pens\u00f3 que el pendrive era <code data-no-translation=\"\">\/dev\/sdb<\/code> y era <code data-no-translation=\"\">\/dev\/sda<\/code>. Compru\u00e9balo siempre:<\/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>Ver\u00e1s algo as\u00ed \u2014 f\u00edjate en el tama\u00f1o y en el modelo, no solo en la 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>El de 931 GB es tu sistema. El de 29 GB es el pendrive. Y nota: el objetivo del <code data-no-translation=\"\">dd<\/code> es el <strong>disco<\/strong> (<code data-no-translation=\"\">\/dev\/sdb<\/code>), no la partici\u00f3n (<code data-no-translation=\"\">\/dev\/sdb1<\/code>). Antes de grabar, desmonta \u2014 pero no expulses:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sudo umount \/dev\/sdb1\n<\/code><\/pre>\n<h2>Grabar una ISO en un pendrive<\/h2>\n<p>Es el uso m\u00e1s com\u00fan, y el \u00fanico comando de este post que probablemente repetir\u00e1s:<\/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 parte importa:<\/p>\n<ul>\n<li><code data-no-translation=\"\">if=<\/code> \u2014 <em>input file<\/em>, el origen. Aqu\u00ed, la imagen.<\/li>\n<li><code data-no-translation=\"\">of=<\/code> \u2014 <em>output file<\/em>, el destino. <strong>Es esta la que destruye datos si es incorrecta.<\/strong><\/li>\n<li><code data-no-translation=\"\">bs=4M<\/code> \u2014 tama\u00f1o de bloque. El predeterminado es 512 bytes, lo que hace millones de operaciones diminutas y deja la grabaci\u00f3n lenta. Con 4 MB la diferencia es de minutos a segundos.<\/li>\n<li><code data-no-translation=\"\">status=progress<\/code> \u2014 muestra los bytes copiados y la velocidad en tiempo real. Sin esto, el terminal se queda mudo y parece colgado.<\/li>\n<li><code data-no-translation=\"\">oflag=sync<\/code> \u2014 escribe de verdad en lugar de acumular en cach\u00e9, para que el comando solo termine cuando el dato est\u00e9 en el pendrive.<\/li>\n<\/ul>\n<p>Al terminar, fuerce el vaciado de la cach\u00e9 antes de extraer el dispositivo:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sync\n<\/code><\/pre>\n<p>Un detalle que ahorra tiempo: para una ISO h\u00edbrida \u2014 que es el caso de pr\u00e1cticamente toda distribuci\u00f3n actual \u2014 el <code data-no-translation=\"\">cp<\/code> hace el mismo trabajo, y es mucho m\u00e1s dif\u00edcil equivocarse:<\/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>Borrar el MBR<\/h2>\n<p>O <strong>MBR<\/strong> (Master Boot Record) es el primer sector del disco, con 512 bytes divididos as\u00ed:<\/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>Estos comandos destruyen datos. Verifique el device dos veces.<\/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>Una advertencia sobre esos 446 bytes: no todos son c\u00f3digo. Los cuatro \u00faltimos (offsets 440 a 443) guardan la <strong>firma de disco de 32 bits<\/strong>, que Windows registra en el BCD y que Linux usa para montar el <code data-no-translation=\"\">PARTUUID<\/code> de discos MBR. Ponerlos a cero puede impedir que Windows se inicie y cambia el <code data-no-translation=\"\">PARTUUID<\/code> de las particiones. Si quieres conservar la firma, el objetivo es <code data-no-translation=\"\">bs=440 count=1<\/code>.<\/p>\n<p>La diferencia entre 512 y 446 es la diferencia entre perder las particiones y simplemente eliminar el gestor de arranque. Antes de cualquiera de los dos, guarda una copia: son 512 bytes, no cuesta 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>Detalle que pilla a quien repite esos comandos en un archivo en lugar de en un dispositivo: el <code data-no-translation=\"\">dd<\/code> <strong>trunca el archivo de salida<\/strong> al tama\u00f1o escrito. En <code data-no-translation=\"\">\/dev\/sdX<\/code> eso no ocurre, porque truncar no tiene sentido en un dispositivo de bloque, pero <code data-no-translation=\"\">dd if=\/dev\/zero of=imagem.img bs=446 count=1<\/code> deja la imagen con 446 bytes. Cuando el destino sea un archivo, a\u00f1ade <code data-no-translation=\"\">conv=notrunc<\/code>.<\/p>\n<p>Cabe saber que esto vale para discos con particionado MBR. Equipos con <strong>UEFI y GPT<\/strong>, que son la mayor\u00eda hoy, guardan el boot en la partici\u00f3n EFI y tienen una copia de la tabla GPT al final del disco: ah\u00ed el remiendo es con <code data-no-translation=\"\">gdisk<\/code> o <code data-no-translation=\"\">sgdisk<\/code>, no con <code data-no-translation=\"\">dd<\/code>.<\/p>\n<h2>Otros usos que merecen la pena<\/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>Dos detalles de esos ejemplos: el <code data-no-translation=\"\">oflag=direct<\/code> en la prueba de velocidad evita la cach\u00e9 del sistema, si no se mide la RAM y no el disco. Y el <code data-no-translation=\"\">conv=noerror,sync<\/code> en el clonado env\u00eda el <code data-no-translation=\"\">dd<\/code> seguir adelante cuando encuentra un sector ilegible, rellenando con ceros para no desalinear el resto \u2014 sin \u00e9l, un \u00fanico sector defectuoso aborta la copia.<\/p>\n<h2>Cu\u00e1ndo no usar dd<\/h2>\n<p>O <code data-no-translation=\"\">dd<\/code> resuelve mucho, pero en 2026 hay herramientas mejores para algunos casos:<\/p>\n<ul>\n<li><strong>Disco con sectores defectuosos:<\/strong> use <code data-no-translation=\"\">ddrescue<\/code> (paquete <code data-no-translation=\"\">gddrescue<\/code>). Intenta varias pasadas, mapea lo que consigui\u00f3 leer y permite reanudar desde donde se detuvo \u2014 el <code data-no-translation=\"\">dd<\/code> no hace nada de esto.<\/li>\n<li><strong>Seguir el progreso con barra:<\/strong> <code data-no-translation=\"\">pv<\/code> da barra, porcentaje y tiempo estimado \u2014 <code data-no-translation=\"\">pv arquivo.iso | sudo dd of=\/dev\/sdb bs=4M iflag=fullblock<\/code> \u2014 el <code data-no-translation=\"\">iflag=fullblock<\/code> no es opcional aqu\u00ed: el b\u00fafer de un pipe en Linux es de 64 KB y, sin \u00e9l, el <code data-no-translation=\"\">bs=4M<\/code> no tiene efecto alguno.<\/li>\n<li><strong>Copiar archivos comunes:<\/strong> <code data-no-translation=\"\">cp<\/code> e <code data-no-translation=\"\">rsync<\/code> son m\u00e1s r\u00e1pidos, m\u00e1s seguros y saben manejar permisos y enlaces.<\/li>\n<li><strong>Crear un archivo grande sin escribir nada:<\/strong> <code data-no-translation=\"\">fallocate -l 2G arquivo<\/code> es instant\u00e1neo, porque solo reserva espacio.<\/li>\n<\/ul>\n<p class=\"translation-block\">Y, s\u00ed: <strong>o <code>dd<\/code> aparece en el examen de LPI<\/strong>. Vale la pena saberse de memoria qu\u00e9 son <code>if<\/code>, <code>of<\/code>, <code>bs<\/code> y <code>count<\/code>, y la cuenta de los 512 bytes del MBR.<\/p>\n<h2>Para continuar<\/h2>\n<ul>\n<li><a href=\"\/es\/2017\/04\/usando-comando-wget-no-linux\/\">Usando el comando wget<\/a> \u2014 para descargar la ISO que vas a grabar<\/li>\n<li><a href=\"\/es\/2017\/04\/500-comandos-do-linux\/\">500 comandos de Linux<\/a><\/li>\n<li><a href=\"https:\/\/www.gnu.org\/software\/coreutils\/manual\/html_node\/dd-invocation.html\">Manual de dd en 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 el comando dd en Linux\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/es\/2017\/04\/usando-comando-dd-no-linux\/\" aria-label=\"Leer m\u00e1s sobre Usando o comando dd no Linux\">Leer m\u00e1s<\/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}]}}