<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" >

<article id="principio" lang="es">
  <artheader>
    <title>Redimensionando discos y migrando a XFS</title>
    <author>
      <firstname>SeaJob</firstname>
      <affiliation>
	<orgname>Sindominio.net</orgname>
	<address>
	  <email>seajob@sindominio.net</email>
	</address>
      </affiliation>
    </author>
    <copyright>
      <year>2002</year>
      <holder>Sindominio.net</holder>
    </copyright>
    <legalnotice>
      <para>
	Este documento no ofrece ninguna garantía. Pues distribuirlo y utilizarlo según los términos de la <ulink url="http://www.gnu.org/licenses/fdl.html">FDL</ulink>.
      </para>
    </legalnotice>
    <abstract>
      <para>
	A lo largo de este artículo, explico cómo he migrado mis particiones <filename>/boot</filename>, <filename>/var</filename>, <filename>/usr</filename> y <filename>/home</filename> a XFS, además de sacar 150 Mb de <filename>/boot</filename> y dárselos a <filename>/var</filename>.
      </para>
      <para>
	Para ello, usaré tanto <application>GNU/parted</application>, como el paquete debian <application>kernel-patch-xfs</application>(o una versión del parche descargada de sgi), y el paquete <application>xfsprogs</application>.
      </para>
      <para>
	Espero que os sirva de ayuda, pero no quiere ser ni siquiera un HOWTO;es simplemente una explicación de cómo lo he hecho yo. Algo muy parecido os debería funcionar, pero depende del estado actual de vuestro sistema.
      </para>
      <para>
	Podeis encontrar este documento en otros formatos en <ulink url="http://www.sindominio.net/~seajob/articulos/migrando_a_xfs/">mi página web</ulink>.
      </para>
    </abstract>

  </artheader>
  
  
  <sect1 id="cond-iniciales">
    <title>Situación de partida</title>
    <para>
      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. Más información podeis conseguir en <ulink url="http://www.linuxdoc.org">LinuxDoc</ulink>, tanto en el kernel-howto como en el Linux + XFS HOWTO.
    </para>
    <para>
      La situación de las particiones de mi disco era la siguiente antes de empezar:
    </para>
    <programlisting>
      Partición     Punto de montaje    Tamaño     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
    </programlisting>
  </sect1>
  
  <sect1 id="redimensionar">
    <title>Redimensionando <filename>/boot</filename> y <filename>/var</filename></title>
    <sect2 id="backup">
      <title>Haciendo un backup de la partición</title>
      <para>
	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.
      </para>
      <para>
	El método que he utilizado, siguiendo la recomendación del XML+Linux-HOWTO, es:
      </para>
      <programlisting>
	[root@supra/]$ telinit 1
	[root@supra/]$ mkdir /otro-boot
	[root@supra/]$ cd /boot
	[root@supra/]$ tar lcf - .|(cd /otro-boot; tar xpvf -)
      </programlisting>
      <para>
	y algo similar para <filename>/var</filename>, con la diferencia de que éste lo vuelco en <filename>/pruebas</filename>.
      </para>
      <para>
	Seguidamente, varío
	<footnote>
	  <para>
	    Antes de tocar <filename>/etc/fstab</filename>, es importante verificar que efectivamente los archivos están donde los hemos querido poner.
	  </para>
	</footnote>
	<filename>/etc/fstab</filename> de forma que ya no monte <filename>/boot</filename>, y que monte en <filename>/var</filename> <filename>/dev/hda2</filename> (que es lo que está montado en <filename>/pruebas</filename>). Desmonto <filename>/boot</filename>, elimino el directorio, y renombre <filename>/otro-boot</filename> como <filename>/boot</filename>. Por si acaso, ejecuto <command>lilo</command>, y reinicio de nuevo en modo monousuario.
      </para>
    </sect2>
    <sect2>
      <title>Usando GNU/parted</title>
      <para>
	Ahora empiezo a usar parted, que me permite redimensionar las particiones. En principio, no deberían de perderse datos, pero por si acaso tenemos el backup.
      </para>
      <para>
	Ejecuto <command>parted</command>, y tras la información sobre la GPL, obtengo un prompt
	<footnote>
	  <para>
	    El listado es aproximado, puesto que lo he sacado despues de hacer los cambios...
	  </para>
	</footnote>
	, y con el comando <command>print</command> obtengo la situación actual de la tabla de particiones:
      </para>
      <programlisting>
	(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)
      </programlisting>	
      <para>
	El primer objetivo es reducir unos 150 Mb hda6 (/boot), y pasárselo a hda7 (/var).
	<footnote>
	  <para>
	    **Creo** que sólo lo puedo hacer porque son particiones contiguas, aunque si no lo fueran podría hacer algunas cosas... pero sería bastante más largo.
	  </para>
	</footnote>
      </para>
      <para>
	Lo primero que debemos hacer es reducir hda6. La sintaxis es:
      </para>
      <programlisting>
	resize n_particion Mb_inicial Mb_final
      </programlisting>
      <para>
	donde n_particion es el número de la partición (el número en la columna "Minor" en la salida del <command>print</command>), Mb_inicial es el principio de la partición (expresado en Mb, aunque sea un poco chocante; nos valen como guía los valores en la columna "Start"), y Mb_final es el final de la partición (en Mb, la columna "End").
      <para>
	Con estos datos, el comando que ejecuto es:
      </para>
      <programlisting>
	(parted) resize 6 8534 8600
      </programlisting>
      <para>
	Ahora debemos seguir con la redimensión de <filename>hda7</filename>; existe un problema: <command>parted</command> no es capaz de mover el punto de inicio de una partición ext2, así que tendremos que hacer un poco de trampa: la eliminamos, y luego creamos una que ocupe todo el espacio vacío:
	<footnote>
	  <para>
	    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 partición está en uso. Al menos en mi caso, ha sido la única forma de hacerlo.
	  </para>
	</footnote>
      </para>
      <programlisting>
	(parted) rm 7
	(parted) mkpartfs logical ext2 8600 9005
      </programlisting>
      <para>
	<emphasis>Hay que andar con mucho cuidado con lo que acabo de hacer!!!</emphasis>. He eliminado la partición 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...
      </para>
      <para>
	Ahora nos queda revisar que los cambios hayan funcionado. Bien con <command>fdisk</command>, bien con <command>parted</command>, o bien montandolos en <filename>/mnt</filename>, revisamos que las particiones estén integras y con sus nuevos tamaños.
      </para>
    </sect2>
  </sect1>
  <sect1>
    <title>Migrando las particiones a XFS</title>
    <para>La parte más complicada (y, sobre todo, la más 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 aún no he hecho) e ir migrandolas de <acronym>ext2</acronym> a <acronym>XFS</acronym>.
    </para>
    <sect2>
      <title>Migrando <filename>/dev/hda6</filename> y <filename>/dev/hda9</filename></title>
      <para>
	Este es el caso más sencillo. Tenemos 2 particiones en las que no tenemos datos de interés (puesto que los hemos movido antes), por lo que no tenemos que hacer mayores cambios.
      </para>
      <para>
	El comando para migrar una partición a <acronym>XFS</acronym> es sencillo
	<footnote>
	  <para>
	    De nuevo, los datos no son exactos.
	  </para>
	</footnote>
:
      </para>
      <programlisting>
	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:~# 
      </programlisting>
      <para>
	Hacemos lo mismo para <filename>/dev/hda9</filename>, y ya tenemos 2 particiones (más la que teníamos al empezar) en <acronym>XFS</acronym>.
      </para>
      <para>Ahora tengo que devolver los datos que corresponden a cada partición, para lo cual hago lo mismo que hice al principio para guardarlos:
	<programlisting>
	  [root@supra/]$ telinit 1
	  [root@supra/]$ mount -t xfs /dev/hda6 /mnt
	  [root@supra/]$ cd /boot
	  [root@supra/]$ tar lcf - .|(cd /mnt; tar xpvf -)
	</programlisting>
	con lo que ya tengo los datos de <filename>/boot</filename> de vuelta en la partición original, y esta reducida.
      </para>
      <para>
	Me aseguro de que efectivamente los datos están en <filename>/mnt</filename>, varío de nuevo <filename>/etc/fstab</filename> para que monte <filename>/dev/hda6</filename> en <filename>/boot</filename> al arrancar, dejando una linea como esta:
	<programlisting>
	  /dev/hda6       /boot     xfs      rw
	</programlisting>
	Renombro el directorio <filename>/boot</filename> a <filename>/boot-viejo</filename>, y creo de nuevo <filename>/boot</filename>. Monto el nuevo. Por si acaso, ejecuto <command>/sbin/lilo</command> de nuevo
	<footnote>
	  <para>
	    Yo tomé una medida extra de precaución: cree una entrada nueva en <filename>/etc/lilo.conf</filename> apuntando a una imagen en <filename>/boot-viejo</filename> antes de ejecutar <command>/sbin/lilo</command>. No hizo falta, y de hecho no estoy seguro de que hubiese funcionado, pero no está de más...
	  </para>
	</footnote>.
      </para>
      <para>
	Hago otro tanto para <filename>/dev/hda9</filename> y <filename>/var</filename>.
      </para>
    </sect2>
    <sect2>
      <title>Migrando <filename>/usr</filename> y <filename>/home</filename></title>
      <para>
	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 partición, mover el punto de montaje a esa, darle formato a la original y devolver a su sitio los datos. Además, cuento con una partición vacía, y que ya está formateada con <acronym>XFS</acronym>.
      </para>
      <para>
	<orderedlist>
	  <listitem>
	    <para>
	      Los datos que tenía en <filename>/home</filename> no me entraban en la partición libre. Tampoco fue mucho problema, puesto que en <filename>/usr</filename> sí entraban. Así que moví  datos de <filename>/usr</filename> al espacio libre, luego los de <filename>/home</filename> a <filename>/usr</filename>, desmonté <filename>/home</filename>, lo formateé, lo volví a montar, repuse los datos, y luego hice lo mismo con <filename>/usr</filename>.
	    </para>
	  </listitem>
	  <listitem>
	    <para>
	      Como juego con <filename>/usr</filename>, es posible que en algún momento me quede sin la gran mayoría de las aplicaciones (<command>vi</command> o <command>GNU/Emacs</command>). 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 debería volver a estar accesible..
	    </para>
	  </listitem>
	</orderedlist>
      </para>
    </sect2>
    <sect2>
      <title>Migrando <filename>/</filename></title>
      <para>
	Esto aún no lo he hecho, pero tampoco debería ser muy dificil: sólo tengo que mover todos los datos a la partción libre como ya he contado, cambiar <filename>/etc/fstab</filename>, reiniciar, formatear, recuperar los datos a la partición, volver a cambiar <filename>/etc/fstab</filename> y volver a reiniciar...
      </para>
      <para>
	Supongo que en cuanto tenga un rato lo haré...
      </para>
    </sect2>
  </sect1>
</article>
