Cómo convertir sistemas de ficheros en Linux

Vemos cómo convertir sistemas de ficheros en sistemas GNU/Linux. Aunque los pasos que veremos más adelante se deben realizar con precaución y sobre sistemas de ficheros de los cuales tengamos copia de seguridad previa.

Para ello vamos a ver primero en que consisten los sistemas de ficheros clásicos de GNU/Linux, como son ext2, ext3 y ext4.

Convertir sistemas de ficheros en GNU/Linux

¿Qué son los sistemas ext2, ext3 y ext4?

Se tratan de sistemas de archivos para el núcleo de Linux.  Existen diferencias entre ellos, que básicamente son las siguientes:

  • Sistema ext2: Es el sistema de ficheros más antiguo de los tres y tiende a estar en desuso. Su principal desventaja es que no implementa el registro de diario o Journaling, que sí poseen las versiones posteriores ext3 y ext4. Utiliza una tabla donde se almacenan los i-nodos. Un i-nodo almacena información del archivo, tanto la ruta, el tamaño y la ubicación. En cuanto a la ubicación, es una referencia a un sector del disco donde están todas y  cada una de las referencias a los bloques del archivo fragmentado. Estos bloques son de tamaño especificable cuando se crea el sistema de archivos, desde los 512 bytes hasta los 4 Kib. Este sistema tiene un máximo de 2 TB por archivo, y de 4 para la partición. Para más información: Ext2 en Wikipedia
  • Sistema ext3: Se trata de un sistema de archivos con registro de diario o Journaling. Hasta hace no mucho era el sistema de ficheros más utilizado en GNU/Linux, hasta la llegada de su reemplazo más moderno ext4. Aunque su velocidad y escalabilidad es menor que otros sistemas de ficheros competidores como JFS, Reiserfer FS o XFS, tiene la ventaja de actualizar de ext2 a ext3, sin perder los datos almacenados, ni tener que formatear el disco. Tiene un menor consumo de CPU y está considerado más seguro que otros sistemas de ficheros, dado su relativa sencillez y su mayor tiempo de uso.  Como principales diferencias con su antecesor encontramos: el registro de diario, índices de árbol para directorios que ocupan múltiples bloques y crecimiento lineal. Puede albergar ficheros hasta 2 TB de tamaño, y 32 para la partición. Para más información: Ext3 en Wikipedia
  • Sistema ext4: Se trata de la versión más moderna de los tres. Se anunció en octubre del 2006, como una mejora para ext3. Entre sus principales ventajas encontramos, que soporta volúmenes de hasta 1024 PiB, soporte añadido para extent, utiliza menos CPU y mejora la velocidad de lectura y escritura. Puede llegar a trabajar con ficheros de hasta 16 TB. Ext4 en Wikipedia

Ejemplos de conversión de sistemas de ficheros

Vamos a partir de la base que tenemos tres sistemas de ficheros de prueba, cada uno de ellos utiliza  un sistema diferente:

root@servtest:~# egrep fstest /etc/fstab
/dev/fstest/fs_1        /mnt/fs1        ext2    defaults        0       2
/dev/fstest/fs_2        /mnt/fs2        ext3    defaults        0       2
/dev/fstest/fs_4        /mnt/fs3        ext4    defaults        0       2
root@servtest:~# df -h | grep -i fstest
/dev/mapper/fstest-fs_1   4,0G    24K  3,8G   1% /mnt/fs1
/dev/mapper/fstest-fs_2   3,9G    92K  3,7G   1% /mnt/fs2
/dev/mapper/fstest-fs_4   3,9G    24K  3,7G   1% /mnt/fs3

Una vez tenemos esto claro empezamos a trabajar.

Convertir sistemas de ficheros ext2 a ext3

En todos los casos lo primero que hay que hacer es desmontar el sistema de ficheros que queremos convertir.

umount /mnt/fs1

El siguiente paso es utilizar la herramienta tune2fs, con el parámetro -j, ya que así habilitamos el Journaling, del que hemos hablado antes.

tune2fs -j /dev/mapper/fstest-fs_1

Con el resultado:

tune2fs 1.46.2 (28-Feb-2021)
Creating journal inode: done

Modificamos la información del fichero /etc/fstab:

sed -i '16,$ s/ext2/ext3/' /etc/fstab'

Esto es en mi caso, también podemos modificar el fichero a mano utilizando nuestro editor favorito.

Con el resultado:

root@servtest:~# egrep fstest /etc/fstab
/dev/fstest/fs_1        /mnt/fs1        ext3    defaults        0       2
/dev/fstest/fs_2        /mnt/fs2        ext3    defaults        0       2
/dev/fstest/fs_4        /mnt/fs3        ext4    defaults        0       2

Una vez hecho esto volvemos a montar el sistema de ficheros:

mount -a

De esta forma ya lo tendríamos listo.

Convertir sistemas de ficheros ext3 a ext2

Al igual que hemos hecho en el ejemplo anterior, vamos a desmontar el FS.

umount /mnt/fs2

Para convertir de ext3 a ext2, utilizaremos otra vez tune2fs, pero esta vez con el parámetro -O ^has_journal, para así deshabilitar el Journaling, como sigue:

tune2fs -O ^has_journal /dev/mapper/fstest-fs_2

Y nos mostrará:

root@servtest:/#  tune2fs -O ^has_journal  /dev/mapper/fstest-fs_2
tune2fs 1.46.2 (28-Feb-2021)

Y lo mismo de antes, debemos modificar la información de ext3 a ext2 en el fichero /etc/fstab como he indicado. y volver a montar:

mount -a
#Y listamos
root@servtest:/# egrep fstest /etc/fstab
/dev/fstest/fs_1        /mnt/fs1        ext3    defaults        0       2
/dev/fstest/fs_2        /mnt/fs2        ext2    defaults        0       2
/dev/fstest/fs_4        /mnt/fs3        ext4    defaults        0       2
Convertir ext2 y ext3 a ext4

Para convertir a ext4 desmontar el punto de montaje que nos interese:

umount /mnt/fs1

En este caso, para convertir ext3 a ext4, utilizamos otra vez tune2fs pero con la opción -O extents,uninit_bg,dir_index, tal y como se ve en el ejemplo:

root@servtest:/# tune2fs -O extents,uninit_bg,dir_index /dev/fstest/fs_1
tune2fs 1.46.2 (28-Feb-2021)

En el caso de ext2 a ext4 debemos añadir también el parámetro has_journal

Modificamos el fichero /etc/fstab y volvemos a montar:

mount -a

También podemos ver la información de los sistemas de ficheros utilizando df -Th

root@servtest:/# df -Th | grep -i fstest
/dev/mapper/fstest-fs_4 ext4       3,9G    24K  3,7G   1% /mnt/fs3
/dev/mapper/fstest-fs_2 ext4       3,9G    92K  3,7G   1% /mnt/fs2
/dev/mapper/fstest-fs_1 ext4       4,0G    65M  3,7G   2% /mnt/fs1

De esta manera ya lo tendríamos listo.

Espero que esta entrada os sea de utilidad en algún momento, nos vamos leyendo.

Fuentes consultadas

Página de man de df

Página de man de tune2fs