Compartición de sistemas de ficheros con sshfs y systemd

Índice

Configuración del sistema de archivos sshfs en el servidor

En el servidor se anexa un volumen de 2GB y se le da un sistema de ficheros.

debian@servidor:~$ sudo mkfs.ext4 /dev/vdb
mke2fs 1.47.0 (5-Feb-2023)
Discarding device blocks: done                            
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: 140701b6-050d-4585-8640-3cfbf7355113
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

Este volumen se monta en un directorio del servidor, en este caso, en el directorio /srv/sshfs. Para hacerlo de forma persistente se usa el fichero /etc/fstab, en el que se añade la siguiente línea:

UUID=140701b6-050d-4585-8640-3cfbf7355113 /srv/sshfs ext4 defaults 0 0

Y se aplican los cambios.

sudo mount -a

Montaje manual del sistema de archivos remoto

En el cliente se crea el directorio en el que se monta el directorio remoto usando sshfs. En este caso, el directorio estará en el home del usuario debian y se llamará sshfs.

mkdir sshfs

Para hacer el montaje se usa el comando sshfs.

sshfs 10.0.0.253:/srv/sshfs sshfs

Así se crea en el directorio /home/debian/sshfs el punto de montaje del directorio remoto /srv/sshfs del servidor.

debian@debian12:~$ df -Th
Filesystem            Type        Size  Used Avail Use% Mounted on
udev                  devtmpfs    462M     0  462M   0% /dev
tmpfs                 tmpfs        97M  500K   96M   1% /run
/dev/vda1             ext4        9.7G  6.0G  3.4G  65% /
tmpfs                 tmpfs       481M   84K  481M   1% /dev/shm
tmpfs                 tmpfs       5.0M     0  5.0M   0% /run/lock
/dev/vda15            vfat        124M   12M  113M  10% /boot/efi
tmpfs                 tmpfs        97M     0   97M   0% /run/user/1000
10.0.0.253:/srv/sshfs fuse.sshfs  2.0G   24K  1.8G   1% /home/debian/sshfs

Montaje automático usando el fichero fstab

Cuando el sistema lee el fichero fstab y monta los sistemas de archivo que se indican en el fichero en los puntos de montaje recogidos, lo hace como root. Por tanto, para que el cliente pueda acceder al servidor sshfs la clave privada del cliente debe estar almacenada no en el directorio .ssh de ningún usuario sino en el del root: /root/.ssh.

sudo cp .ssh/id_rsa /root/.ssh

La sintaxis para añadir este puntode montaje al fichero fstab es muy similar a la que se usa con otros dispositivos de bloques exceptuando el hecho de que para indicar el dispositivo no se usa su UUID, sino una cadena con el formato sshfs#usuario@host:ruta.

sshfs#debian@10.0.0.253:/srv/sshfs /home/debian/sshfs fuse defaults,allow_other 0 0

Al aplicar los cambios indicados en el fichero fstab, se monta este sistema de archivos en el punto de montaje indicado.

debian@debian12:~$ df -Th
Filesystem                   Type        Size  Used Avail Use% Mounted on
...
debian@10.0.0.253:/srv/sshfs fuse.sshfs  2.0G   24K  1.8G   1% /home/debian/sshfs

Montaje automático usando una unidad .mount de systemd

Para configurar el montaje automático del sistema de ficheros usando una unidad .mount de systemd hay que crear este fichero. Las unidades de systemd se almacenan en el directorio /lib/systemd/system. En él se guarda un fichero de configuración para cada unidad. El fichero de configuración de la unidad .mount usando sshfs es el siguiente:

[Unit]
Description=Mount datos with sshfs
After=network-online.target
Wants=network-online.target

[Install]
WantedBy=default.target

[Mount]
What=debian@10.0.0.253:/srv/sshfs
Where=/home/debian/datos
Type=fuse.sshfs
Options=_netdev,reconnect,ServerAliveInterval=30,ServerAliveCountMax=5,x-system>
TimeoutSec=60

Para aplicar los cambios generados por la nueva unidad creada se recarga el daemon de systemd y se habilita la unidad de montaje.

debian@debian12:/lib/systemd/system$ sudo systemctl daemon-reload
debian@debian12:/lib/systemd/system$ sudo systemctl enable home-debian-datos.mount 
Created symlink /etc/systemd/system/default.target.wants/home-debian-datos.mount → /lib/systemd/system/home-debian-datos.mount.

Para comprobar que la unidad monta correctamente el sistema de ficheros, se puede ejecutar la unidad manualmente usando el comando systemctl.

sudo systemctl start home-debian-datos.mount

Con este comando el sistema de ficheros se monta en el directorio indicado.

debian@debian12:~$ df -Th
Filesystem                   Type        Size  Used Avail Use% Mounted on
...
debian@10.0.0.253:/srv/sshfs fuse.sshfs  2.0G   24K  1.8G   1% /home/debian/datos

Como la unidad de montaje se ha habilitado con el comando systemctl enable, su estado es loaded y, por tanto, el sistema de ficheros se monta automáticamente cada vez que se reinicia el sistema.

debian@debian12:~$ sudo systemctl status home-debian-datos.mount 
● home-debian-datos.mount - Mount datos with sshfs
     Loaded: loaded (/lib/systemd/system/home-debian-datos.mount; enabled; pres>
     Active: active (mounted) since Sat 2024-12-21 11:25:07 UTC; 1min 31s ago
      Where: /home/debian/datos
       What: debian@10.0.0.253:/srv/sshfs
      Tasks: 5 (limit: 1107)
     Memory: 8.6M
        CPU: 212ms
     CGroup: /system.slice/home-debian-datos.mount
             ├─323 ssh -x -a -oClearAllForwardings=yes -oServerAliveInterval=30>
             └─372 /sbin/mount.fuse.sshfs debian@10.0.0.253:/srv/sshfs /home/de>

Dec 21 11:25:05 debian12 systemd[1]: Mounting home-debian-datos.mount - Mount d>
Dec 21 11:25:07 debian12 systemd[1]: Mounted home-debian-datos.mount - Mount da>

Para desmontar el sistema de archivos de forma manual también se puede usar el comando systemctl stop.

sudo systemctl stop home-debian-datos.mount

Montaje automático usando una unidad .automount de systemd

Las unidades .automount de systemd permiten montar un sistema de archivos automáticamente cuando se accede a la ruta especificada en la unidad. Para que estas unidades funciones es necesario tener correctamente configurada la unidad .mount tal y como se ha documentado en el punto anterior. A continuación, se puede crear el fichero de configuración para la unidad .automount.

[Unit]
Description=Automount datos whit sshfs

[Automount]
Where=/home/debian/datos

[Install]
WantedBy=multi-user.target

Las unidades .automount neceistan que exista previamente una unidad .mount con el mismo nombre para funcionar.

debian@debian12:/lib/systemd/system$ ls -l | grep "datos"
-rw-r--r-- 1 root root  122 Dec 21 11:38 home-debian-datos.automount
-rw-r--r-- 1 root root  334 Dec 21 11:20 home-debian-datos.mount

De nuevo, para activar la nueva unidad de systemd se usa el comando daemon-reload, se habilita la unidad y se arranca la unidad.

debian@debian12:~$ sudo systemctl enable home-debian-datos.automount 
Created symlink /etc/systemd/system/multi-user.target.wants/home-debian-datos.automount → /lib/systemd/system/home-debian-datos.automount.

Tras encender la unidad .automount se puede comprobar cómo el sistema de archivos pasa de no estar montado a estar montado simplemente accediendo al directorio.

debian@debian12:~$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  462M     0  462M   0% /dev
tmpfs          tmpfs      97M  500K   96M   1% /run
/dev/vda1      ext4      9.7G  6.0G  3.4G  65% /
tmpfs          tmpfs     481M   84K  481M   1% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
/dev/vda15     vfat      124M   12M  113M  10% /boot/efi
tmpfs          tmpfs      97M     0   97M   0% /run/user/1000
debian@debian12:~$ cd datos/
debian@debian12:~/datos$ df -Th
Filesystem                   Type        Size  Used Avail Use% Mounted on
udev                         devtmpfs    462M     0  462M   0% /dev
tmpfs                        tmpfs        97M  500K   96M   1% /run
/dev/vda1                    ext4        9.7G  6.0G  3.4G  65% /
tmpfs                        tmpfs       481M   84K  481M   1% /dev/shm
tmpfs                        tmpfs       5.0M     0  5.0M   0% /run/lock
/dev/vda15                   vfat        124M   12M  113M  10% /boot/efi
tmpfs                        tmpfs        97M     0   97M   0% /run/user/1000
debian@10.0.0.253:/srv/sshfs fuse.sshfs  2.0G   24K  1.8G   1% /home/debian/datos

Para que systemd use sólo la unidad .automount y no monte automáticamente el sistema de ficheros del servidor sshfs al iniciar el equipo, hay que deshabilitar la unidad de montaje.

sudo systemctl disable home-debian-datos.mount

Además, para que el sistema de ficheros se desmonte de forma automática cuando ya no se esté usando, es necesario marcar a verdadero el parámetro StopWhenUnneeded en el fichero de configuración de la unidad de montaje de systemd.

[Unit]
Description=Mount datos with sshfs
After=network-online.target
Wants=network-online.target
StopWhenUnneeded=true

[Install]
WantedBy=default.target

[Mount]
What=debian@10.0.0.253:/srv/sshfs
Where=/home/debian/datos
Type=fuse.sshfs
Options=allow_other,_netdev,reconnect,ServerAliveInterval=30,ServerAliveCountMax=5,x-systemd.automount
TimeoutSec=60

Con esta configuración, el sistema de ficheros compartido con el cliente por parte del servidor sshfs no se montará en el cliente hasta que no se use. Además, después de un tiempo sin uso, el sistema de ficheros se desmontará del punto de montaje asigando en el cliente de forma automática.

debian@debian12:~$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  462M     0  462M   0% /dev
tmpfs          tmpfs      97M  500K   96M   1% /run
/dev/vda1      ext4      9.7G  6.0G  3.4G  65% /
tmpfs          tmpfs     481M   84K  481M   1% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
/dev/vda15     vfat      124M   12M  113M  10% /boot/efi
tmpfs          tmpfs      97M     0   97M   0% /run/user/1000
debian@debian12:~$ cd datos/
debian@debian12:~/datos$ df -Th
Filesystem                   Type        Size  Used Avail Use% Mounted on
udev                         devtmpfs    462M     0  462M   0% /dev
tmpfs                        tmpfs        97M  500K   96M   1% /run
/dev/vda1                    ext4        9.7G  6.0G  3.4G  65% /
tmpfs                        tmpfs       481M   84K  481M   1% /dev/shm
tmpfs                        tmpfs       5.0M     0  5.0M   0% /run/lock
/dev/vda15                   vfat        124M   12M  113M  10% /boot/efi
tmpfs                        tmpfs        97M     0   97M   0% /run/user/1000
debian@10.0.0.253:/srv/sshfs fuse.sshfs  2.0G   24K  1.8G   1% /home/debian/datos
debian@debian12:~/datos$ cd
debian@debian12:~$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  462M     0  462M   0% /dev
tmpfs          tmpfs      97M  500K   96M   1% /run
/dev/vda1      ext4      9.7G  6.0G  3.4G  65% /
tmpfs          tmpfs     481M   84K  481M   1% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
/dev/vda15     vfat      124M   12M  113M  10% /boot/efi
tmpfs          tmpfs      97M     0   97M   0% /run/user/1000

Note

Es importante indicar que, durante la demostración de los comandos reflejados en las líneas anteriores se han dejado pasar varios minutos entre la ejecución del penúltimo y último comando registrados.

comments powered by Disqus

Relacionados

Empaquetadores y compresores/descompresores en Debian

Los empaquetadores y compresores/descompresores son paquetes fundamentales en cualquier distribución de un sistema operativo. En este post se analizan varios de estos paquetes disponibles para Debian y otras distribuciones GNU/Linux

Leer

Conceptos de gestión de paquetería en Debian

En este post se recoge un breve resumen sobre la información relativa a los gestores de paquetes apt y aptitude incluida en el manual de referencia de Debian.

Leer

Funcionamiento básico de Linux Bridge

Un bridge o puente en Linux es un dispositivo de red virtual que permite que las máquinas virtuales alojadas en una máquina física usen su tarjeta de red. En este post se muestra un ejemplo de configuración de un Bridge en una máquina Debian.

Leer