Redimensionando discos y migrando a XFS

SeaJob

Sindominio.net

  seajob@sindominio.net

Copyright  2002 por Sindominio.net

A lo largo de este artculo, explico cmo he migrado mis particiones /boot, /
var, /usr y /home a XFS, adems de sacar 150 Mb de /boot y drselos a /var.

Para ello, usar tanto GNU/parted, como el paquete debian kernel-patch-xfs(o
una versin del parche descargada de sgi), y el paquete xfsprogs.

Espero que os sirva de ayuda, pero no quiere ser ni siquiera un HOWTO;es
simplemente una explicacin de cmo lo he hecho yo. Algo muy parecido os
debera funcionar, pero depende del estado actual de vuestro sistema.

Podeis encontrar este documento en otros formatos en mi pgina web.

-------------------------------------------------------------------------------

Situacin de partida

Tengo un sistema GNU/Linux, corriendo Debian Sid. Tengo ya compilado y
funcional un kernel 2.4.16 parcheado con soporte para XFS. Para parchear el
nucleo, he usado el paquete kernel-patch-xfs. Ms informacin podeis conseguir
en LinuxDoc, tanto en el kernel-howto como en el Linux + XFS HOWTO.

La situacin de las particiones de mi disco era la siguiente antes de empezar:

      Particin     Punto de montaje    Tamao     Sistema de ficheros
      /dev/hda2     /pruebas            2838 Mb    XFS
      /dev/hda6     /boot               250 Mb     ext2
      /dev/hda7     /var                250 Mb     ext2
      /dev/hda8     /usr                3752 Mb    ext2
      /dev/hda9     /home               6161 Mb    ext2
    
-------------------------------------------------------------------------------

Redimensionando /boot y /var

Haciendo un backup de la particin

Puesto que voy a jugar con la tabla de particiones, lo mejor es hacer un backup
de los datos. Tanto en /var como en /boot hay datos fundamentales para el
normal funcionamiento del sistema, as que nos debemos asegurar de que no
perdemos nada.

El mtodo que he utilizado, siguiendo la recomendacin del XML+Linux-HOWTO, es:

        [root@supra/]$ telinit 1
        [root@supra/]$ mkdir /otro-boot
        [root@supra/]$ cd /boot
        [root@supra/]$ tar lcf - .|(cd /otro-boot; tar xpvf -)
      

y algo similar para /var, con la diferencia de que ste lo vuelco en /pruebas.

Seguidamente, varo [1] /etc/fstab de forma que ya no monte /boot, y que monte
en /var /dev/hda2 (que es lo que est montado en /pruebas). Desmonto /boot,
elimino el directorio, y renombre /otro-boot como /boot. Por si acaso, ejecuto 
lilo, y reinicio de nuevo en modo monousuario.

-------------------------------------------------------------------------------

Usando GNU/parted

Ahora empiezo a usar parted, que me permite redimensionar las particiones. En
principio, no deberan de perderse datos, pero por si acaso tenemos el backup.

Ejecuto parted, y tras la informacin sobre la GPL, obtengo un prompt [2] , y
con el comando print obtengo la situacin actual de la tabla de particiones:

        (parted) print
        Disk geometry for /dev/hda: 0.000-19077,187 megabytes
        Disk label type: msdos
        Minor    Start       End     Type      Filesystem  Flags
        1          0,031   5004,624  primary   FAT         boot
        2       5004,624   7867,771  primary   xfs         
        3       7867,771   8056,032  primary   ext2        
        4       8056,033  19077,187  extended              
        5       8056,063   8534,531  logical   linux-swap  
        6       8534,562   8753,285  logical   ext2         
        7       8753,315   9005      logical   ext2        
        8       9005,216  12817,485  logical   ext2         
        9      12817,516  19077,187  logical   ext2        
        (parted)
      

El primer objetivo es reducir unos 150 Mb hda6 (/boot), y pasrselo a hda7 (/
var). [3]

Lo primero que debemos hacer es reducir hda6. La sintaxis es:

        resize n_particion Mb_inicial Mb_final
      

donde n_particion es el nmero de la particin (el nmero en la columna "Minor"
en la salida del print), Mb_inicial es el principio de la particin (expresado
en Mb, aunque sea un poco chocante; nos valen como gua los valores en la
columna "Start"), y Mb_final es el final de la particin (en Mb, la columna
"End").

Con estos datos, el comando que ejecuto es:

        (parted) resize 6 8534 8600
      

Ahora debemos seguir con la redimensin de hda7; existe un problema: parted no
es capaz de mover el punto de inicio de una particin ext2, as que tendremos
que hacer un poco de trampa: la eliminamos, y luego creamos una que ocupe todo
el espacio vaco: [4]

        (parted) rm 7
        (parted) mkpartfs logical ext2 8600 9005
      

Hay que andar con mucho cuidado con lo que acabo de hacer!!!. He eliminado la
particin 7, con lo que las particiones 8 y 9 pasan a ser la 7 y la 8, y la
nueva que creemos ser la 9. Si no reflejamos estos cambios en /etc/fstab antes
de reiniciar, tendremos que montar a mano las particiones... Yo no me d cuenta
y tuve que hacerlo...

Ahora nos queda revisar que los cambios hayan funcionado. Bien con fdisk, bien
con parted, o bien montandolos en /mnt, revisamos que las particiones estn
integras y con sus nuevos tamaos.

-------------------------------------------------------------------------------

Migrando las particiones a XFS

La parte ms complicada (y, sobre todo, la ms delicada) del proceso ya est
hecha; a partir de ahora, lo nico que me queda por hacer es ir haciendo
backups de las particiones (las que an no he hecho) e ir migrandolas de ext2 a
XFS.

-------------------------------------------------------------------------------

Migrando /dev/hda6 y /dev/hda9

Este es el caso ms sencillo. Tenemos 2 particiones en las que no tenemos datos
de inters (puesto que los hemos movido antes), por lo que no tenemos que hacer
mayores cambios.

El comando para migrar una particin a XFS es sencillo [5] :

        supra:~# mkfs.xfs -f /dev/hda6
        meta-data=/dev/hda6              isize=256    agcount=8, agsize=121993 blks
        data     =                 s      bsize=4096   blocks=975940, imaxpct=25
                 =                       sunit=0      swidth=0 blks, unwritten=0
        naming   =version 2              bsize=4096  
        log      =internal log           bsize=4096   blocks=1200
        realtime =none                   extsz=65536  blocks=0, rtextents=0
        supra:~# 
      

Hacemos lo mismo para /dev/hda9, y ya tenemos 2 particiones (ms la que
tenamos al empezar) en XFS.

Ahora tengo que devolver los datos que corresponden a cada particin, para lo
cual hago lo mismo que hice al principio para guardarlos:
          [root@supra/]$ telinit 1
          [root@supra/]$ mount -t xfs /dev/hda6 /mnt
          [root@supra/]$ cd /boot
          [root@supra/]$ tar lcf - .|(cd /mnt; tar xpvf -)
        
con lo que ya tengo los datos de /boot de vuelta en la particin original, y
esta reducida.

Me aseguro de que efectivamente los datos estn en /mnt, varo de nuevo /etc/
fstab para que monte /dev/hda6 en /boot al arrancar, dejando una linea como
esta:
          /dev/hda6       /boot     xfs      rw
        
Renombro el directorio /boot a /boot-viejo, y creo de nuevo /boot. Monto el
nuevo. Por si acaso, ejecuto /sbin/lilo de nuevo [6].

Hago otro tanto para /dev/hda9 y /var.

-------------------------------------------------------------------------------

Migrando /usr y /home

Estos 2 sistemas de ficheros no suponen ninguna dificultad especial, puesto que
no hay que redimensionarlos. Lo nico que tengo que hacer es mover los datos a
otra particin, mover el punto de montaje a esa, darle formato a la original y
devolver a su sitio los datos. Adems, cuento con una particin vaca, y que ya
est formateada con XFS.

 1. Los datos que tena en /home no me entraban en la particin libre. Tampoco
    fue mucho problema, puesto que en /usr s entraban. As que mov datos de /
    usr al espacio libre, luego los de /home a /usr, desmont /home, lo
    formate, lo volv a montar, repuse los datos, y luego hice lo mismo con /
    usr.
   
 2. Como juego con /usr, es posible que en algn momento me quede sin la gran
    mayora de las aplicaciones (vi o GNU/Emacs). De hecho, me pas :( Esto no
    es necesario, pero en el caso de que suceda con cambiar un par de nombres y
    hacer un montaje a mano todo debera volver a estar accesible..
   
-------------------------------------------------------------------------------

Migrando /

Esto an no lo he hecho, pero tampoco debera ser muy dificil: slo tengo que
mover todos los datos a la partcin libre como ya he contado, cambiar /etc/
fstab, reiniciar, formatear, recuperar los datos a la particin, volver a
cambiar /etc/fstab y volver a reiniciar...

Supongo que en cuanto tenga un rato lo har...

Notas

[1]  Antes de tocar /etc/fstab, es importante verificar que efectivamente los  
     archivos estn donde los hemos querido poner.                             
                                                                               
[2]  El listado es aproximado, puesto que lo he sacado despues de hacer los    
     cambios...                                                                
                                                                               
[3]  **Creo** que slo lo puedo hacer porque son particiones contiguas, aunque 
     si no lo fueran podra hacer algunas cosas... pero sera bastante ms     
     largo.                                                                    
                                                                               
[4]  Es posible que entre el rm y el mkpartfs tengamos que reiniciar el equipo,
     en el caso de que parted se queje de que la particin est en uso. Al     
     menos en mi caso, ha sido la nica forma de hacerlo.                      
                                                                               
[5]  De nuevo, los datos no son exactos.                                       
                                                                               
[6]  Yo tom una medida extra de precaucin: cree una entrada nueva en /etc/   
     lilo.conf apuntando a una imagen en /boot-viejo antes de ejecutar /sbin/  
     lilo. No hizo falta, y de hecho no estoy seguro de que hubiese funcionado,
     pero no est de ms...                                                    

