Reparando un disco duro (FAIL)

MuerteHoy a caído un disco duro aparentemente dañado en mis manos, para intentar recuperarlo, o por lo menos, realizar una copia de seguridad de los datos. Por norma general, siempre recupero los datos entrando desde un LiveCD linux y después propongo un formateo, si veo que la cosa no se recupera rápido. Esta vez ha sido diferente.

Concrétamente, se trataba de un disco SATA con Windows XP instalado, que devolvía el siguiente error durante el proceso de booteo de la máquina:

«Windows could not start because the following file is missing or corrupt: \WINDOWS\SYSTEM32\CONFIG\SYSTEM»

Para intentar recuperarlo, se ha seguido el siguiente proceso:

  1. Se ha iniciado el sistema con el CD de Windows, lo cual ha lanzado el asistente de instalación de Windows XP.
  2. En la primera pantalla del asistente de instalación de Windows XP, se ha mostrado la opción de iniciar una nueva instalación (INTRO), inciar la consola de recuperación (R) o salir (F3). Se ha pulsado ‘R’ para iniciar la consola de recuperación.
  3. Una vez en la consola de recuperación, se ha lanzado chkdsk (chkdsk c: /R) para intentar reparar los errores de la unidad C: que puedan estar ocasionando estos problemas. Esto no siempre funciona, y a veces concluye con un mensaje que indica que existen errores irreparables.
  4. Si como a mi, te ha aparecido este error, el siguiente paso, según este tutorial, ha sido intentar entrar en «C:\System Volume Information». Desafortunadamente el disco duro ha concluido que no existe tal directorio. Sin embargo, es cierto que también ha indicado que ha habido un «error durante la enumeración de directorios» al hacer un simple «dir» en C:\.
  5. Otra opción, ha sido acceder a «C:\Windows\Repair», pero de nuevo, el disco duro ha informado que no existía el directorio «Windows», en C:\.

Llegados a este momento, ha tocado cambiar de estrategia.

  1. Esta vez se ha iniciado el PC con un LiveCD Linux, como por ejemplo la última distribución de Ubuntu.
  2. Una vez nos ha aparecido el asistente de instalación, se ha seleccionado la opción «Try Ubuntu», la cual ha lanzado Ubuntu directamente del LiveCD sin hacer ningún cambio en el disco duro.
  3. Cuando se ha cargado Ubuntu, desde el menú superior se ha seleccionado Places -> XX GB Filesystem (donde XX corresponde con la capacidad en GB del disco duro), lo cual nos ha montado (en realidad «ha intentado montar») el disco duro. En nuestro caso, ésto ha devuelto un error tal que «Unable to mount XX GB Filesystem» donde se detallaba que «Error mounting: mount exited with error code 13: ntfs_attr_pread_i: ntfs_pread failed: Input/Output error. NTFS is either inconsistent or there is a hardware fault, or it’s a SoftRAID/FakeRAID hardware.» Además, este error ha recomendado ejecutar «chkdsk /f» en Windows.
  4. Para identificar el dispositivo con Windows, además de buscar en el fstab (donde no estaba incluído), se ha ejecutado «sudo blkid«, el cual ha devuelto el siguiente listado:
    • /dev/loop0: TYPE=»squashfs»
    • /dev/sda1: label=»DellUtility» TYPE=»vfat»
    • /dev/sda2: UUID=»…» TYPE=»ntfs»
    • /dev/sda3: label=»DellRestore» TYPE=»vfat»
  5. Del resultado anterior, se ha visto que se tiene una partición «DellRestore», la cual devuelve el disco duro a los valores de fábrica, símplemente pulsando F8 en la pantalla en la que aparece el logo de DELL en el booteo. Desafortunadamente esta opción elimina todos los datos del disco duro, y antes se ha querido hacer un backup de los mismos.
  6. Una vez se ha identificado a /dev/sda2 como dispositivo del disco duro con ntfs, se ha intentado montar forzándolo con «mount -t ntfs /dev/sda2 /mnt -o force«, lo cual ha devuelto exactamente el mismo error de montado que ha devuelto en el punto 3 de este apartado Linux. Exactamente igual indicando como tipo de archivos ntfs-3g (más que nada porqué mount.ntfs es un enlace simbólico a mount.ntfs-3g).
  7. Finalmente se ha lanzado «sudo ntfsfix /dev/sda2» para intentar corregir los errores del disco. El resultado no ha sido muy alentador, ya que no se ha conseguido montar el volumen después de su ejecución:
  8. Mounting volume… pread: Input/Output error
    Failed to calculate number of free clusters: Input/Output error
    FAILED
    Attempting to correct errors…
    Processing $MFT and $MFTMirr…
    Reading $MFT… OK
    Reading $MFTMirr… OK
    Comparing $MFTMirr to $MFT… OK
    Processing of $MFT and $MFTMirr completed successfully.
    Setting required flags on partition… OK
    Going to empty the journal ($LogFile)… Failed to empty $FILE_LogFile/$DATA Input/Output error
    FAILED
    Failed to reset $LogFile: Input/Output error

  9. Después de todo esto, he llegado a la página de ntfs-3g, donde se explica con más claridad este tipo de errores de entrada salida.

Vuelta a Windows

  1. Después de realizar varias pruebas con Linux, sin éxito, se ha vuelto a lanzar CHKDSK intentando usar el parámetro /F. Sin embargo, en la consola de recuperación de Windows XP únicamente están disponibles las opciones /R y /P. Por esta razón se ha lanzado el CHKDSK /R, obteniendo de nuevo el mensaje «el volumen parece contener uno o más problemas irrecuperables».
  2. Para utilizar CHKDSK /F, se ha montado el disco duro como disco secundario en un PC, también con Windows XP, y se ha iniciado el PC desde el disco duro original, teniéndo el disco duro dañado como secundario. Para ello, se ha tenido que tocar la BIOS con el fin de detectar el nuevo disco duro.
  3. Una vez iniciado Windows XP, y comprobada la detección del disco duro dañado (en MiPC aparecen dos unidades de disco, la original y la dañada), se ha ejecutado CHKDSK /V /F E: (en este caso, E: es el disco duro dañado). Sin embargo, esto tampoco ha solucionado los problemas iniciales.

Resultado: FAIL

Llegados a este punto, le he devuelto el disco duro al propietario. Se acababan las ideas y el tiempo disponible para dedicárselo al disco dañado.

Sin embargo se me han quedado un par de cosas en el tintero:

  1. Instalar Windows Vista (realizar una actualización) para intentar recuperar los datos desde el nuevo SO. La idea era realizar una actualización del SO, el cual preserva los datos. Sin embargo, no estoy 100% seguro de si esto se puede hacer desde el proceso de instalación que inicia el booteo del PC desde el CD de instalación.
  2. Probar alguna herramienta especializada teniendo el disco dañado como segundo disco, habiendo iniciado el sistema desde un disco primario con XP.

Seguro que hay muchas otras pruebas, y seguro que más de una solución (quizá incluso exista alguna solución para recuperar el disco duro sin perder los datos).

Por cierto, si has llegado aquí esperando encontrar una solución para el mismo problema… lo siento. 😀

Seguramente alguna de la pruebas que a mi no me han funcionado, funcionarán en tu caso. Ánimo.

PD: El disco, en teoría, va a ir a parar a manos de un auténtico experto en informática forense. Si me llegan noticias de su solución, intentaré actualizar este post.

Actualización: Me confirman (alguien que realmente sabe) que el disco tiene un problema de hardware y que no se puede recuperar. Lo que sí se podrá hacer, es recuperar la mayoría de los datos del mismo con herramientas especializadas, pero no se conseguirá que el disco vuelva funcionar. Al parecer, no iba tan desencaminado.

Flickr! Foto por Max Braun

Optimiza el rendimiento de tu web

A raíz de EventoSEO, he mirado de optimizar el rendimiento de alguna de mis webs. Agarráos que esta entrada será larga, porqué voy a explicar algunos pasos que he dado para optimizar mi sitio web:

  1. Instala (si no lo tienes ya) Firebug y Google PageSpeed para Firefox.
  2. Desde Firefox -> Herramientas -> Firebug, abre Firebug y sitúate sobre la pestaña «Page Speed».
  3. Abre una nueva pestaña y entra en la web que quieres analizar. Espera hasta que esté cargada completamente (verás el «Terminado» abajo a la izquierda en el navegador).
  4. Si no estás viendo la sección del Firebug, podrás verla pulsando sobre el icono de Firebug en la barra de tareas inferior de Firefox.
  5. Pulsa sobre la opción Analizar para obtener las recomendaciones a seguir para optimizar tu web, como por ejemplo, optimizar la compresión de las imágenes (Google Page Speed ya te ofrece las imagenes problemáticas listas para descargar en su versión optimizada), comprimir la web con Gzip o minimizar el código CSS o HTML inútil.
  6. Siguiendo las recomendaciones obtenidas, se puede llegar a optimizar el rendimiento de nuestra web consiguiendo así una mejor indexación en el índice de Google, además de una mejor experiencia para el usuario.

Además de la optimización de las imágenes, dejo aquí algunas alertas que he recibido, junto a su solución:

Minimize CSS

Esto es tan fácil como descargar el archivo css que propone Google, el cual elimina espacios y saltos de línea innecesarios, y reemplazárlo por el original.

Minimize HTML

Igual que en el caso anterior, bastará con descargar el archivo propuesto por Google, el cual elimina espacios y saltos de línea innecesarios. Pero atención, si eres de los que programa con tabulaciones, para dejar un código límpio y fácil de leer, esto te lo va a destrozar. Guárdate una copia en local.

Minimize Redirects

Con mensajes de error como los siguientes:

Remove the following redirect chain if possible:

Este problema venía dado por que a estas imágenes se les hacía referencia desde el código como 02.jpg, mientras que su nombre era 02.JPG. Símplemente cambiando la extensión .JPG por .jpg se ha solucionado.

Opciones de servidor

Finalmente, tambien he obtenido alertas bastante más difíciles de solucionar. Concretamente, alertas correspondientes a opciones a cambiar o a habilitar en mi servidor web, que resulta ser un hosting compartido sobre el que no tengo acceso directo.

A pesar de eso, he conseguido obtener detalles sobre mi servidor web subiendo un fichero llamado info.php con una única línea de código:

<? phpinfo() ?>

Consultando esta web desde el navegador (http://www.misitio.com/info.php) se obtienen los detalles del hosting. Con esto y con la creación (o modificación) de un fichero .htaccess en la raíz de mi sitio web (con los detalles correspondientes) se puede llegar a solucionar algunos problemas, como los siguientes:

Leverage Browser Caching

Bastará con añadir líneas que controlen la caché para algunos elementos de nuestra web, en nuestro archivo .htaccess

Para ello, podremos usar el siguiente código

####### LeverageBrowserCaching #####
# 1 WEEK
<FilesMatch «\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$»>
Header set Cache-Control «max-age=604800, public»
</FilesMatch>

# 2 DAYS
<FilesMatch «\.(xml|txt)$»>
Header set Cache-Control «max-age=172800, public, must-revalidate»
</FilesMatch>

# 2 HOURS
<FilesMatch «\.(html|htm)$»>
Header set Cache-Control «max-age=7200, must-revalidate»
</FilesMatch>

#######################

La fuente de información es esta.

Enable Compression

Podremos habilitar la compresión tanto para las hojas de estilo como para los archivos html. Sin embargo, esta opción necesita que el servidor tenga instalado el módulo para comprimir, como el mod_gzip.

En mi caso he tenido que pedirle a mi hosting su instalación. Aún estoy esperando respuesta, y de momento, continúo con esta advertencia en el Page Speed Score.

Serve static content from a cookieless domain

Aquí, PageSpeed me pide «Serve the following static resources from a domain that doesn’t set cookies:» indicándo algunas imágenes, así como la hoja de estilos.

Para ello, en un segundo dominio diferente al dominio original, he creado varios sub-dominios (esto en realidad no haría falta, pero por temas de optimización, he creado un sub-dominio cada 3 imágenes, para poderlas cargar en paralelo. Si no sabes de qué hablo mírate este post).

Por cierto, no sé por qué extraña razón, mi hosting tarda unas 3 horas en crear un sub-dominio.

En resumen, si PageSpeed nos comenta usar un dominio libre de cookies, es porqué detecta que el actual no lo es. Según leo aquí, para usar un dominio libre de cookies, deberás usar un dominio que siempre haya estado libre de cookies (nunca haya requerido ningún tipo de inicio de sesión, ni logueos, ni Google Analytics activado para este dominio).

Una vez hecho esto, he redireccionado todos los sub-dominios a un directorio en mi servidor, donde tengo todas las imágenes.

Posteriormente, en el código fuente, he llamado a las imágenes, pero en lugar de usar «imagenes/1.JPG» he usado «http://1.sub-dominio.segundodominio.com/1.JPG», para llamarlas usando los nuevos sub-dominios.

Otros detalles

Aún me quedan algunos detalles que pulir, como por ejemplo que cada página use su propio archivo de hojas de estilo, con los estilos que use esa página. El problema de usar una única hoja de estilos global, es que la mayoría de páginas no usarán ni la mitad de los estilos definidos en el css común.

Entiendo, que lo ideal sería crear una hoja de estilos con los estilos comunes en todas las páginas, y a partir de ahí, una hoja de estilos personalizada para cada página.

También me queda pendiente habilitar la compresión en el servidor (me temo que tendré que pelearme con mi hosting), y finalmente también pulir el CSS, que todo y que es totalmente válido (validado con el validador de w3cschools) se me queja de que no es todo lo eficiente que debería ser.

De todas maneras, ya estoy en 93 – 95 sobre 100, en cuanto a puntuación de Google Page Speed, y la verdad, se nota.

Cupones de descuento

Una funcionalidad interesante en Magento, es la posibilidad de usar «cupones de descuento» o «códigos promocionales» para ofrecer descuentos a ciertos clientes.

De esta forma, un cliente puede entrar en tu tienda, e introducir un código promocional para beneficiarse de un descuento préviamente definido.

Esto se puede hacer, desde el panel de administración de Magento, desde Promociones -> Reglas de precios del carrito de compras -> Añadir nueva regla. Desde aquí, se podrán definir cosas tan interesantes como:

  • Si el descuento se dará únicamente al introducir un código de cupón, o se dará siempre. En caso de requerir cupón, se podrá introducir un código de cupón manual, que posteriormente deberán introducir los clientes para obtener el descuento.
  • El número de usos que se podrá hacer del cupón (para controlar el número máximo de compras que se podrán hacer con este mismo cupón).
  • Fecha de inicio y fecha de fin de validez del cupón.
  • Tipo de descuento: porcentaje, fijo o ofertas tipo «compra 3 y paga 2».
  • Cantidad del descuento.
  • Posibilidad de envío gratuito.
  • Posibilidad de aplicar el cupón al total de la compra, en lugar de aplicarse al precio base del producto.

Un gran invento este de los cupones de descuento.