09 noviembre 2015

Restaurar GRUB o GRUB2 con Rescatux

Totalmente gratuito, liviano y con posibilidades de reparar tanto GRUB como GRUB2, es una gran utilidad para reparar los arranques de nuestros sistemas operativos.
Se trata de una imagen ISO para usarla como CD o UD USB de arranque. Y sirve para eso, para recuperar GRUB o GRUB2 y chequear el sistema de archivos de la partición de arranque.

Sitio Oficial: http://www.supergrubdisk.org/category/download/rescatuxdownloads/

Descargamos los archivos, tanto el .ISO como el .MD5 para despues, via el comando MD5SUM comprobar que estan integros y bajaron sin errorres. Esto es muy importante, ya que de esta manera estamos seguro que los errores que potencialmente aparezcan no se deben a una imagen corrupta o problemas durante la descarga.
En este caso la version actual de rescatux_cdrom_usb_hybrid_i386_amd64 es la 0.32b1

Rescatux también añade herramientas extra como Synaptic o Gparted además de características como:

    Comprobar y arreglar sistemas de archivos
    Restaurar GRUB y GRUB2
    Resetear contraseñas de Windows
    Cambiar contraseñas de Gnu/Linux
    Regenera el archivo sudoers
    Actualizar la configuración de Grub
    Corregir MBR de Windows
    Regenera el inicio de Debian/Ubuntu


Como soy perezoso, trato de hacer las cosas simples:

[vampii@gostir rescatux]$ md5sum -c rescatux_cdrom_usb_hybrid_i386_amd64-486_0.32b1.iso.md5
rescatux_cdrom_usb_hybrid_i386_amd64-486_0.32b1.iso: La suma coincide
[vampii@gostir rescatux]$

Tambien vale hacer esto, que creo que es lo que la mayoria hace porque nadie se molesta en leer las paginas del MAN(ual) ;-) Leer mediante CAT el contenido del .MD5 y despues ejecutar el comando MD5SUM:

[vampii@gostir rescatux]$ cat rescatux_cdrom_usb_hybrid_i386_amd64-486_0.32b1.iso.md5
3c7cc70cc8c7a59a30303d69e1962080  rescatux_cdrom_usb_hybrid_i386_amd64-486_0.32b1.iso
[vampii@gostir rescatux]$


[vampii@gostir rescatux]$ md5sum rescatux_cdrom_usb_hybrid_i386_amd64-486_0.32b1.iso
3c7cc70cc8c7a59a30303d69e1962080  rescatux_cdrom_usb_hybrid_i386_amd64-486_0.32b1.iso
[vampii@gostir rescatux]$

Lo mas importante es que la suma de comprobacion coincida, confirmandonos que la imagen .ISO que descargamos es correcta.

http://sourceforge.net/projects/rescatux/

Identificamos el pendrive USB y posteriormente vamos a volcar la imagen ahi. Para esto vamos a necesitar privilegios de SuperUsuario, o ROOT, por eso vemos que nuestro prompt cambia y pasa a tener el simbolo PRAGMA (#) indicandonos eso.
La forma mas simple es usar el comando FDISK para que liste las unidades de disco conectadas, y vale aclarar, no necesitan estar montadas para esto...

[root@gostir rescatux]# fdisk -l

Disk /dev/sda: 931,5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x0a29acdc
Partition 1 does not start on physical sector boundary.
Partition 2 does not start on physical sector boundary.
Partition 3 does not start on physical sector boundary.

Disposit. Inicio     Start      Final    Blocks  Id System
/dev/sda1 *             63    8000369   4000153+ 82 Linux swap / Solaris
/dev/sda2          8000370  408002804 200001217+ 83 Linux
/dev/sda3        408002805 1953525167 772761181+ 83 Linux


Disk /dev/sdc: 1,9 GiB, 2020605952 bytes, 3946496 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0a290a29

Disposit. Inicio Start     Final  Blocks  Id System
/dev/sdc1 *         32   3946495 1973232   b W95 FAT32

[root@gostir rescatux]#

En caso que no inicie o tengamos dudas sobre nuestro USB, siempre tenemos la opcion de pisar el MBR y volver a generar el inicio del pendrive:

[root@gostir rescatux]# dd if=/dev/zero of=/dev/sdc bs=1M count=64
64+0 registros leídos
64+0 registros escritos
67108864 bytes (67 MB) copiados, 5,37455 s, 12,5 MB/s
[root@gostir rescatux]#

El MBR o también conocido Registro de Arranque Maestro (Master Boot Record) es el primer sector (sector 0) del disco rigido y es donde se guarda la información de las distintas particiones que tiene el mismo, y que sistemas operativos hay instalados en cada uno. El problema que puede ocurrir es que si instalamos ambos sistemas operativos en el mismo disco, M$-Windows se las arregla para modificar el MBR y hacer imposible que entremos a Linux. El BIOS toma a los pendrives como "discos removibles" pero emulando discos rigidos, o discos ZIP, que son equivalentes en la parte que nos atañe.

Una vez identificada la unidad USB, procedemos a volcar la imagen de Rescatux en el mismo, y para esto viene a nuestro rescate el comando DD (Disk Duplicator), y para no tardar tanto, le pasamos un par de parametros para agilizar las cosas:

[root@gostir rescatux]# dd if=rescatux_cdrom_usb_hybrid_i386_amd64-486_0.32b1.iso of=/dev/sdc bs=1M
406+0 registros leídos
406+0 registros escritos
425721856 bytes (426 MB) copiados, 117,832 s, 3,6 MB/s
[root@gostir rescatux]#

E iniciamos el disco modificando antes el BIOS del equipo, de ser necesario:

A modo de curiosidad, el script en bashshell, que lanza en Rescatux el menú al inicio de la distro  ( grub, support): rescapp.sh


#!/bin/bash

function show_menu() {

OPTIONS_FILE=${1}.${LIST_FILE_SUFFIX}
MENU_TITLE=$1

choice="$(find `cat ${OPTIONS_FILE}` -maxdepth 1 -type d -exec cat {}/directory {}/name {}/description \; | zenity --width=${RESCAPP_WIDTH} --height=${RESCAPP_HEIGHT} --list --column "Code" --column "Name" --column "Description" --title="${MENU_TITLE}" \
)";

result=$?
echo -e -n "result is: $result\n"
case $result in
0)
  show_item $choice
;;
1)

exit;
;;
esac

}

function show_item() {

DIRECTORY=$1

if [ -e ${DIRECTORY}.${LIST_FILE_SUFFIX} ] ; then
  show_menu ${DIRECTORY}
else

choice="$(zenity --width=${RESCAPP_WIDTH} --height=${RESCAPP_HEIGHT} --list --column "Code" --column "Description" --title="${DIRECTORY}" "${RUN_CODE}" "${RUN_STR}" "${LOCAL_DOC_CODE}" "${LOCAL_DOC_STR}" "${ONLINE_DOC_CODE}" "${ONLINE_DOC_STR}")"

result=$?

SUDO="sudo"
[ -e ${DIRECTORY}/sudo ] || SUDO=""

echo -e -n "result is: $result\n"
case $result in
0)


    case $choice in
    ${RUN_CODE})
    exec ${SUDO} ${DIRECTORY}/run > ${LOG_DIRECTORY}/${DIRECTORY}_log.txt 2>&1 &
    ;;
    ${LOCAL_DOC_CODE})
    ${FIREFOX_COMMAND} --new-window ${DIRECTORY}/local_doc &
    ;;
    ${ONLINE_DOC_CODE})
    ${FIREFOX_COMMAND} --new-window `cat ${DIRECTORY}/online_doc` &
    ;;
    esac

;;
1)

return;
;;
esac

fi


}


# Main program
DEFAULT_PATH="/home/user/Desktop/"
LOG_DIRECTORY="log"
LIST_FILE_SUFFIX="lis"
RESCAPP_WIDTH="600"
RESCAPP_HEIGHT="400"
GRUB_INSTALL_TO_MBR_STR="Restore GRUB / Fix Linux Boot"
CHAT_STR="Get online human help (chat)"
DOC_STR="Access online Rescatux website"
EXIT_STR="Exit"

RUN_CODE="run"
LOCAL_DOC_CODE="localdoc"
ONLINE_DOC_CODE="onlinedoc"

RUN_STR="Run"
LOCAL_DOC_STR="Local Documentation"
ONLINE_DOC_STR="Online Documentation"

FIREFOX_COMMAND="iceweasel"

cd ${DEFAULT_PATH}

while true; do
choice="$(find `cat rescatux.lis` -maxdepth 1 -type d -exec cat {}/directory {}/name {}/description \; | zenity --width=${RESCAPP_WIDTH} --height=${RESCAPP_HEIGHT} --list --column "Code" --column "Name" --column "Description" --title="RESCATUX's RESCAPP" \
)";

result=$?
echo -e -n "result is: $result\n"
case $result in
0)
  show_item $choice
;;
1)

exit;
;;
esac

done



Que te diviertas!