Page 1 sur 1

[systemd,mount] Montages (bind) sans fstab (résolu)

Publié : ven. 14 déc. 2012, 13:37
par MbdM
Bonjour, je souhaite monter certains dossiers (bind) directement via un service systemd afin d'éviter qu'ils soient détectés par nautilus via le fichier fstab (voir par exemple ce sujet.

J'ai commencé par regarder les fichiers générés automatiquement par systemd-fstab-generator qui se trouvent dans /run/systemd/generator/. J'ai trouvé par exemple ceci :

Code : Tout sélectionner

# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
DefaultDependencies=no
After=local-fs-pre.target
Wants=local-fs-pre.target
Conflicts=umount.target
Before=umount.target
Before=local-fs.target

[Mount]
What=/media/datas/user/Documents
Where=/home/user/Documents
Type=none
FsckPassNo=0
Options=bind
J'ai ensuite créé un fichier /etc/systemd/system/home-user-documents.mount contenant ces données (et commenté la ligne correspondant à ce montage dans le fichier fstab). La question que je me pose est maintenant de savoir comment activer ce montage au démarrage ?

PS : systemctl enable home-user-documents.mount ne fonctionne pas bien sûr.

Merci. ;)

Re: [systemd,mount] Montages (bind) sans fstab

Publié : ven. 14 déc. 2012, 13:43
par benjarobin
Il te manque la partie [Install]
Par contre tu peux tester ton 'script' en lançant

Code : Tout sélectionner

systemctl start home-user-documents.mount
Non testé, mais je dirait quelque chose comme ceci

Code : Tout sélectionner

[Unit]
DefaultDependencies=no
After=local-fs-pre.target
Wants=local-fs-pre.target
Conflicts=umount.target
Before=umount.target
Before=local-fs.target

[Mount]
What=/media/datas/user/Documents
Where=/home/user/Documents
Type=none
FsckPassNo=0
Options=bind

[Install]
WantedBy=local-fs.target

Re: [systemd,mount] Montages (bind) sans fstab

Publié : ven. 14 déc. 2012, 14:14
par tuxce
Juste pour info, un dossier de montage commencant par "." (point) est ignoré par nautilus. Après tu peux avoir un dossier sans le "." pointant dessus.

Re: [systemd,mount] Montages (bind) sans fstab

Publié : ven. 14 déc. 2012, 14:20
par oktoberfest
@benjarobin : je confirme, avec la section [Install] que tu as indiqué cela fonctionne très bien.

Re: [systemd,mount] Montages (bind) sans fstab

Publié : ven. 14 déc. 2012, 19:17
par MbdM
Merci pour vos réponses.
J'ai testé la solution proposée par benjarobin mais j'obtiens une erreur. En consulant journalctl j'ai :

Code : Tout sélectionner

home-user-documents.mount's Where setting doesn't match unit name. Refusing.
Un systemctl status home-user-documents.mount m'indique :

Code : Tout sélectionner

Loaded: error (Reason: Invalid argument)
Il semble donc que l'argument Where ne soit pas correct, mais je ne sais pas trop pourquoi.

Re: [systemd,mount] Montages (bind) sans fstab

Publié : ven. 14 déc. 2012, 21:52
par MbdM
Solution trouvée, il faut nommer le fichier home-user-Documents.mount (et non pas home-user-documents.mount).

Re: [systemd,mount] Montages (bind) sans fstab (résolu)

Publié : sam. 15 déc. 2012, 11:59
par MbdM
En complément, plutot que de réaliser une unité .mount par dossier à monter, j'ai préféré passer par une unité .service et un script shell. Je crois que ça fonctionne correctement mais si quelqu'un peut me confirmer que ma façon de faire est bonne ça me conforterait (et au pire ça peut servir à d'autres). Voici les détails :

Dans /home/user j'ai un fichier exécutable home-user-mounts.sh qui contient :

Code : Tout sélectionner

#!/bin/sh

if [ "$1" = "start" ]; then
    mount --bind /media/datas/user/Documents /home/user/Documents
    mount --bind /media/datas/user/Téléchargements /home/user/Téléchargements
    mount --bind /media/datas/user/Vidéos /home/user/Vidéos
    mount --bind /media/datas/user/Musique /home/user/Musique
    mount --bind /media/datas/user/Images /home/user/Images
fi
if [ "$1" = "stop" ]; then
    umount /home/user/Documents /home/user/Téléchargements /home/user/Vidéos /home/user/Musique /home/user/Images
fi
Dans /etc/systemd/system/ j'ai un fichier home-user-mounts.service qui contient :

Code : Tout sélectionner

[Unit]
Description=Montage bind des sous-dossiers dans /home/user
DefaultDependencies=no
ConditionFileIsExecutable=/home/user/home-user-mounts.sh
After=media-datas.mount
Conflicts=umount.target

[Service]
Type=oneshot
ExecStart=/home/user/home-user-mounts.sh start
ExecStop=/home/user/home-user-mounts.sh stop
TimeoutSec=2
RemainAfterExit=yes

[Install]
WantedBy=local-fs.target
Je pense que cette méthode est plus souple que la précédente.