Después de años con un disco duro de 40GB para el sistema operativo y luego otro de 120GB conectado por USB (en realidad primero el de 40GB, luego uno de 80GB y vuelta al de 40GB para usar el de 80GB en otro sitio) me he pillado un disco duro de 320GB y, una vez más, toca migrar.
Si bien se dice que "GNU/Linux no se formatea jamás" y se asocia a su seguridad, estabilidad y/o que siempre hay una solución que evita el borrado yo creo que los tiros van por otros lados: puedes llegar a personalizarlo tanto que si bien formatear y reinstalar son 20 minutos, luego el dejarlo "como estaba" es mucho más largo.
Por ello lo que se suele hacer es seguir una misma lógica de particiones y/o sistema de ficheros para copiar los ficheros (no hay "ficheros bloqueados") de un disco duro a otro, reinstalar el cargador de sistemas operativos (normalmente GRUB) y adelante.
Preparándolo todo
Lo primero de todo es tener los dos discos duros funcionando, el "nuevo" puede ser conectado con una caja USB pero esto luego puede crearnos alguna pequeña complicación.
Una buena idea es perder diez minutos en hacer limpieza del sistema para ahorrar tiempo luego al copiar ficheros.
Podemos eliminar con apt-get remove --purge
todos los
kernels (linux-image-*
) y sus kbuild (linux-kbuild-*
) salvo
los que utilices tú o sean dependencias de otros programas. Lo mismo con
sus cabeceras (linux-headers-*
).
Lo mismo con los programas que no sean utilizados, además con dpkg -l
| grep ^rc
podemos ver los programas desinstalados pero que todavía
dejan restos (y con dpkg --purge
eliminar los restos).
Con deborphan
podemos ver bibliotecas "huerfanas": bibliotecas que
no son utilizadas por ningún programa. Es recomendable ejecutar antes
ldconfig
para evitar "falsos positivos" y revisar que con el borrado
no se vaya a borrar realmente algo que utilicemos.
Algunos sitios más donde mirar si "sobran" ficheros:
- /usr/share/doc (si no necesitas "documentación").
- /usr/src (¿código compilado por ti?).
- Y obviamente... tu $HOME.
Por último podemos usar apt-get clean
para eliminar todo el
repositorio local (los paquetes que nos hemos bajado para posteriormente
ser instalados).
Particionando
Veamos el esquema del disco duro viejo (40GB) y el nuevo:
HD viejo HD nuevo hda1 100MB ext2 /boot hda1 200MB ext2 /boot hda2 5GB ext3 / hda2 2GB swap hda3 resto ext3 /home hda3 10GB ext3 / hda4 resto ext3 /home
Primera sorpresa: ¿dónde c*ño esta la swap? Resulta que en la última
repartición me olvide ^_^U
. Lo gracioso es pensar que he estado
codificando vídeo, viendo varias docenas de pestañas y reproduciendo
vídeo o música todo a la vez y sin swap. Sólo con los 512MB de RAM de
mi equipo (sí, se me va quedando anticuado xD).
Para crear las particiones utilizo cfdisk
. Todas las particiones
son primarias (no me han gustado nunca las extendidas), de "Tipo de
partición" elijo 83 (Linux) para todas menos la segunda que es 82 (Linux
swap / Solaris).
Una vez hecho, toca darles formato (presupongo que el disco es hda por concordancia con lo anterior):
mkfs.ext2 /dev/hda1 -L "/boot" mkswap /dev/hda2 mks.ext3 /dev/hda3 -L "/" mks.ext3 /dev/hda4 -L "/home" -m 2
El parametro "-m" sirve para poner un % de la partición reservada al administrador distinto del por defecto (5%), en el ejemplo lo bajo a 2% ya que al ser datos de usuario sobra.
Copiándolo todo
Primero montamos las nuevas particiones en /media
:
cd /media mkdir {hda1,hda3,hda4} mount -t ext2 /dev/hda1 hda1 mount -t ext3 /dev/hda3 hda3 mount -t ext3 /dev/hda4 hda4
Luego copiamos todo el /boot
y el /home
:
cp -v /boot/* media/hda1 -rfp cp -v /home/* media/hda4 -rfp
El -v
para hacernos una idea de cómo anda el asunto y la "p" final
para preservar los permisos por lo que es sumamente importante.
¿Por qué no hago lo mismo con el sistema de ficheros raíz? En el sistema de ficheros raíz se crean ficheros "dinámicos" de proceso (en /proc) y de sistema (en /sys) así que no es buena idea copiar sin más.
cd hda3/ mkdir {boot,home,proc,sys,tmp} cp -v /bin /dev /etc /initrd.img /lib /media /mnt /root /sbin /usr /var /vmlinuz . -rfp
Algunos detalles...
Como hemos cambiado de particiones tocar hacer un pequeño cambio en los
ficheros del nuevo disco duro. En /etc/fstab
toca cambiar raíz y
home (hda2 y hda3) por hda3 y hda4. De la misma forma en
/boot/grub/menu.lst
hay que cambiar root=/dev/hda2
por
root=/dev/hda3
.
Grub
Por último falta instalar GRUB en el nuevo disco duro, en principio con
un grub-install /dev/hda
sobra pero esto no será posible si el
dispositivo es vía USB.
En tal caso o lo metemos de una vez en el ordenador (vía IDE o SATA) y arrancamos desde el viejo primero o, si no tenemos espacio como es el caso, "jugamos" un poco:
- Sustituimos el disco duro viejo por el nuevo
- Arrancamos un LiveCD cualquiera (Ubuntu mismo).
- Montamos el /boot del disco duro en /media/hda1.
grub-install /dev/hda --root-directory=/media/hda1
.
Por último se puede dar el caso al arrancar desde disco duro (me ha
pasado sólo 2 veces, supongo que depende del grub a instalar) que no
coja el menu.lst
y suelte un grub>
a pelo esperando comandos.
root (hd0,0) cat /boot/grub/menu.lst # Copia las líneas del menu.lst, por ejemplo: kernel /vmlinuz-2.6.23 root=/dev/hda3 ro vga=791 initrd /initrd.img boot
Lo único que cambia es que en el menu.lst pone "savedefault" en lugar del boot (no lo necesita). Una vez arrancado desde nuestro sistema operativo se instalará correctamente el grub:
grub-install /dev/hda update-grub
Conclusión
Requiere poco tiempo aunque parezca complejo. En realidad he tardado más en escribirlo que en hacerlo. Pero el tiempo que me ahorro en lugar de instalar un S.O nuevo y configurarlo (+ personalizarlo) es mucho, pero que mucho mayor.
Comentarios