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

Questions et astuces concernant l'installation et la configuration d'archlinux
MbdM
Hankyu
Messages : 10
Inscription : ven. 14 déc. 2012, 11:57

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

Message 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. ;)
Dernière modification par MbdM le ven. 14 déc. 2012, 21:52, modifié 1 fois.
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17576
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

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

Message 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
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

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

Message 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.
oktoberfest
Maître du Kyudo
Messages : 1855
Inscription : mer. 06 janv. 2010, 13:51
Localisation : Ried - Alsace - France

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

Message par oktoberfest »

@benjarobin : je confirme, avec la section [Install] que tu as indiqué cela fonctionne très bien.
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
MbdM
Hankyu
Messages : 10
Inscription : ven. 14 déc. 2012, 11:57

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

Message 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.
MbdM
Hankyu
Messages : 10
Inscription : ven. 14 déc. 2012, 11:57

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

Message par MbdM »

Solution trouvée, il faut nommer le fichier home-user-Documents.mount (et non pas home-user-documents.mount).
MbdM
Hankyu
Messages : 10
Inscription : ven. 14 déc. 2012, 11:57

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

Message 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.
Répondre