Compartición de sistemas de ficheros con sshfs y systemd
- Francisco Javier Huete
- Administracion sistemas
- January 9, 2025
Í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.