¿Como hacer un backup efectivo de un disco rigido, crear una imagen o clonar un disco rigido ? En esta nota veremos…

  • Instalacion disco rigido 500gb sata2 western digital 16mb en Linux.
  • Instalacion de una nueva distro en el nuevo disco.
  • backup completo de la instalacion anterior de linux.
  • modificar /etc/fstab en la copia backup para apuntar al disco nuevo
  • instalacion de grub en el nuevo disco para bootear desde la copia backup.
  • removiendo el disco viejo, y probando el booteo desde el backup.

en pocas palabras, moveremos una instalacion existente al nuevo disco.

En el camino instalaremos una nueva distro y veremos algunos problemas con los que nos podemos encontrar … Al finalizar podremos elegir bootear desde el nuevo disco y de la nueva instalacion o de la vieja.

ADVERTENCIA: Como siempre al trabajar con el particionado de discos cabe la posibilidad de un error tanto de la maquina como del ser humano, y terminar borrando datos importantes. Mi mejor consejo aqui es realizar un buen backup a CD o DVD de los documentos y archivos importantes antes de realizar cualquier operacion de instalacion o particionamiento. Consejo que recomiendo doblemente para los usuarios que no tengan experiencia instalando o particionando discos, o para los usuarios novatos de Linux. Los comandos aqui expuestos son simplemente a modo de ejemplo. El usuario esta avisado y corre bajo su propia responsabilidad cualquier problema derivado del uso de los comandos aqui expuestos.

Introduccion

Existen varios motivos por los cuales uno quisiera mudar una particion o instalacion de un disco a otro. En mi caso simplemente necesitaba agregar mas espacio y al mismo tiempo sacar el disco viejo con menor capacidad para formatearlo e instalarlo en otra PC. De manera que necesitaba migrar todos los datos de un disco a otro, de la manera mas rapida y transparente posible Puede ser que simplemente queramos tener un backup completo de toda la particion, Si ademas queremos bootear del nuevo disco ( e independizarlo del disco viejo ) necesitaremos instalar GRUB (o cualquier otro gestor de arranque) en el nuevo disco.

hardware utilizado

En los siguientes ejemplos, he utilizado el siguiente hardware:

motherboard Asrock P4VM800 disco IDE maxtor 30 GB ( el disco viejo a copiar) disco SATA western digital 500 Gb ( el flamante nuevo disco )

DUDAS: La duda que se me planteaba justo antes de comprar el disco era si sería detectado sin problemas tanto por el motherboard como por el sistema operativo. Habia leido en algunos blogs que algunas combinaciones de motherboards/Sistemas tenian problemas para detectar o instalar los drivers para los nuevos discos SATA. Para colmo, el modelo del nuevo disco tiene una tasa de transferencia de 3Gb (SATA 2), y en el manual de mi motherboard decia claramente que soportaba tasas de transferencia de 1,5Gb (SATA 1). Tambien lei que algunos discos tenian un jumper para setear la tasa de transferencia, pero este modelo de disco no tenia ningun jumper. ¿ detectaria la tasa de transferencia automaticamente ? No obstante, las caracteristicas del nuevo disco eran muy tentadoras, y decidi correr el riesgo y adquirirlo de todas formas. Manos a la obra.

Justo despues de haber “enchufado” el nuevo disco …

**Problema: **La computadora no detecta el nuevo disco rigido sata.

Lo primero que debemos mirar es la configuracion del BIOS. En este caso, el BIOS estaba configurado para funcionar en modo RAID, y simplemente seteando el modo Non-RAID se ha resuelto el problema.

Ejemplo de la configuracion del BIOS y Deteccion del disco

BIOS SETUP UTILITY

Boot -> Hard disk drives
1st Drive    [HDD: PM-HD5722516VL]
2nd Drive    [RAID: WDC WD5000AAK]


Advanced
IDE Configuration -> SATA
-> operation mode
	    -> RAID
	    -> Non-RAID


SATA1	    [Not Detected]


BIOS
Advances ->IDE Configuration
>SATA1	 [Hard disk]

Al poner “SATA operation mode” en Non-RAID, ha detectado al disco.

SATA1
-------------------
Device: Hard Disk
Vendor: WDL WD5000AAKS-00Y6A0
Size: 500.1 GB
LBA Mode: supported
Block Mode: 16 sectors
PIO Mode: 4
Async DMA: Multiword DMA-2
Ultra DMA: Ultra DMA 6
S.M.A.R.T.: supported


--------------------
Boot -> Hard disk drives
1st Drive: [HDD: PM-HD5722516VL]
2nd Drive: [HDD: 3M-WDC WD5000A]

1er booteo (luego de “enchufar” el disco).

Si configuran el disco nuevo como “esclavo”, pueden bootear con la instalacion anterior para particionar el disco nuevo. En mi caso, la relacion maestro/esclavo se configura desde el SETUP de la BIOS, simplemente cambiando el orden de los discos ( 1st drive, 2dn drive ).

Tambien se puede bootear con un live CD. Si se bootea con un Live CD de Ubuntu, recordar que para usar comandos como root, hay que agregar “sudo” delante de los comandos.

Luego de haber booteado, abrimos una consola y chequeamos si el sistema operativo ha detectado al disco.

ejemplos de comandos para obtener informacion del disco

#  ls /dev/sd* 
/dev/sda

# cfdisk /dev/sda
	Unidad de disco: /dev/sda
	tamaño: 500.1 GB
	cabezas: 255  sectores por pista: 63	cilindros: 60801


root@seba-desktop:/proc/scsi#  cat scsi 
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: WDC WD5000AAKS-0 Rev: 12.0
  Type:   Direct-Access                    ANSI SCSI revision: 05

Instalacion de “la nueva” distribucion en el nuevo disco

No voy a comentar aqui los pasos a seguir para instalar una distribucion de Linux, puesto que ya existe abundante documentacion en internet y distintos blogs que cubren muy bien esta area. En cambio, simplemente recordare al lector que tenga cuidado cuando selecciona las opciones de particionamiento durante la instalacion para no borrar accidentalmente la instalacion vieja. Especificamente para esta nota usare Ubuntu Dapper Drake 6.06 ( la instalacion existente en el disco viejo ) Y Ubuntu 7.10 Gutsy Gibon ( la cual instalaremos en el flamante nuevo disco )

Sin embargo, los procedimientos deberian ser bastante similares para otras distribuciones.

Como puede observarse de la informacion obtenida de los comandos anteriores, el nuevo disco se encuentra mapeado en /dev/sda El disco IDE viejo, se encuentra en /dev/hda

Particionamiento

Para realizar el particionamiento, podemos utilizar cualquiera de los programas: cfdisk, fdisk, gparted, o cualquier programa de particionamiento. En esta nota, asumire que el usuario conoce alguno de los programas de particionado y para el usuario no familiarizado con el tema, le quedara la tarea de investigar como utilizar algun programa de particionado. Aqui simplemente expondre los resultados de haber utilizado el programa cfdisk, y como quedan las particiones luego de haber realizado el particionamiento. Prestar mucha atencion de no confundirse y particionar el disco con datos, ya que al particionar si el disco siendo particionado cotenida datos, estos se borraran.

Ver informacion del disco ya particionado

#cfdisk /dev/sda 

total en Mb:  500107

/dev/sda
	/dev/sda1	ext3	/		29997	Mb
	/dev/sda2	ext3	/media/sda2	29997	Mb
	/dev/sda3	ext3	/media/sda3	39999	Mb
	/dev/sda5	swap			1998	Mb
	/dev/sda6	ext3	/home		100000	Mb
	/dev/sda7	ext3	/media/data	298108	Mb

el programa cfdisk.

Abajo puede verse el menu con las distintas opciones.


                                           cfdisk 2.12r

                                     Unidad de disco: /dev/sda
                               Tamaño: 500107862016 bytes, 500.1 GB
                     Cabezas: 255   Sectores por pista: 63   Cilindros: 60801

    Nombre         Indicadores   Tipo          Tipo de S.F.        [Etiqueta]         Tamaño(MB)

    sda1           Inicio         Primaria     Linux ext3                              29997,60
    sda2                          Primaria     Linux ext3                              29997,60
    sda3                          Primaria     Linux ext3                              39999,54
    sda5                          Lógica      Linux swap / Solaris                     1998,75
    sda6                          Lógica      Linux ext3                             100002,96
    sda7                          Lógica      Linux ext3                             298108,83


      [Iniciable] [Suprimir]  [ Ayuda  ]  [Maximizar] [Imprimir]  [ Salir  ]  [  Tipo  ]
      [Unidades]  [Escribir]

                     Conmuta el indicador de iniciable de la partición actual

Imagen de cfdisk

cfdisk

Salida del comando fdisk

root@seba-desktop:~# fdisk -l 

Disco /dev/sda: 500.1 GB, 500107862016 bytes
255 cabezas, 63 sectores/pista, 60801 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1               1        3647    29294496   83  Linux
/dev/sda2            3648        7294    29294527+  83  Linux
/dev/sda3            7295       12157    39062047+  83  Linux
/dev/sda4           12158       60801   390732930    5  Extendida
/dev/sda5           12158       12400     1951866   82  Linux swap / Solaris
/dev/sda6           12401       24558    97659103+  83  Linux
/dev/sda7           24559       60801   291121866   83  Linux

Disco /dev/hda: 164.6 GB, 164696555520 bytes
255 cabezas, 63 sectores/pista, 20023 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/hda1   *           1        3824    30716248+   7  HPFS/NTFS
/dev/hda2            3825       20022   130110435    f  W95 Ext'd (LBA)
/dev/hda5            3825        8923    40957686    e  W95 FAT16 (LBA)
/dev/hda6            8924       18739    78846988+   e  W95 FAT16 (LBA)
/dev/hda7           18740       18804      522081   82  Linux swap / Solaris
/dev/hda8           18805       20022     9783553+  83  Linux

NOTA: La columna inicio indica si la particion esta marcada como “booteable” o no. El el caso del disco viejo “/dev/hda1″ puede verse esta marca. En el caso del disco nuevo, deberemos agregar este flag si queremos tambien poder bootear del disco nuevo. Para marcar una particion con el flag de booteo, se puede utilizar por ejemplo el programa cfdisk o el programa fdisk, mencionados anteriormente, siendo el programa cfdisk mas amigable y con menues.

Salida de fdisk en formato tabla de particiones para /dev/sda


         ----Inicio----      -----Final----   Comienzo   Número de
 Nº Ind.  Cab. Sec. Cil.  ID  Cab. Sec. Cil.    Sector    Sectores

 1  0x00    1    1    0 0x83  254   63 1023          63    58588992
 2  0x00  254   63 1023 0x83  254   63 1023    58589055    58589055
 3  0x00  254   63 1023 0x83  254   63 1023   117178110    78124095
 4  0x00  254   63 1023 0x05  254   63 1023   195302205   781465860
 5  0x00  254   63 1023 0x82  254   63 1023          63     3903732
 6  0x00  254   63 1023 0x83  254   63 1023          63   195318207
 7  0x00  254   63 1023 0x83  254   63 1023          63   582243732

Backup de la particion / instalacion

Una vez instalada la nueva distribucion en el nuevo disco, procedemos a realizar el backup o migracion de la instalacion vieja al nuevo disco.

Existen en la actualidad varios programas libres, especificos para esta tarea. Sin embargo, me decidi por probar primero con algo bien simple:

# find . -depth -print0 cpio –null -pvd new-dir

En el modo copy-pass, cpio copia archivos de un arbol de directorio hacia otro, combinando el modo copy-out y copy-in sin crear un archivo. Este lee la lista de archivos de la entrada standard; El directorio en el cual este copiara los archivos es dado como argumento sin opcion.

find /media/hda1/  -depth -print0 | cpio --null --sparse  -pvd   /media/sda2  

Este comando funciona muy bien, y copia tambien los archivos especiales (como archivos de dispositivos y temporales ), lo que garantiza una copia imagen de la instalacion origen.

Otro comando que se podria intentar es algo como dd if=/dev/origen of=/dev/destino Sin embargo el problema que encontre con el comando dd es que para que el backup funcione correctamente, es necesario que ambos discos sean del mismo tamaño. Ademas hay que tener en cuenta que con el comando dd se borraran todos los datos del disco destino, en cambio utilizando cpio simplemente necesitamos un directorio destino en otra particion con suficiente espacio como para guardar los datos del disco origen, pero no es necesario borrar todo el disco destino.

Es necesario no estar usando la particion o unidad de disco a copiar en el momento de realizar el backup. Por ejemplo, siempre es mejor bootear desde otra instalacion o desde un Live CD para realizar esta tarea. De esta manera, nos aseguramos de que se copia todo correctamente, y de que no queden archivos especiales o temporales que podrian afectar la copia.

En mi caso, simplemente arranque desde la nueva distribucion. Antes de poder realizar el backup, hay que montar el disco viejo en la nueva distribucion.

Modificando el /etc/fstab (dentro de la particion de backup)

Luego de haber copiado la instalacion vieja al disco nuevo, hay que modificar el archivo /etc/fstab dentro de la copia backup, para actualizar las rutas de los puntos de montaje, que ahora deben apuntar al nuevo disco. Como ejemplo, aca puede verse la modificacion del /etc/fstab original. Notar la linea comentada #/dev/hda8 (donde recide la instalacion original) reemplazada por la ruta donde ahora reside la copia: /dev/sda2 En otra linea, el swap anterior /dev/hda7 es comentado y reemplazado por la ruta del nuevo swap: /dev/sda5 Tambien, al final he agregado 2 lineas mas con informacion de particiones adicionales ( sda7 y sda6 )


# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
#/dev/hda8       /               ext3    defaults,errors=remount-ro 0       1
/dev/sda2       /               ext3    defaults,errors=remount-ro 0       1

#/dev/hda1       /media/hda1     ntfs    defaults,nls=utf8,umask=007,gid=46 0       1

#/dev/hda5      /media/hda5     ext3    defaults,errors=remount-ro      0       1

#/dev/hda6      /media/hda6     ext3    defaults,errors=remount-ro      0       1

#/dev/hda7       none            swap    sw              0       0
/dev/sda5       none            swap    sw              0       0

/dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0

/dev/sda7       /media/data     ext3    defaults,errors=remount-ro      0       1

/dev/sda6       /media/sda6     ext3    defaults,errors=remount-ro      0       1

GRUB

Procedemos a instalar un gestor de arranque en el nuevo disco. De esta forma, podremos bootear desde el nuevo disco. Recordar que la 1er particion donde instalaremos el gestor de arranque debe tener seteado el flag de booteo. Este se verifica y cambia desde las herramientas de particionamiento (cfdisk, fdisk, gparted, etc).

informacion sobre grub:

# man grub
# man grub-install

posibles problemas al correr grub-install

Error /dev/hdX does not have any corresponding BIOS drive

Este error se soluciona con la opcion –recheck.

# grub-install --recheck /dev/sda

ver archivo: /boot/grub/device.map

luego del recheck ….

root@seba-desktop:/boot/grub# cat device.map

(fd0)   /dev/fd0
(hd0)   /dev/hda
(hd1)   /dev/sda
(hd2)   /dev/sdb

Para hacerlo mas interesante, instalaremos GRUB utilizando directamente la consola grub, a la cual puede accederse con el comando grub:

#grub

**NOTA: **A la consola de grub puede accederse de 2 formas: 1) con el comando grub mencionado anteriormente (con el usuario root) 2) durante el booteo, una vez dentro del menu de booteo de grub, presionar la tecla ‘c’ para entrar en la consola de grub.

Una vez dentro de la consola grub…

grub> find /boot/grub/stage1

      (hd0,7)
      (hd1,0)

———- NOTA: la nomenclatura de GRUB es distinta a la nomenclatura de /dev/ aqui, (hd0,7) significa /dev/hda8 (hd1,0) significa /dev/sda1

hd0 = primer disco, 7 = octava particion hd1 = segundo disco, 0 = primera particion ———–

grub>root (hd1,0)
grub>setup (hd1)

checking if "/boot/grub/stage1" exists...yes
checking if "/boot/grub/stage2" exists...yes
checking if "/boot/grub/stage1.5" exists...yes
Running
[...]

El utlimo comando ingresado en la consola efectivamente instala grub en la 1ra particion del 2do disco, o sea en mi caso /dev/sda1

Para salir de la consola grub, simplemente escribir quit:

grub>quit

Listo. Ya deberiamos poder bootear desde el nuevo disco, tanto de la copia de la instalacion anterior como de la nueva.

Pero … Opps …. podemos encontrarnos con

GRUB y el problema de unidades intercambiadas …

Sintoma: Luego de haber ejecutado correctamente la instalacion de grub (ya sea mediante grub-install o mediante la consola grub) y sin recibir ningun mensaje de error, al intentar bootear recibimos alguno de estos mensajes:

Error 17: cannot mount selected partition -> 7.10

Error 22: No such partition -> /dev/hda8

Solucion: modificando /boot/grub/menu.lst

Las 3 primeras opciones fueron agregadas automaticamente al instalar Ubuntu 7.10

root@seba-desktop:/media/sda1/boot/grub# pager menu.lst

title           Ubuntu 7.10, kernel 2.6.22-14-generic
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.22-14-generic root=UUID=09397d29-fb23-4631-a3e5-4a7f891bfb34 ro quiet splash
initrd          /boot/initrd.img-2.6.22-14-generic
quiet

title           Ubuntu 7.10, kernel 2.6.22-14-generic (recovery mode)
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.22-14-generic root=UUID=09397d29-fb23-4631-a3e5-4a7f891bfb34 ro single
initrd          /boot/initrd.img-2.6.22-14-generic

title           Ubuntu 7.10, memtest86+
root            (hd0,0)
kernel          /boot/memtest86+.bin
quiet


title           Ubuntu 6.06, kernel 2.6.15-26-386 (on /dev/sda2)
root            (hd0,1)
kernel          /boot/vmlinuz-2.6.15-26-386 root=/dev/sda2 ro quiet splash
initrd          /boot/initrd.img-2.6.15-26-386
savedefault
boot

Para bootear con la vieja instalacion movida al nuevo disco Basicamente, tuve que reemplazar (hd1,7) por (hd0,1) ( o sea, /dev/hda8 por /dev/sda2 ) en el archivo /boot/grub/menu.lst

La salida del comando diff entre la configuracion original y la modificada, en forma resumida presenta los siguientes cambios:


>
> title         Ubuntu 6.06, kernel 2.6.15-26-386 (on /dev/sda2)
> root          (hd0,1)
> kernel                /boot/vmlinuz-2.6.15-26-386 root=/dev/sda2 ro quiet splash
> initrd                /boot/initrd.img-2.6.15-26-386
> savedefault
> boot
>
>
---
> root          (hd1,0)
< root          (hd0,7)
---
> root          (hd1,7)
< root          (hd0,7)
---

NOTA: comparar el archivo original con el modificado a continuacion para entender la notacion de las modificaciones:

El archivo /boot/grub/menu.lst ORIGINAL

NOTA: Se borran todos los comentarios para abreviar

root@seba-desktop:/media/sda1/boot# cat grub.bak/menu.lst

default         0

timeout         10

title           Ubuntu 7.10, kernel 2.6.22-14-generic
root            (hd1,0)
kernel          /boot/vmlinuz-2.6.22-14-generic root=UUID=09397d29-fb23-4631-a3e5-4a7f891bfb34 ro quiet splash
initrd          /boot/initrd.img-2.6.22-14-generic
quiet

title           Ubuntu 7.10, kernel 2.6.22-14-generic (recovery mode)
root            (hd1,0)
kernel          /boot/vmlinuz-2.6.22-14-generic root=UUID=09397d29-fb23-4631-a3e5-4a7f891bfb34 ro single
initrd          /boot/initrd.img-2.6.22-14-generic

title           Ubuntu 7.10, memtest86+
root            (hd1,0)
kernel          /boot/memtest86+.bin
quiet


# This entry automatically added by the Debian installer for an existing
# linux installation on /dev/hda8.
title           Ubuntu, kernel 2.6.15-26-386 (on /dev/hda8)
root            (hd0,7)
kernel          /boot/vmlinuz-2.6.15-26-386 root=/dev/hda8 ro quiet splash
initrd          /boot/initrd.img-2.6.15-26-386
savedefault
boot


# This entry automatically added by the Debian installer for an existing
# linux installation on /dev/hda8.
title           Ubuntu, kernel 2.6.15-26-386 (recovery mode) (on /dev/hda8)
root            (hd0,7)
kernel          /boot/vmlinuz-2.6.15-26-386 root=/dev/hda8 ro single
initrd          /boot/initrd.img-2.6.15-26-386
savedefault
boot


# This entry automatically added by the Debian installer for an existing
# linux installation on /dev/hda8.
title           Ubuntu, memtest86+ (on /dev/hda8)
root            (hd0,7)
kernel          /boot/memtest86+.bin
savedefault
boot

El archivo /boot/grub/menu.lst CORREGIDO

root@seba-desktop:/media/sda1/boot# cat grub/menu.lst

default         0

timeout         10

title           Ubuntu 7.10, kernel 2.6.22-14-generic
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.22-14-generic root=UUID=09397d29-fb23-4631-a3e5-4a7f891bfb34 ro quiet splash
initrd          /boot/initrd.img-2.6.22-14-generic
quiet

title           Ubuntu 7.10, kernel 2.6.22-14-generic (recovery mode)
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.22-14-generic root=UUID=09397d29-fb23-4631-a3e5-4a7f891bfb34 ro single
initrd          /boot/initrd.img-2.6.22-14-generic

title           Ubuntu 7.10, memtest86+
root            (hd0,0)
kernel          /boot/memtest86+.bin
quiet


title           Ubuntu 6.06, kernel 2.6.15-26-386 (on /dev/sda2)
root            (hd0,1)
kernel          /boot/vmlinuz-2.6.15-26-386 root=/dev/sda2 ro quiet splash
initrd          /boot/initrd.img-2.6.15-26-386
savedefault
boot



# This entry automatically added by the Debian installer for an existing
# linux installation on /dev/hda8.
title           Ubuntu, kernel 2.6.15-26-386 (on /dev/hda8)
root            (hd1,7)
kernel          /boot/vmlinuz-2.6.15-26-386 root=/dev/hda8 ro quiet splash
initrd          /boot/initrd.img-2.6.15-26-386
savedefault
boot


# This entry automatically added by the Debian installer for an existing
# linux installation on /dev/hda8.
title           Ubuntu, kernel 2.6.15-26-386 (recovery mode) (on /dev/hda8)
root            (hd1,7)
kernel          /boot/vmlinuz-2.6.15-26-386 root=/dev/hda8 ro single
initrd          /boot/initrd.img-2.6.15-26-386
savedefault
boot


# This entry automatically added by the Debian installer for an existing
# linux installation on /dev/hda8.
#title          Ubuntu, memtest86+ (on /dev/hda8)
#root           (hd1,7)
#kernel         /boot/memtest86+.bin
#savedefault
#boot

NOTA: Luego de remover el disco rigido viejo, hay que comentar todas las entradas que contienen /dev/hda8 pues ahora apuntaran a un disco inexistente. Como ejemplo, en el ultimo archivo se comenta la ultima entrada del menu #title Ubuntu, memtest86+ (on /dev/hda8), simplemente anteponiendo el caracter # delante de todas las lineas que forman una entrada del menu.

Tambien te puede interesar

Manual de Grub

Si tienes alguna pregunta, consejo (o simplemente quieres saludar) por favor deja un comentario de esta nota.

Copyright: http://snarvaez.poweredbygnulinux.com Sebastián Narváez este documento ha sido publicado bajo la siguiente licencia: “Verbatim copying and distribution of this entire article are permitted in any medium provided this notice is preserved.”