Cómo cambiar el sistema de archivos de «/» y no morir en el intento

Otro excelente tutorial que encontramos en la sección de Tutoriales de nuestro Foro, de la mano de SuperYo

Ayer descubrí por las malas una de las «features» del sistema de archivos btrfs. Se trata de que por motivos que desconozco de su funcionamiento, btrfs tiende a llenar más el disco de lo que suelen indicar comandos como dd o los medidores de llenado de disco de los gestores de archivos habituales.

Cómo saber cuánto espacio está ocupando tu sistema de archivos con btrfs

Quien tenga un sistema de archivos con btrfs podrá saber cuánto espacio adicional están ocupando sus datos escribiendo en consola (como root creo):

btrfs filesystem show /

(Sustituir / por otro punto de montaje si se que quisiera saber el espacio ocupado en otra partición btrfs)

En una partición grande este llenado adicional no supone un gran problema, pues es muy poco espacio comparado con el total. Pero en mi caso, donde / tiene 22GB (ocupa un ssd cache), se me llenó el disco duro con 8 GB libres, rompiendo las bases de datos rpm e inutilizando por ello el gestor de paquetes. Por lo que me vi obligado a formatear con otro sistema de archivos.

Pero no quería reinstalar. Está claro que se pueden conservar fácilmente los datos de /home, pero uno tiene muchos programas instalados en / y muchas configuraciones que también residen allí, así que decidí simplemente conservar la instalación pero cambiar el sistema de archivos.

La razón por la que escribo esto es porque no encontré nada de documentación acerca de cómo proceder en estos casos. Supongo que la mayoría de gente se conforma con reinstalar.

Tuve que estar como unas 7 horas buscando y rebuscando información en manuales en inglés que en realidad tenían que ver con otras cosas y juntando piezas intuitivamente; prueba y error todo el rato, reiniciando decenas de veces para comprobar que cada cosa que intentaba fracasaba una tras otra. Cuando el proceso en realidad no hubiera sido para tanto de haber dispuesto de un manual dedicado a ello.

Consideraciones a tener en cuenta para cambiar el sistema de archivos de «/»

Primero: Yo realicé este procedimiento en Fedora. Supongo que vale igual para todas las distribuciones que compartan principalmente el tener como gestor de arranque GRUB2.

Segundo: Este proceso es difícil para el usuario común (los que lean esto y piensen que es una chorrada sabed que no sois usuarios comunes) La gente suele tener cosas mejores que hacer que cambiar el sistema de archivos de la partición raíz. Si no sabéis seguir este manual corréis el riesgo de perder vuestra instalación, y si conseguís llevarlo a cabo descubriréis que el cambio de rendimiento no es tan espectacular (Bueno, para algunos sí, pero no sois usuarios comunes) Yo en concreto lo hice por necesidad, aunque he de reconocer que soy de los que le ponen que su ordenador inicie un segundo más rápido.

Tercero: Como este procedimiento no es para usuarios comunes, supondré que el lector posee algunos conocimientos de GNU/Linux y que no le va a dar pereza buscar más información.

Procedimiento para cambiar el sistema de archivos de «/»

Ya queráis cambiar el sistema de archivos por necesidad o por aburrimiento, este es el procedimiento:

1.- Es obvio que para que nuestro nuevo sistema de archivos funcione tenemos que tener las herramientas que nos ayuden a manejarlo, así que es lo primero que haremos. El sistema de archivos que escogí por cierto, fue xfs, así que me tocó instalar «xfsprogs» y «xfsdump». Vosotros instalaréis lo que os toque en función del sistema de archivos que queráis usar.

2.- Iniciar desde un livecd/usb y copiar todo el contenido de la partición raíz a otra partición o disco. El método que elijáis no importa, pero lo suyo es hacerlo con privilegios de root, para no encontrarse con archivos o directorios con permisos especiales.

3.- El paso donde propiamente se formatea «/» con el sistema de archivos que prefiramos. Hay multitud de métodos, elegid el que más os guste.

4.- Se restaura la copia que hicimos de la partición raíz a la partición recién formateada.

5.- Es el momento en el que el usuario tiene que empezar a poner de su parte. Al formatear la partición se modifica un identificador que usa el sistema operativo para saber qué partición tiene que montar. Esto es el UUID, y necesitamos conocer ese código.

Hay múltiples métodos, pero por ejemplo, en «Gparted», lo sabremos haciendo click derecho sobre la nueva partición «/» y haciendo click en «Información». Ese código lo copiamos y es cuando nos vamos a editar el archivo /etc/fstab:

UUID=36f3ce91-5138-4293-8571-b5b43f6b4646          /            xfs        defaults,noatime,discard,nobarrier

Esto es un ejemplo en el que aparece la línea que corresponde a mi flamante nueva partición raíz. El código que aparece a la derecha de UUID= es lo que sustituiremos por nuestro UUID.

Una vez que lo hayamos hecho, por supuesto tenemos que indicar el nuevo sistema de archivos de nuestra partición, xfs en mi caso o sustituidla por la vuestra en el caso de que sea otro sistema de archivos. También tenéis que poner las nuevas opciones de montaje: Si no sabéis que poner, poned «defaults»; noatime aumenta el rendimiento al disminuir las escrituras, discard disminuye las escrituras en los discos ssd, aumentando su longevidad.

6.- Aquí empieza lo jodido de verdad y es donde me atasqué. En realidad no es tan difícil, pero no hay casi documentación a partir de este punto.

Necesitamos reconstruir el menú de Grub para que inicie correctamente el sistema operativo. No sabría cómo hacerlo a mano, lo podéis intentar como yo lo hice (cambiado UUIDs y tal) pero lo normal será que el inicio del SO se detenga en una agradable y esperanzadora «emergency shell»

Afortunadamente, grub2 posee la herramienta «grub2-mkconfig» que realiza automáticamente esta tarea tomando como referencia las características del sistema donde se esté ejecutando. El problema es que, mira por donde, el sistema donde se está ejecutando no es el sistema del destino, y este último esta temporalmente fuera de servicio.

Por ello necesitamos hacer chroot y montar una serie de particiones especiales para ejecutar esta herramienta, sin las cuales no funciona. El procedimiento para hacer esto está mal explicado en casi todos sitios (lo cual no significa que no lo sepan hacer, si no que se piensan que somos supercracks de la computación)

Por suerte aquí: http://askubuntu.com/questions/28099/ho … ll-kernels encontré una explicación cojonudísima acerca del tema, que paso a resumir y a traducir:

  1. Montar / y /dev:
mount /dev/sda1 /mnt
mount --bind /dev /mnt/dev

Donde «sda1» se sustituye por la correspondiente a la partición raíz, si no es «sda1»

  1. Montar /boot y /boot/efi , este último si teníamos partición EFI.
mount /dev/sda2 /mnt/boot

Donde «sda2» se sustituye por la correspondiente a la partición boot, si no es «sda2»

El montaje de efi no viene en el link de arriba, es cosa mía pero en este caso lo necesitaba. Si no tenéis partición EFI, no hagáis caso de esto.

mount /dev/sda3 /mnt/boot/efi

Donde «sda3» se sustituye por la correspondiente a la partición boot, si no es «sda3»

  1. Chroot y algunas cosillas más, que en realidad lo único que sé de esas cosillas es que son necesarias:
chroot /mnt
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
export HOME=/root
export LC_ALL=C

Esto es añadido mío, puede ser necesario para una cosa más adelante:

mount -t tmpfs tmpfs /run

7.- grub2-mkconfig

Pues es el momento estrella casi. Tenemos que buscar un archivo que se llama «grub.cfg» dentro de la partición boot. En mi caso su ruta es /boot/efi/EFI/fedora/grub.cfg

Cuando lo hayamos encontrado, corremos en el entorno chroot:

grub2-mkconfig -o /ruta/a/grub.cfg

Y ya tenemos el menú de grub listo por fin.

Este punto según su autor no se debe tomar en cuenta. Salten directamente al punto 9

8.- Regenerar el initramfs.

Este paso creo que es necesario, pero no estoy estrictamente seguro. No obstante, basta con reinstalar el kernel que queramos o con ejecutar:

dracut --force /ruta/al/archivo/initramfs/que/queramos/sustituir

por ejemplo:

dracut --force /boot/initramfs-3.15.9-200.fc20.x86_64.img

Por supuesto, todo esto dentro del entorno chroot. (y si no, vuelta a la casilla de salida, estoo… a la «emergency shell»)

PD: Se me olvidó poner lo que hay que hacer para tener acceso a Internet en el entorno chroot, por si queréis reinstalar el kernel. En el link de arriba se explica muy bien: Tenéis que abrir una nueva terminal y copiar estos archivos:

cp /mnt/etc/hosts /mnt/etc/hosts.old
cp /etc/hosts /mnt/etc/hosts
cp /etc/resolv.conf /mnt/etc/resolv.conf

9.- Obtener acceso a internet:

Simplemente hay que copiar los siguientes archivos, gráficamente o mediante consola, en este último caso fuera del entorno chroot. Se puede hacer desde otra terminal o bien saliendo del entorno chroot, y luego volviendo a entrar.

cp /mnt/etc/hosts /mnt/etc/hosts.old
cp /etc/hosts /mnt/etc/hosts
cp /etc/resolv.conf /mnt/etc/resolv.conf

10.- Reinstalar el kernel:

Reinstalamos el kernel dentro del entorno chroot con nuestro gestor de paquetes

11.- REINICIAAAR: :DD

Este punto debería de ser el final para distribuciones «normales», para distribuciones con SELinux, como es mi caso, la cosa se alargó un poco más.

A pesar de que el inicio llegaba hasta el final y trataba de iniciar el sistema gráfico, no lo hacía, y cuando trataba de loguearme como usuario o como root me soltaba «permission denied».

Leí algo al respecto y según una persona el problema podía ser de selinux, y sugirió poner selinux=0 al final de una línea de arranque en grub.cfg, de esta manera:

menuentry 'Fedora, with Linux 3.15.9-200.fc20.x86_64' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.15.9-200..fc20.x86_64-advanced-36f3ce91-5138-4293-8571-b5b43f6b4646' {
load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod ext2
        set root='hd1,gpt2'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt2 --hint-efi=hd1,gpt2 --hint-baremetal=ahci1,gpt2  1cd04509-ab7c-4074-8bab-e170c29fe08e
        else
          search --no-floppy --fs-uuid --set=root 1cd04509-ab7c-4074-8bab-e170c29fe08e
        fi
        linuxefi /vmlinuz-3.15.9-200.fc20.x86_64 root=UUID=36f3ce91-5138-4293-8571-b5b43f6b4646 ro rd.md=0 rd.lvm=0 rd.dm=0 vconsole.keymap=es  rd.luks=0 vconsole.font=latarcyrheb-sun16 rhgb quiet selinux=0
initrdefi /initramfs-3.15.9-200.fc20.x86_64.img

Fijaos en la penúltima línea a la derecha del todo.

Yo no lo hice directamente, si no que simplemente edité la entrada de arranque en el propio menú de grub, de manera que fuese una modificación temporal, creo que se hacía pulsando «c» o «e», en el menú de grub os lo pone.

Pues hacemos eso y reiniciamos, o continuamos con el arranque.

12.- La luz al final del túnel.

Si no pudimos en el paso anterior directamente, es en este penúltimo paso donde podremos acceder a nuestro escritorio habitual. Un brindis por nuestra gran hazaña, pero si SELinux ha fastidiado, aún no hemos acabado.

Tenemos que volver a editar el grub.cfg para quitar el «selinux=0» o simplemente volver a reiniciar normalmente si lo que hemos hecho ha sido editar la entrada en el menú de grub. El caso es que reiniciamos con SELinux activado.

Entonces al terminar el inicio sale algo de que tiene que reetiquetar la política de SELinux targeted, le dejamos solito y al terminar se reiniciará.

Veremos que nuestro sistema se iniciará, mostrando nuestro escritorio habitual, con SELinux activado, nuestro sistema de archivos cambiado y todos nuestros programas plenamente funcionales.

Este es el fin del manual, espero que os sirva big_smile

ACTUALIZACIÓN: Cuando hice esto por primera vez no tenía ni idea e hice el paso de regenerar el initramfs y luego reinstalé el kernel y fue todo muy lioso y al final funcionó casi sin saber por qué, y di ambas opciones por igual de buenas, sin embargo regenerar el initramfs no sirve y lo he tachado. Lo único que vale es reinstalar el kernel (intuyo que los paquetes kernel y kernel-core en Fedora) y así he modificado el manual.

Y también quiero añadir que para cambiar el formato del sistema de archivos de la partición /home son necesarios los mismos pasos, no sé si lo de selinux es necesario, pero si no funciona con selinux se quita temporalmente y ya está.

Imagen destacada tomada de acá.


21 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   anonimo dijo

    Me parece que a btrfs le faltan un par de años para que madure y que cuando falle haya herramientas para recuperase del susto sin perder datos…ext4 sigue siendo la posta.
    Respecto a manejarse con chroot, en las guias de gentoo tienes muy bien explicado:
    https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base/es

    También uso dracut para generar el initramfs ya que necesito el módulo mdadm para grub2 sin el cual grub2 no me encuentra la particion /dev/md0 del /boot.

    Me habían regalado un disco nuevo SSD de 120G, pero me resiste a usarlo, es tecnologia muy nueva y poco madura, no tengo ganas de andar reinstalando el sistema cada vez que se le corrompe una celda al SSD.

    He instalado desde cero en raid 1 en dos discos de 1T cada uno, alla por abril del 2012…esta por cumplir 3 años mi gentoocito…jeje

    # genlop -t gentoo-sources |head -n3
    * sys-kernel/gentoo-sources
    Wed Apr 11 23:39:02 2012 >>> sys-kernel/gentoo-sources-3.3.1

    Este es el procedimiento que uso para crear el disco de ram inicial, agregarle el tema gráfico del bootsplash
    y regenerar las entradas del grub2.

    # mount /boot
    # dracut –hostonly » 3.19.3-gentoo –force
    # splash_geninitramfs –verbose –res 1920×1080 –append /boot/initramfs-3.19.3-gentoo.img emerge-world
    # grub-mkconfig -o /boot/grub/grub.cfg

    Gracias por compartir tu experiencia en btrfs.

  2.   Iván Barra dijo

    Vaya amigo Elav, tremenda entrada al blog y gracias al camarada «SuperYO» del foro. La verdad es que nunca me ha pasado algo parecido, ni en lo absoluto, pero nunca está demás tener un mega tutorial como este.

    En lo personal no encuentro BTRFS inmaduro en lo absoluto, XFS no lo he utilizado, se que CentOS 7 lo trae, pero hasta hoy, no me ha tocado montar un servidor nuevo con el, así que por el momento no le veo gracia ojearlo. En OpenSUSE uso BTRFS, pero no me ha dado problemas en lo absoluto, ni siquiera en discos SSD. Lo que si me ha costado un mundo poder hacer es un disco SSD-Cache en Unix, de verdad que ha sido tremendo problema, la documentación de Intel la encuentro muy poco clara y compleja. de hecho tengo un tema abierto en el foro y en otros lugares, pero al parecer nadie se ha topado con el tema o bien, simplemente dejan los discos SSD-cache que traen los laptops para otra cosa, de pronto los ponen como SWAP para no alterar la rapidez del sistema, vaya a saber uno.

    Quizás una entrada con respecto a los tipos de File System existentes en Unix sería espectacular, poner las ventajas de cada uno, no se, otro también sería bueno con respecto a SELinux, dado que tanto se habla de la seguridad, pero leo un tutorial en internet y en todas partes ponen «SELinux=Disabled», solo en «alcancelibre» dan tips de como permitir programas a través de el.

    Ya, no me alargo más.

    Gracias por la entrada y Saludos.

  3.   sinnerman dijo

    Gracias por el tip,hombre,pero Todas las caracteristicas de btrfs la tiene zfs que para usarlo en linux debe levantarse el módulo en el kernel,pero en freebsd viene por defécto y no dá ni un sólo problema,lo recomiendo,ya que btrfs aún tiene muchos ‘asuntillos’,por decirlo así.

  4.   Azazel dijo

    Soy yo o note a elav con un acento muy español hoy.

    1.    Giskard dijo

      Yo también lo noté. Quién sabrá la razón de eso.

    2.    elav dijo

      Jajajaja.. es que el artículo no es mío.. no me digan que no leyeron el primer párrafo jajaja.

      1.    Azazel dijo

        Ahora que lo dices… No. Ni cuenta me e dado.

  5.   SuperYO dijo

    Hola. Si veis la entrada del foro veréis que el punto 8 está tachado entero porque no vale, lo que hay que hacer es reinstalar el kernel y así lo puse cuando lo edité 😛

    Lo que pasa es que cuando hice esto por primera vez no sabía muy bien lo que hacía y probé de todo así que me confundí 😛

  6.   SuperYO dijo

    Y continuo, lo que pasa es que no se ha puesto aún mi anterior comentario 😛

    Por eso si no se puede tachar nada en la web lo suyo sería borrar el punto 8 para confundir al personal. De cualquier forma lo peor que puede pasar regenerando el initramfs el lo que yo conseguí: que no pase absolutamente nada, ni bueno ni malo, con lo cual tampoco es tan grave, pero es un paso inútil.

    1.    Hugo dijo

      Buen artículo el que has compartido, mediante tu experiencia he aprendido algunas cosas nuevas 😉
      Apuesto cualquier cosa a que la sensación de victoria que sentiste al lograr tu objetivo superó con creces los tropiezos. 😉

  7.   Mario Dannan dijo

    El open source es muy femenino: no es para ansiosos.
    Si uno le dedica atención, pasión y paciencia para profundizar en sus encantos, éste nos entrega lo mejor de sí mismo.

  8.   weyland-yutani dijo

    Que buen post se ha marcado el colega superYO. Así da gusto.

  9.   jamin-samuel dijo

    Porque XFS en lugar de ext4 ??

    🙂

    1.    Brutico dijo

      Ext4 se esta quedando anticuando dicen… y para escribir datos de gran tamaño mejor xfs.

      Sobre el autor del post nunca vi que el jurnal btrfs llene la partición /
      Me pregunto es que creo que es porque invernas el pc creo yo, por que a mí no me ha pasado nunca! con la de distros que uso con un ssd samsung pro y jamás me paso eso.

      1.    SuperYO dijo

        No es algo que se note en particiones medianas o grandes, pero en una partición de 20GB BTRFS te puede llenar la partición raíz con casi la mitad de espacio libre en realidad.

        Y no era el único problema que tenía. En cuanto a lectura iba el disco más o menos correcto pero las instalaciones y actualizaciones eran muy lentas para un disco ssd y un disco duro normal, lo cual era una molestia importante.

        Yo le echo la culpa a la únidad híbrida que tengo en el portátil, porque en los demás sitios donde tengo instalado Fedora con btrfs no tengo problema ninguno y va rápido y bien, salvo en mi ordenador principal que lleva unidad híbrida como he comentado. Ahora con ambas particiones con XFS se comporta mucho mejor este ordenador.

  10.   Derpie dijo

    ¿Desde cuando esta ese 10 minutos con DesdeLinux?, apenas y me doy cuenta que esta ahi o_o

    1.    elav dijo

      Hace un rato 😀

  11.   Azulejo dijo

    Creo que será raro, pero estuve investigando sobre esto por mucho tiempo, me dio tanta pereza que no quise animarme. Gracias por la info, quiero pasar mi /home a xfs y la / a btfrs

  12.   monk dijo

    Gracias por el articulo, muy interesante.

    Critica fuera de contenido:
    Lo he mencionado en otros posts y creo que en un blog como este, colaborativo, donde participa todo tipo de gente no se tendría que permitir poner imágenes como la que has puesto en la cabecera del post. No por que salga una chica en bikini si no porque se utiliza (seguramente sin querer) de una forma sexista.

    Nadie esta criticando que salga una chica o una chica en bikini, incluso desnuda. Si tiene sentido, y alguien quiere hacer un post sobre los cuerpos y internet, o sexualidad y internet o algo así… me parece genial.

  13.   Jorgicio dijo

    Se ve bueno, pero… ¿Por qué hay que reinstalar el kernel? No entiendo.

  14.   Zjaume dijo

    La verdad es que después de haber instalado Arch un par de veces ya me hacía una idea de por donde irían los tiros, yo llevo 1 mes con el nuevo pc con Arch i un ssd formateado con ext4, me estoy pensando en pasar a btrfs pero tampoco me convence porque después de ver algunos test de rendimiento en Phoronix tampoco queda muy claro que el rendimiento sea mejor y aún así con la Wiki de arch ya he toqueteado todo lo que he podido para optimizar el rendimiento