Migración a nuevo disco a través de conexión de red en Linux/Ubuntu/Debian

Introducción

Ya hay muchos tutoriales por ahí sobre como cambiar el disco duro a un ordenador y migrar los datos. En este caso, voy a cambiarle el disco a un Netbook por un nuevo disco SSD. Hay varios factores que hacen este cambio algo especial:

  • El nuevo disco es más pequeño que el antiguo (128GB frente a 160GB) por lo que en vez de ampliar el espacio hay que reducirlo.
  • Los dos discos son SATA, pero el ordenador sólo tiene opción de conectar un sólo disco. No tengo un cable adaptador USB-SATA disponible, por lo que voy a conectar el nuevo disco a un puerto SATA disponible en el PC de sobremesa y haré la migración por la red.
  • Quiero conservar los datos exactamente como estaban en el otro disco, por lo que haré una copia literal de las particiones que contienen los sistemas de archivos (con cat, dd, etc.) nada de copiar archivos (cp -a, rsync, etc.).
  • Realizaré la copia por la red, ya que el nuevo disco está conectado a otro ordenador.

Las instrucciones a continuación suponen cierto manejo de la interfaz de comandos de Linux y de herramientas básicas como fdisk, dd, ssh, cat, etc. por lo que las explicaciones no serán totalmente detalladas.

Aunque en este caso se trata de migrar a un disco SSD, no hay nada específico en cuanto a que el disco sea SSD o no. Eso sí, una vez hecha la migración es muy muy recomendable hacer ciertos cambios de configuración para mejorar el rendimiento del disco SSD alargar su vida útil. Puedes encontrar mucha información en Internet sobre las opciones disponibles.

Aunque el procedimiento se realiza sobre una instalación de Ubuntu y con un disco de arranque de Ubuntu, sólo se emplean herramientas estándar desde el terminal, por lo que debería poder aplicarse a cualquier distribución actual de Linux.

Datos del sistema

  • Netbook MSI Wind
  • Disco original: 160GB, SATA
  • Particiones originales: sda1 (20GB) en “/”, sda2 (140GB) extendida, sda5 (2GB) swap, sda6 (138GB) en “/home”
  • Nuevo disco: Plextor 128GB M5S SATA SSD. Es un disco SATA-III, pero no debe haber ningún problema en instalarlo en cualquier controladora SATA-I, II o III.
  • Nuevas particiones: sda1 (18GB) en “/”, sda2 (2GB) swap, sda3 (100GB) en “/home”
  • Sistema operativo instalado en el sistema: Ubuntu 13.04
  • Sistema de arranque para migración: Ubuntu 12.04.2 en Pendrive.

Procedimiento general

El procedimiento general o estrategia para la migración es el siguiente:

  • Conectar el nuevo disco SSD al PC de sobremesa.
  • Particionar el disco nuevo según nos convenga.
  • Arrancar el Netbook con un disco de arranque.
  • Copiar las particiones del disco antiguo al nuevo a través de la red.
  • Configurar el gestor de arranque en el nuevo disco.
  • Conectar el nuevo disco al Netbook e iniciar el sistema instalado.

Procedimiento específico

Particiones

Conectamos el nuevo disco al PC. Usamos la conexión SATA y alimentación de la unidad DVD, que también es SATA. No reinicio ni nada, ya que los dispositivos SATA deben poder conectarse en caliente. En todo caso, debes comprobar que las controladoras SATA de ambos ordenadores están configuradas en modo AHCI (sistema nuevo) y no en modo IDE (sistema antiguo).

Vemos qué dispositivo se ha asignado:

$ dmesg |tail
[73759.876558] ata9.00: configured for UDMA/133
[73759.876601] ata9: EH complete
[73759.876699] scsi 9:0:0:0: Direct-Access     ATA      PLEXTOR PX-128M5 1.03 PQ: 0 ANSI: 5
[73759.876911] sd 9:0:0:0: [sdi] 250069680 512-byte logical blocks: (128 GB/119 GiB)
[73759.876988] sd 9:0:0:0: [sdi] Write Protect is off
[73759.876991] sd 9:0:0:0: [sdi] Mode Sense: 00 3a 00 00
[73759.877016] sd 9:0:0:0: [sdi] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[73759.877199] sd 9:0:0:0: Attached scsi generic sg3 type 0
[73759.878188]  sdi: sdi1 sdi2 sdi3
[73759.879465] sd 9:0:0:0: [sdi] Attached SCSI disk

Vemos que el dispositivo es “sdi”. Hacemos las particiones necesarias. Voy a hacer sólo particiones primarias ya que sólo necesito 3 y sólo voy a instalar Linux. De aquí en adelante usamos la cuenta de ‘root’. Usaré “fdisk” para hacer las particiones.

$ sudo -s
# fdisk /dev/sdi
... (editamos y salimos de fdisk) ...

Comprobamos

# fdisk -l /dev/sdi

Disco /dev/sdi: 128.0 GB, 128035676160 bytes
255 cabezas, 63 sectores/pista, 15566 cilindros, 250069680 sectores en total
Unidades = sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico / físico): 512 bytes / 512 bytes
Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes
Identificador del disco: 0xabb254d3

Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sdi1            2048    37750783    18874368   83  Linux
/dev/sdi2        37750784    41945087     2097152   82  Linux swap / Solaris
/dev/sdi3        41945088   250069679   104062296   83  Linux

Vemos que los comienzos de los sectores están “alineados” en múltiplos de 2048 sectores (dividir el comienzo por 2048 y comprobar que sale un número entero). fdisk ha elegido estos número automáticamente. Esto debería bastar para tener las particiones alineadas a los grupos de borrado del disco SSD, aspecto que es importante. 2048 sectores de 512 bytes es 1MiB. Los grupos de borrado suelen ser de 128 bloque de 4KiB (512KiB = 1/2MiB). Si crees que tus particiones no están alineadas con los grupos de borrado, busca en Internet información sobre el tema.

Copiar datos

Iniciamos el Netbook desde un arranque externo, en este caso desde un Pendrive de instalación de Ubuntu 12.04.2. El Netbook está conectado a la misma red que el PC con un cable para que la transferencia sea más rápida, aunque también podría hacerse por WIFI. Iniciamos la sesión y abrimos un terminal. Comprobamos las particiones del disco instalado:

root@ubuntu:~# fdisk -l /dev/sda

Disco /dev/sda: 160.0 GB, 160041885696 bytes
255 cabezas, 63 sectores/pista, 19457 cilindros, 312581808 sectores en total
Unidades = sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico / físico): 512 bytes / 512 bytes
Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes
Identificador del disco: 0x7ecbba1f

Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda1   *          63    39070079    19535008+  83  Linux
/dev/sda2        39070141   312576704   136753282    5  Extendida
/dev/sda5        39070143    42973874     1951866   82  Linux swap / Solaris
/dev/sda6        42973938   312576704   134801383+  83  Linux

Las particiones en el nuevo disco son un poco más pequeñas que en el antiguo, por lo que vamos a reducir los sistemas de archivos en las particiones originales para que quepan en las nuevas. Antes tenemos que comprobarlos:

root@ubuntu:~# e2fsck -f /dev/sda1
e2fsck 1.42 (29-Nov-2011)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
/dev/sda1: 276548/1107584 files (0.5% non-contiguous), 1544972/4456448 blocks
root@ubuntu:~# e2fsck -f /dev/sda6
e2fsck 1.42 (29-Nov-2011)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
/dev/sda6: 149745/6356992 files (0.9% non-contiguous), 23949129/25427968 blocks

Ahora reducimos el tamaño. Podemos comprobar el espacio ocupado por si acaso (número de bloques de salida del comando anterior multiplicado por 4KiB).

root@ubuntu:~# resize2fs /dev/sda1 17G
...
root@ubuntu:~# resize2fs /dev/sda6 97G
...

Copiamos las particiones al nuevo disco (sda1 -> sdi1, sda6 -> sdi3). Vamos ha hacerlo por red con “ssh” por lo que necesitaremos tener instalado “ssh” en el PC (apt-get install ssh) y saber su dirección IP (ifconfig) y el usuarios que estamos usando y su clave (sin no sabes esto, este tutorial no es para tí).

Para leer la partición original podemos usar “cat”, “dd” o similar. Lo mismo para escribir en la partición en el ordenador de destino. El usuario de destino debe tener permisos para escribir en los dispositivos de disco. En Debian/Ubuntu al menos, esto se puede conseguir poniendo al usuario en el grupo “disk”:

# ls -l /dev/sdi1
brw-rw---- 1 root disk 8, 129 may  7 14:12 /dev/sdi1
jjchico@valhalla:~ $ ls -l /dev/sdi*
brw-rw---- 1 root disk 8, 128 may  7 12:01 /dev/sdi
brw-rw---- 1 root disk 8, 129 may  7 14:12 /dev/sdi1
brw-rw---- 1 root disk 8, 130 may  7 12:01 /dev/sdi2
brw-rw---- 1 root disk 8, 131 may  7 12:01 /dev/sdi3
# adduser usuario disk

Cambiamos “usuario” por el usuario que vamos a usar en la conexión. Puede usarse otra solución más radical como poner permisos de escritura universales, con la esperanza de que “udev” corrija estos permisos más adelante:

# chmod a+rw /dev/sdi*

Ejecutamos esto en el Netbook para copiar la primera partición.

root@ubuntu:~# dd if=/dev/sda1 bs=4k |
> ssh usuario@IP_PC 'dd of=/dev/sdi1 bs=4k'

Sustituyendo “usuario” y “IP_PC” por los valores correctos. La opción “bs=4k” es “opcional”. Indica a dd que lea y escriba en bloques de 4 kibibytes (4096 bytes). Podéis probar otros valores, pero en los discos que he usado he obtenido las mejores velocidades de transferencia con este valor.

Si quieres ver el progreso de la copia puedes abrir otro terminal y ejecutar:

root@ubuntu:~# watch -n5 'killall -USR1 -r ^dd'

En el terminal donde se ha ejecutado “dd” verás una actualización del progreso cada 5 segundos.

Una opción para mejorar la velocidad de la copia en caso de que alguno de los ordenadores sea un poco antiguo es indicar a ssh que use el algoritmo de compresión blowfish en lugar del 3des que usa por defecto. Blowfish es muy rápido y muy seguro, aunque quizá no tan seguro como 3des:

root@ubuntu:~# dd if=/dev/sda1 bs=4k |
> ssh -c blowfish usuario@IP_PC 'dd of=/dev/sdi1 bs=4k'

Puedes probar una opción, cancelarla (Ctrl-C) y luego probar la otra y comparar la velocidad de transferencia que indica “dd”.

Repetimos para la otra partición, esto es, sda6 y sdi3 en nuestro caso:

root@ubuntu:~# dd if=/dev/sda6 bs=4k |
> ssh -c blowfish usuario@IP_PC 'dd of=/dev/sdi3 bs=4k'

Al final de la copia obtendremos un mensaje de error del “dd” remoto indicando que se ha llegado al final del dispositivo. Esto ocurre porque las particiones de destino son más pequeñas que las de origen, pero no tiene importancia porque previamente hemos disminuido el tamaño de los sistemas de archivos.

Comprobamos que los sistemas de archivos se han copiado correctamente montándolos en el PC:

# mount /dev/sdi1 /mnt
# ls /mnt
bin    etc             lib         opt   sbin     tmp      vmlinuz.old
boot   home            lost+found  proc  selinux  usr
cdrom  initrd.img      media       root  srv      var
dev    initrd.img.old  mnt         run   sys      vmlinuz
# umount /mnt
# mount /dev/sdi3 /mnt
# ls /mnt
...

Ajustar los sistemas de archivos a las nuevas particiones

Ahora redimensionamos los sistemas de archivos copiados para que ocupen el total de las particiones de destino:

# e2fsck -f /dev/sdi1
e2fsck 1.42.5 (29-Jul-2012)
Paso 1: Verificando nodos-i, bloques y tamaños
Paso 2: Verificando la estructura de directorios
Paso 3: Revisando la conectividad de directorios
Paso 4: Revisando las cuentas de referencia
Paso 5: Revisando el resumen de información de grupos
/dev/sdi1: 276548/1107584 files (0.5% non-contiguous), 1544972/4456448 blocks
# resize2fs /dev/sdi1
resize2fs 1.42.5 (29-Jul-2012)
Resizing the filesystem on /dev/sdi1 to 4718592 (4k) blocks.
The filesystem on /dev/sdi1 is now 4718592 blocks long.

Repetimos lo mismo con la otra partición (sdi6). Podemos volver a probar a montar de nuevo las particiones para comprobar, pero si “resize2fs” no ha dado errores es que todo ha ido bien.

Configuración del espacio de intercambio

La partición de intercambio no tiene datos útiles, por lo que es mejor formatear la nueva partición. Se ha debido poner el tipo correcto a la hora de crear las particiones en el nuevo disco (tipo 83).

# mkswap /dev/sdi2
Configurando la versión swapspace 1, tamaño = 2097148 KiB
sin etiqueta, UUID=38da2e67-7b37-46ba-8038-9c872d23e159

Debemos copiar el “UUID” porque nos hará falta en el paso siguiente.

Ajustes en el nuevo /etc/fstab

En este caso debemos hacer algunos ajustes en el nuevo /etc/fstab para usar la nueva partición de intercambio. También aprovecharemos para añadir una opción a los sistemas de archivos conveniente para los discos SSD. Todo esto se hace en el PC con el disco nuevo. Montamos el nuevo sistema raiz:

# mount /dev/sdi1 /mnt

Editamos /mnt/etc/fstab hacemos dos cosas: cambiamos el UUID de la partición de intercambio (swap) por el que obtuvimos antes y añadimos la opción “discard” a los sistemas de archivos que van en la SSD. Debe quedar algo como:

# nano /mnt/etc/fstab
...
# cat /mnt/etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda1 during installation
UUID=89fca386-dfad-4965-8eb0-5269d2ab2e06 /               ext4    discard,errors=remount-ro 0       1
# /home was on /dev/sda6 during installation
UUID=a41aeb7b-86b0-4e77-a013-04cbd1361942 /home           ext4    discard,defaults        0       2
# swap was on /dev/sda5 during installation
UUID=38da2e67-7b37-46ba-8038-9c872d23e159 none            swap    sw              0       0

Es importante recordar que el UUID de la partición swap que hay que poner es el que salga en cada caso al formatear la partición y no el ejemplo que aparece aquí.

En cuanto a las optimizaciones para SSD, aquí sólo nos limitaremos añadir la opción “discard”. Con esta opción, se indica a la unidad SSD que realmente borre los bloques involucrados cada vez que se borra un archivo. Hay otras alternativas para hacer esta operación y muchas otras optimizaciones para SSD. Podéis buscar en Internet sobre el tema pero, en mi modesta opinión, simplemente añadir esta opción debe ser suficiente para un sistema que se usa ocasionalmente como del que se trata.

Instalar el gestor de arranque (GRUB) en el nuevo disco

Ahora debemos instalar el gestor de arranque en el nuevo disco. Para ello, en el PC, montamos los sistemas de archivos básico del nuevo sistema en /mnt. El primer “mount” sólo es necesario si no lo tenemos hecho de antes.

# mount /dev/sdi1 /mnt
# mount --bind /dev /mnt/dev
# mount --bind /proc /mnt/proc
# mount --bind /sys /mnt/sys

Ahora hacemos un chroot a mnt y estaremos como si hubiéramos arrancado desde el nuevo sistema. Instalamos el cargador de arranque (grub-install) y actualizamos la configuración (no es necesario, pero por si acaso).

# chroot /mnt
# grub-install /dev/sdi
Instalación terminada. Ningún error encontrado.
# update-grub
Generando grub.cfg ...
Se encontró una imagen linux: /boot/vmlinuz-3.8.0-19-generic
Se encontró una imagen initrd: /boot/initrd.img-3.8.0-19-generic
Se encontró una imagen linux: /boot/vmlinuz-3.5.0-27-generic
Se encontró una imagen initrd: /boot/initrd.img-3.5.0-27-generic
Se encontró una imagen linux: /boot/vmlinuz-3.5.0-16-generic
Se encontró una imagen initrd: /boot/initrd.img-3.5.0-16-generic
Se encontró una imagen linux: /boot/vmlinuz-3.2.0-31-generic
Se encontró una imagen initrd: /boot/initrd.img-3.2.0-31-generic
Found memtest86+ image: /boot/memtest86+.bin
hecho

Ahora desmontamos todo para liberar el nuevo disco y poder desconectarlo:

# exit      # salimos del chroo
# umount /mnt/sys
# umount /mnt/proc
# umount /mnt/dev
# umount /mnt

Instalar el nuevo disco en el Netbook

Lo que queda ahora es más bien mecánico. Consiste en:

  • Desconectar el disco nuevo del PC. Normalmente puede hacerse en caliente, aunque ante la duda recomiendo apagar el PC.
  • Instalar el nuevo disco en el Netbook. Busca información específica de tu portátil sobre cómo sustituir el disco. En algunos puede ser realmente intrincado. El disco que hemos usado aquí (Plexor) tiene exactamente el mismo formato que un disco estándar de portátil de 2,5″ por lo que no debería ser un problema sustituirlo.
  • Reiniciar el Netbook/portátil.

Comentarios finales

Algunas reflexiones y cuestiones a tener en cuenta:

  • El manejo de algunos conceptos básicos de administración de sistemas en Linux permite resolver problemas muy específicos como el que se describe aquí sin más que usar las herramientas básicas que vienen con el sistema.
  • Aprender a usar estas herramientas te servirá para resolver multitud de problemas muy diferentes y muy específicos con los que suele encontrarse un administrador de sistemas.
  • La tecnología de discos SSD está evolucionando muy rápidamente. Muchas veces hay información en Internet de hace sólo un año que hoy día resulta obsoleta. Busca fuentes recientes para aprender a sacar el mayor rendimiento de tus discos SSD.

Espero que esta guía te haya sido de utilidad. Si es así, no dudes en dejar un comentario.

Anuncios

8 pensamientos en “Migración a nuevo disco a través de conexión de red en Linux/Ubuntu/Debian

  1. Pingback: Nuevo manual sobre migración a un nuevo disco SSD copiando los datos a través de la red en Linux/Debian/Ubuntu. | tinkabit

    • ¿A qué te refieres exactamente? ¿Un servidor de correo que haga relay para algunos ordenadores o redes basado en la IP de origen, o un servidor de correo que entregue todo el correo a otro servidor para que ése último haga el envío (smarthost)?
      En cualquier caso, una opción sencilla es usar postfix y el asistente de configuración que viene en Debian/Ubuntu. El asistente se ejecuta al instalar el paquete y se puede invocar más tarde para hacer cambios y permite diversas configuraciones, así como hacer salida a través de smarthost e indicar reglas de relay. Para comenzar sólo necesitas un par de cosas:

      $ sudo apt-get install postfix
      (se ejecuta el asistente)

      Si quieres cambiar la configuración con el asistente:

      $ sudo dpkg-reconfigure -p low postfix

      Para cambios más detallados deberás editar los archivos de configuración de postfix en /etc/postfix.

      Puedes encontrar más información en las diapositivas que usamos para uno de nuestros cursos:
      http://www.dte.us.es/cursos/linux-admin/unidades/unidad_8_correo.pdf

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s