Mover el directorio /home a otra partición en GNU/Linux

Publicado por Diego Córdoba en

En esta oportunidad veremos cómo podemos mover el directorio /home de nuestra instalación de GNU/Linux desde la ubicación actual a otra diferente, ya sea en una partición distinta o en otro disco.


Este artículo lo publiqué con la intención de dar respuesta a la consulta que me hizo un alumno de mi curso básico de GNU/Linux.

Generalmente en mis clases suelo profesar que el directorio /home debe estar separado del directorio raíz del sistema operativo por varios motivos, entre los que se cuentan la mejor organización física de los datos en el disco, y la facilidad de dar formato a una partición sin necesidad de tocar otra.

Esto es muy importante, puesto que así podemos instalar y reinstalar distintas distribuciones GNU/Linux en nuestro sistema sin necesidad de mover datos y configuraciones de usuario. Incluso podemos tener mas de una instalación o distro de GNU/Linux en el mismo ordenador, y todas accediendo a los mismos datos de usuario, lo cual es súper cómodo.

En general se pueden separar varios directorios del sistema en particiones o discos distintos, tales como /home, /boot, o /var, y este esquema depende del uso que vayamos a darle al sistema operativo.

Por ejemplo, para una instalación de servidor podría ser conveniente separar el /var en una partición o disco distinto para tener los logs y colas del sistema aislados del disco principal de la instalación.

En un ordenador de escritorio es conveniente separar el /home en una partición para tener las ventajas que mencioné anteriormente.

Por esta razón, en un GNU/Linux de escritorio suelo tener tres particiones creadas: una para el directorio / (raíz) del sistema, otra para el directorio /home (datos de usuario), y por supuesto, una para el espacio de intercambio o swap.

Una cuestión de tamaño

¿Qué tamaño le damos a cada partición?

En general suelo definir un tamaño para el swap dependiendo del uso que voy a darle a mi sistema, y de las características de hardware. Para más información sobre algunas prácticas recomendadas a la hora de decidir el tamaño del swap los invito a pasar por:

Respecto del sistema raíz, como menciono en el artículo citado, suelo recomendar entre 30 y 40 GiB de tamaño, ya que si bien una instalación de GNU/Linux por lo general no supera los 20GiB, es recomendable dar un poco más de espacio para estar más holgados con los tamaños.

Preparando las particiones

Supongamos que tenemos nuestra instalación limpia y hemos seleccionado el particionado guiado en el proceso de instalación… si ahora quisiéramos separar el /home en una partición o disco diferente, es perfectamente posible y en general no es difícil lograrlo en ninguna distro GNU/Linux.

No vamos a entrar demasiado en detalle sobre cómo particionar el disco, quien lee este artículo puede remitirse a herramientas como fdisk, cfdisk, gparted, parted, gdisk, cgdisk, etc, aquí dejo una entrada al respecto:

En mi caso particular, en el ordenador que voy a usar de ejemplo, tengo toda la instalación en un solo disco de 8GiB, y he agregado un nuevo disco de 10 GiB que voy a empezar a usar como nuevo /home.

Si tuviéramos un solo disco bien podríamos utilizar herramientas como Gparted para reducir, desde una distro live, la partición raíz, y crear una nueva  partición para montar el /home, siguiendo las recomendaciones de tamaños que expliqué arriba.

La salida del «parted -l » para mi equipo muestra la siguiente info:

mount fsck parted gparted fdisk gdisk cfdisk cgdisk particion home mountpoint punto de montaje

Aquí se puede ver que tengo dos discos con una sola partición cada uno: mount fsck parted gparted fdisk gdisk cfdisk cgdisk particion home mountpoint punto de montaje

  • /dev/sda, donde tengo una partición primaria vacía.
  • /dev/sdb, donde tengo una partición primaria para el sistema raíz /.

Lo primero será crear un sistema de archivos en la partición /dev/sda1 donde voy a ubicar mi home, por lo que de aquí en adelante ese será el nombre de mi dispositivo, por lo que si estás siguiendo esta guía, cambia ese nombre por el de la partición donde cargarás tu /home.

Cambiando el /home

Primero hay que tener en cuenta un detalle IMPORTANTE: los nombres de los discos en el live-cd que usamos para particionar, y en el sistema iniciado luego puede que no coincidan, por lo que es sumamente importante ejecutar el comando «parted -l » o «fdisk -l » para ver las particiones, sus nombres, y poder identificarlas.

Suponiendo que recién hemos creado nuestra partición y se llama /dev/sda1, primero vamos a darle formato:

sudo mkfs -t ext4 /dev/sda1

Y vamos a proceder a montarla en un directorio temporal en nuestro sistema, para poder copiar el contenido actual de nuestro home ahí:

sudo mount -t ext4 /dev/sda1 /mnt

Ahora copiamos el contenido del home, incluyendo metadatos de archivos y directorios:

rsync -av /home/* /mnt/

Esto también podría haberse realizado con un comando cp  de esta forma:

cp -a /home/* /mnt/

Tanto la opción de cp como la de rsync van a copiar los archivos manteniendo sus atributos, dueños y permisos originales.

Incluso, una vez copiados podemos verificar si existen diferencias de esta forma:

root@debian8-64:~# diff -r /home/ /mnt/
Only in /mnt/: lost+found

En mi caso esto me lo muestra porque como /mnt es punto de montaje de un sistema de archivos ext4, el directorio lost+found se encuentra presente ahí. El resto es todo exactamente igual.

Una vez que nos aseguremos que en el directorio /mnt tenemos toda la información de nuestro directorio /home, vamos a borrar todo el contenido del home original:

rm -rf /home/*

Es importante el «*» para evitar borrar el directorio /home propiamente dicho, solo queremos eliminar su contenido.

Hecho esto, vamos a desmontar nuestro punto de montaje temporal /mnt, y vamos a remontar la partición en el directorio /home:

sudo umount /mnt
sudo mount -t ext4 /dev/sda1 /home

Ahora veremos todo el contenido del /home nuevamente, con la diferencia de que ahora estará almacenado en otra partición!

Solamente nos resta cargar el archivo /etc/fstab con el montaje automático de la nueva partición al inicio del sistema.

Para ello primero ejecutaremos el comando blkid  y obtendremos el UUID de la partición /dev/sda1 donde se almacena el /home:

mount fsck parted gparted fdisk gdisk cfdisk cgdisk particion home mountpoint punto de montaje

Ahora debemos modificar el archivo /etc/fstab para indicarle qué datos tiene que utilizar el sistema para montar /home al inicio. En mi caso agregué esta línea:

UUID=c6b9f908-c500-422d-8157-f079a01f9bdc /home ext4    defaults,noatime,nodiratime 0 0

Aquí el UUID es el que corresponde con el obtenido para la partición /dev/sdb1 en el paso de blkid, y el resto de los datos son las opciones de montaje del dispositivo, a saber:

  • UUID: el identificador único del sistema de archivos de la partición.
  • /home: el punto de montaje donde se monta la partición.
  • ext4: el sistema de archivos que se utilizará (debe coincidir con el que utilizamos en el comando mkfs.
  • defaults,noatime,nodiratime: opciones que estoy utilizando para montar el dispositivo.
  • 0 0: opciones de dump y fsck.

EPara una lista más completa de opciones te recomiendo visitar este artículo sobre opciones de montaje de fstab.

Por supuesto, nunca está de mas leer el man del archivo fstab para mas opciones:

man 5 fstab

Por último, no tenemos más que montar la nueva partición utilizando «mount -a«, luego de lo cual podremos apreciar nuestro /home en la salida del comando «mount», y por supuesto, el contenido original del directorio en un «ls /home»:

root@debian8-64:~# mount
[...]
/dev/sdb1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
[...]
 /dev/sda1 on /home type ext4 (rw,noatime,nodiratime,data=ordered)

Y si ejecutamos el comando «df -h» veremos que el sistema de archivos de /dev/sda1 está montado en /home también:

root@debian8-64:~# man fstab
root@debian8-64:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        11G  3.1G  7.3G  31% /
udev             10M     0   10M   0% /dev
tmpfs           201M  4.5M  196M   3% /run
tmpfs           501M     0  501M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           501M     0  501M   0% /sys/fs/cgroup
/dev/sda1       976M  253M  656M  28% /home

Conclusiones

Hemos visto cómo podemos mover el directorio /home de una partición a otra para facilitar la flexibilidad del sistema.

Anteriormente habíamos estado hablando sobre cómo mover la instalación completa de un sistema GNU/Linux desde una partición a otra, lo cual da cuenta de la flexibilidad y potencia que tiene este gran sistema operativo.

Espero que estos contenidos te sean de utilidad, y ya saben, cualquier duda, consulta o sugerencia son bienvenidos a comentar el post!

Muchas gracias y será hasta la próxima!



¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!


Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador