{"id":2133,"date":"2017-09-26T21:13:56","date_gmt":"2017-09-26T19:13:56","guid":{"rendered":"http:\/\/www.anadebreuil.org\/blog\/?p=2133"},"modified":"2025-04-05T22:24:14","modified_gmt":"2025-04-05T20:24:14","slug":"ddrescue-o-como-rescatar-en-linux-un-disco-con-errores","status":"publish","type":"post","link":"https:\/\/www.anadebreuil.org\/blog\/?p=2133","title":{"rendered":"<strong>ddrescue<\/strong> o c\u00f3mo rescatar en Linux un disco con errores"},"content":{"rendered":"<p>Nunca esperas que te pasa a ti, pero siempre acaba pasando. O le pasa a alguien cercano que te pide ayuda. En cualquier caso: los discos duros pueden acabar da\u00f1\u00e1ndose. Y mientras se pueda arreglar con la herramienta est\u00e1ndar del sistema operativo no pasa nada. Pero si se da\u00f1a un sector que afecta al sistema de ficheros, est\u00e1s en una gran apuro: te toca reconstruir el sistema de ficheros.<\/p>\n<p>Sin embargo, tratar de reconstruir un disco con errores de E\/S puede acabar da\u00f1ando m\u00e1s el sistema de ficheros. As\u00ed que es m\u00e1s que recomendable trabajar sobre una copia del disco. Pero \u00bfc\u00f3mo un disco da\u00f1ado? Ah\u00ed es donde entra <strong>ddrescue<\/strong> al rescate.<\/p>\n<p><!--more--><\/p>\n<h4>Caracter\u00edsticas<\/h4>\n<p><strong>ddrescue<\/strong> es una herramienta \u00abforense\u00bb que permite copiar a bajo nivel un dispositivo de bloques (disco duro, USB, CD, DVD, etc.) en otro dispositivo o en un fichero imagen (es decir, un fichero que es id\u00e9ntico byte a byte al contenido del disco). Adem\u00e1s el comando es tolerante a fallos, de forma que aunque alg\u00fan sector defectuoso no se pueda salvar, el resto de sectores ya estar\u00e1n a resguardo en nuestra imagen.<\/p>\n<p>Dicha imagen puede obtenerse en una o diferentes pasadas, puesto que el comando guarda el estado de copiado de los sectores, por lo que se puede detener (porque queremos apagar el equipo, porque vamos a hacer una pasada con otras opciones, etc.). La idea general es hacer una primera pasada sin tratar de recuperar fallos, seguida de una o m\u00e1s dedicadas de forma espec\u00edfica a tratar de recuperar los sectores defectuosos.<\/p>\n<p>Otro uso interesante es tratar de recuperar un imagen correcta de un sistema de ficheros espejado (mediante RAID 1 por ejemplo) en distintos discos. Es muy poco probable que todos los discos del espejo tengan fallos en los mismos sectores, as\u00ed que haciendo recuperaciones de todos los discos frente a la misma imagen nos permitir\u00e1n tener una sistema de ficheros libre de errores debidos a fallos de E\/S en los sectores de los discos.<\/p>\n<p>La instalaci\u00f3n de <strong>ddrescue<\/strong> en Fedora (es similar en otras distribuciones de Linux) es sencilla:<\/p>\n<pre>dnf install ddrescue<\/pre>\n<p>No tiene dependencias y \u00fanicamente ocupa 95k.<\/p>\n<h4>Caso de uso: recuperando un disco USB con formato NTFS (Windows)<\/h4>\n<p>En este caso ha ca\u00eddo en mis manos un disco externo USB con formato NTFS que se ha ido degradando de forma silenciosa hasta que el disco se ha vuelto inutilizable: ni Windows ni Linux pueden acceder al sistema de ficheros. Por tanto, los pasos a seguir ser\u00e1n obtener una copia del disco en un medio con espacio libre suficiente y libre de errores de E\/S, para luego tratar de recuperar la partici\u00f3n desde la copia.<\/p>\n<ol>\n<li>Repasa antes el espacio libre que te queda en el disco duro donde vas a copiar el fichero imagen. Debe haber m\u00e1s espacio libre que el espacio total del disco da\u00f1ado. Ten en cuenta que el tama\u00f1o del fichero resultante ser\u00e1 el mismo que todo el espacio del disco que est\u00e1s reparando. Si no tienes espacio, deber\u00e1s o bien liberar espacio o hacerte con un disco externo y trabajar contra \u00e9l.<\/li>\n<li>Copiar el disco. Pasada 1: Crear una imagen con los sectores que no den problemas.<br \/>\nSe realiza con estos comandos (a ejecutar como superusuario):<\/p>\n<pre>cd \/ruta\/destino\r\nddrescue --no-scrape \/dev\/sdb disco_usb.img disco_usb.log<\/pre>\n<p>En este comando<\/p>\n<ul>\n<li><em>\/ruta\/destino<\/em><br \/>\nes el directorio donde quieres que quede el fichero destino,<\/li>\n<li><em>&#8211;no-scrape<\/em><br \/>\nindica al programa que no se detenga en los sectores problem\u00e1ticos, simplemente los saltar\u00e1 ignorando el error de lectura,<\/li>\n<li><em>\/dev\/sdb<\/em><br \/>\nes la ruta que, en mi caso, identifica al disco y partici\u00f3n donde est\u00e1 localizado el disco USB da\u00f1ado,<\/li>\n<li><em>disco_usb.img<\/em><br \/>\nes el archivo donde queremos dejar la imagen (insisto: aseg\u00farate que est\u00e1 en un disco con espacio suficiente) y<\/li>\n<li><em>disco_usb.log<\/em><br \/>\nes el fichero donde guardar\u00e1 el progreso de la instalaci\u00f3n.<\/li>\n<\/ul>\n<p>Copiar el disco duro es una tarea larga y tediosa, siendo m\u00e1s larga cuanto m\u00e1s sectores defectuosos tenga el disco. Hazte a la idea de que esta fase puede durar un d\u00eda e incluso m\u00e1s.<br \/>\nCuando encuentra errores, la velocidad de lectura baja siendo del orden de 10 veces menor (se tardar\u00eda 10 veces m\u00e1s que en un disco sin errores). Si ves que ha dejado de encontrar errores pero est\u00e1 yendo muy lento, puedes pararlo con Ctrl-C y volver a ejecutar el comando <em>ddrescue<\/em>. Continuar\u00e1 donde lo dej\u00f3 antes, volviendo a utilizar una velocidad de lectura normal.<br \/>\nLa salida del comando muestra algo parecido a:<\/p>\n<pre>GNU ddrescue 1.22\r\nPress Ctrl-C to interrupt\r\nInitial status (read from logfile)\r\nrescued:   161929 MB,  errsize:  25054 kB,  errors:      23\r\nCurrent status\r\nrescued:   320053 MB,  errsize:  16791 kB,  current rate:       0 B\/s\r\n   ipos:   160039 MB,   errors:      28,    average rate:   29840 kB\/s\r\n   opos:   160039 MB,    time since last successful read:      10 s\r\nFinished<\/pre>\n<p>&nbsp;<\/li>\n<li>Copiar el disco. Pasada 2: Tratar de leer los datos descartados en la pasada 1, dedic\u00e1ndole m\u00e1s tiempo y paciencia a los sectores defectuosos.<br \/>\nSe trata de usar este comando:<\/p>\n<pre>ddrescue --direct --max-retries=3 \/dev\/sdb disco_usb.img disco_usb.log<\/pre>\n<p>Si no funciona puedes intentar este otro (yo no lo necesit\u00e9):<\/p>\n<pre>ddrescue --direct --retrim --max-retries=3 \/dev\/sdb disco_usb.img disco_usb.log<\/pre>\n<p>La lectura pasa a ser muy lenta, del orden de bytes por segundo, pero puede recuperar muchos de los datos perdidos.<br \/>\nRepite este comando todas las veces que creas adecuadas o bien incrementa el n\u00famero de pasadas subiendo el valor de <em>&#8211;max-retries<\/em>. Deber\u00edas parar cuando veas que hacer m\u00e1s pasadas no recupera sectores. Por el contrario, mientras se sigan recuperando sectores, aunque sea lentamente, deber\u00edas seguir haciendo pasadas.<\/li>\n<li>Expulsa el disco da\u00f1ado. Una vez que has decidido no tratar de seguir recuperando sectores, expulsa el disco duro da\u00f1ado y d\u00e9jale como est\u00e1 hasta que hayas recuperado los datos.<\/li>\n<li>Hacer creer al sistema operativo que el fichero obtenido es un disco duro. De esta manera haremos podremos usar las herramientas de recuperaci\u00f3n de datos del sistema operativo.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h4>Referencias<\/h4>\n<ul>\n<li><a href=\"http:\/\/www.forensicswiki.org\/wiki\/Ddrescue\" target=\"_blank\" rel=\"noopener\">Ddrescue &#8211; Forensics Wiki<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nunca esperas que te pasa a ti, pero siempre acaba pasando. O le pasa a alguien cercano que te pide ayuda. En cualquier caso: los discos duros pueden acabar da\u00f1\u00e1ndose. Y mientras se&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-2133","post","type-post","status-publish","format-standard","hentry","category-tecnicas"],"_links":{"self":[{"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2133"}],"version-history":[{"count":25,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2133\/revisions"}],"predecessor-version":[{"id":2927,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2133\/revisions\/2927"}],"wp:attachment":[{"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}