inicio archivos artículos galería contacta acerca de...
esloquehay.com

Pasar Linux de un disco duro a otro

Tenemos un sistema GNU/Linux funcionando en un PC, instalado en
un disco duro, y el disco se nos ha quedado pequeño. Obtenemos
un disco duro mayor y lo que deseamos hacer es
pasar nuestro sistema del disco antiguo al nuevo.

La primera vez que tuve que resolver este problema busqué
en Internet alguna solución y la encontré en
thelinuxgurus.org,
en un artículo que desgraciadamente ya no está disponible
en su web. Lo que me sorprendió fue que un simple cp no fuera
suficiente, y hubiera que recurrir a tar; el problema es que
cp no mantiene todas las propiedades de todos los archivos.

Tomé las notas correspondientes, y las he usado muchas veces
para resolver el problema con éxito. La última vez que lo he
hecho ha sido en un Pentium II a 400 MHz con 64 MB de RAM,
y he pensado que era
buena idea publicarlo por si a alguien le puede servir.

Partimos del siguiente supuesto, que obviamente podrás adaptar
a tu propia situación: tenemos un PC con dos canales IDE; en el
canal maestro del primer BUS IDE tenemos un disco duro (llamado
/dev/hda en GNU/Linux) y en canal maestro del segundo BUS IDE tenemos
un lector de CD-ROM (llamado /dev/hdc en GNU/Linux).
Hemos instalado GNU/Linux en el disco duro usando tres particiones y
nuestra tabla de particiones tiene este aspecto:

Partición Sistema de archivos Uso
hda1 ext3 / (Raíz del sistema)
hda2 ext3 /home (datos de usuarios)
hda3 swap Intercambio
  1. Comenzamos por apagar el ordenador y desconectarlo de la red
    de datos.
    Durante el tiempo que estemos haciendo el cambio, nadie podrá
    acceder a los servicios ofrecidos por esta máquina.

  2. Abrimos el ordenador y conectamos el disco duro nuevo en el
    lugar del CD-ROM. Así no hará falta ni siquiera tocar los
    jumpers del disco para cambiar entre maestro y esclavo.

  3. Arrancamos el sistema y creamos particiones en el disco duro
    nuevo, por ejemplo con el programa cfdisk:

    cfdisk /dev/hdc

    Haremos tres particiones, para /, para /home y para swap, en el
    mismo orden que las tenemos en el disco antiguo.

  4. Tras salir de cfdisk, conviene reiniciar el sistema para estar
    seguros de que Linux lee correctamente la tabla de particiones.

  5. Cuando volvemos a tener el sistema en marcha, damos formato a
    las tres particiones creadas. Es un buen momento para leer las
    páginas man, por si queremos crear los sistemas de archivos
    con alguna característica especial.

    mkfs.ext3 /dev/hdc1

    mkfs.ext3 /dev/hdc2
    mkswap /dev/hdc3

  6. Creamos un directorio nuevo, en el que iremos montando las
    particiones del disco duro nuevo:

    mkdir /nuevo

  7. Vamos a comenzar por pasar al nuevo disco duro el contenido
    de la partición que contiene /home. Montamos la segunda
    partición del disco duro nuevo:

    mount /dev/hdc2 /nuevo

  8. Nos cambiamos al directorio /home:

    cd /home

  9. Ahora vamos a crear un archivo de texto con la lista de archivos
    y directorios que hay que trasvasar de un disco a otro. Para ello
    vamos a usar la sencilla orden ls, pero como es muy posible que
    hayamos definido un alias para que ls dé su salida en color, vamos
    a poner una barra invertida antes de invocar ls (esto hace que
    bash no use el alias, sino la orden original).

    Como no queremos trasvasar el directorio lost+found, usamos
    grep para filtrar ese nombre y que no acabe en la lista; la opción
    -v de grep sirve para invertir el uso habitual de grep.

    El archivo de texto se llamará lista.txt; lo creamos así:

    \ls | grep -v lost+found > lista.txt

  10. Ahora viene el paso importante, usamos tar para ir leyendo
    los archivos de la partición antigua y otro tar para ir
    creándolos en la partición nueva. Atención a las tildes
    invertidas. Se obtienen pulsando el acento grave seguido
    del espaciador.

    tar cf - `cat lista.txt` | (cd /nuevo ; tar xpf -)

    En la máquina en que he dicho que estoy haciendo esto tardé
    2′42″ en mover 276 MB de datos. Probablemente el tiempo
    hubiera sido mucho menor si hubiera usado hdparm para mejorar
    el acceso a disco.

  11. Concluido el trasvase, podemos borrar el archivo de texto si
    queremos:

    rm /home/lista.txt

  12. Desmontamos la partición del disco nuevo:

    umount /nuevo

  13. Ahora nos preparamos para pasar al disco nuevo los datos de
    la partición raíz. Comenzamos por cambiarnos al directorio
    raíz:

    cd /

  14. Ahora hay que desmontar todas las particiones que tengamos
    montadas. En nuestro caso, solo tenemos el /home, de modo
    que

    umount /home

  15. De modo similar a como hicimos antes, creamos una lista con
    los nombres de archivos y directorios que queremos trasvasar.
    Solo que ahora también hay que evitar poner en la lista el
    directorio /proc, por ser un directorio virtual creado por
    Linux, y el directorio /nuevo, por ser donde vamos a montar
    la partición del nuevo disco

    \ls | grep -v proc | grep -v lost+found | grep -v nuevo > lista.txt

  16. Ahora tenemos que pasar a modo monousuario, con lo que conseguimos
    parar los servicios del sistema.

    init 1

  17. Volvemos a colocarnos en el directorio raíz, porque al pasar a
    modo monousuario el sistema nos coloca en /root.

    cd /

  18. Montamos la primera partición del disco duro nuevo:

    mount /dev/hdc1 /nuevo

  19. Y el momento del trasvase de datos:

    tar cf - `cat lista.txt` | (cd /nuevo ; tar xpf -)

    En la máquina en que he dicho que estoy haciendo esto tardé
    9′34″ en mover 720 MB de datos. Probablemente el tiempo
    hubiera sido mucho menor si hubiera usado hdparm para mejorar
    el acceso a disco.

  20. Necesitamos crear a mano el directorio /proc en el nuevo disco:

    mkdir /nuevo/proc

  21. Concluido el trasvase, podemos borrar el archivo de texto si
    queremos:

    rm /lista.txt

  22. Desmontamos la partición del disco nuevo:

    umount /nuevo

  23. Paramos el sistema:

    halt

  24. Colocamos el disco duro nuevo en el lugar del viejo y volvemos
    a colocar el lector de CD-ROM.

  25. Necesitamos escribir el sector de arranque del sistema en el
    disco duro nuevo; para ello yo arranco el sistema con el
    primer CD de Debian con la opción de rescate, pero cualquier
    otro método valdría. Concretamente, arranco desde el primer CD
    de Debian 3.0 (Woody) escribiendo esta orden en el prompt:

    rescbf24 root=/dev/hda1

  26. Cuando arranca el nuevo sistema (cosa que debería ocurrir
    perfectamente), ejecuto la orden lilo para escribir
    el Master Boot Record del nuevo disco:

    lilo

  27. Ya debería estar todo correcto, pero lo comprobamos reiniciando
    el sistema y viendo que todo va bien.

    reboot

Ya podemos guardar el disco duro antiguo, que contendrá los
datos anteriores sin ninguna modificación.

Pedro Reina

Comentarios cerrados.