Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/08/2023, à 16:55

Jarodd

[Résolu] bash : mountpoint et lien symbolique

Bonjour,
Je suis en train de faire un petit script bash, qui lance la commande rsync sur différents disques durs et NAS.
Pour savoir si la destination est bien disponible, j'utilise la commande mointpoint :

    #!/bin/bash

    tous_les_disques=( 2TO 4TO ds220 pcloud )
    for disque in ${tous_les_disques[@]}
    do
        mount_point="/media/jarodd/"$disk
        if ! mountpoint -q ${mount_point}
        then
            echo "$disk ko"
        else
            echo "$disk ok"
        fi
    done

Ça fonctionne bien pour tous les périphériques de destination.
Par contre pour un service en ligne, cela ne fonctionne pas.
J'ai un compte pcloud, qui à la connexion me crée un montage dans /home/jarodd/pCloudDrive/Crypto\ Folder/
Pour que ce soit plus pratique (c'est le seul à être monté dans /home) et éviter les emm... avec l'espace, j'ai créé un lien symbolique dans /media/jarodd :

$ ll /media/jarodd/pcloud
lrwxrwxrwx 1 jarodd jarodd 39 févr. 14 12:31 /media/jarodd/pcloud -> '/home/jarodd/pCloudDrive/Crypto Folder'/

Si je lance ma commande rsync, ça fonctionne bien.

Mais dans le script, le mountpoint ne semble pas fonctionner (ma condition me retourne "pcloud" ko".
Je suppose que c'est parce qu'un lien symbolique n'est pas un point de montage...
Mais par quoi remplacer mountpoint ? J'ai besoin de savoir si le disque est bien connecté (le code actuel me retourne bien "ko" s'il ne l'est pas).
Mais je sèche pour réussir à faire ma vérification. Je voudrais que cela fonctionne pour pcloud, sans casser les vérifications pour les autres disques.

Merci d'avance pour votre aide.

Edit 09/08 : résolu, voir #8

if ! grep -iq "$disk" /etc/mtab
then
    echo "$disk ko"
else
    echo "$disk ok"
fi

Dernière modification par Jarodd (Le 09/08/2023, à 08:27)


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#2 Le 01/08/2023, à 17:04

kamaris

Re : [Résolu] bash : mountpoint et lien symbolique

Pour traiter correctement les espaces ça serait ça, mais je ne sais pas si ça va suffire à résoudre ton problème :

    #!/bin/bash

    tous_les_disques=( 2TO 4TO ds220 'chemin pour pcloud avec espaces' )
    for disk in "${tous_les_disques[@]}"
    do
        mount_point="/media/jarodd/$disk"
        if ! mountpoint -q "$mount_point"
        then
            echo "$disk ko"
        else
            echo "$disk ok"
        fi
    done

Hors ligne

#3 Le 01/08/2023, à 17:07

Jarodd

Re : [Résolu] bash : mountpoint et lien symbolique

Oui ça pourrait faire l'affaire.
Il faudrait que je mette tous les chemins dans le tableau alors, car un coup c'est /media, un coup c'est /home...
Mais je n'aime pas les espaces dans les chemins de toute façon tongue
rsync sur /media/jarodd/pcloud fonctionne bien, il n'y a que la vérif avec mountpoint sur laquelle je bloque.


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#4 Le 01/08/2023, à 19:01

MicP

Re : [Résolu] bash : mountpoint et lien symbolique

Bonjour

Jarodd a écrit :

… Il faudrait que je mette tous les chemins dans le tableau …

Tu pourrais utiliser les informations contenues dans le fichier /etc/mtab
ce qui te permettrait de récupérer le nom du point de montage utilisé.

EDIT : J'ai réécrit le script de façon à ce qu'il soit plus facile à lire.

#!/bin/bash
tous_les_fs=( 2TO 4TO dataLinux ds220 'chemin pour pcloud avec espaces' )

for fs in "${tous_les_fs[@]}"; do
    mntpt="$(awk '/'"$fs "'/{print $2}' /etc/mtab)"       
    if [ -z $mntpt ]; then
        echo "ko => '$fs' n'est pas monté."
      else
        echo "OK => '$fs' est monté sur '$mntpt'"
    fi
done

Ce qui donne chez moi :

mic@deb12:~$ myscript.sh
ko => '2TO' n'est pas monté.
ko => '4TO' n'est pas monté.
OK => 'dataLinux' est monté sur '/media/mic/dataLinux'
ko => 'ds220' n'est pas monté.
ko => 'chemin pour pcloud avec espaces' n'est pas monté.
mic@deb12:~$ 

=======
En fait le tableau que tu avais nommé tous_les_disques n'est pas une liste de disques,
mais une liste de noms de label de systèmes de fichiers

Dernière modification par MicP (Le 01/08/2023, à 23:01)

Hors ligne

#5 Le 01/08/2023, à 19:55

Jarodd

Re : [Résolu] bash : mountpoint et lien symbolique

tous_les_disques c'est une variable qui représente les disques et les NAS apparaissant dans /media/jarodd. Au départ je lançais rsync sur les disques durs, puis j'ai étendu au NAS (sans renommer la variable).
Je viens de regarder mon /etc/mtab, il y a plein de lignes dont j'ignore la signification.
/dev/fuse
/dev/loopXX (avec XX allant de 2 à 51)
sysfs
proctmpfs
(la liste est longue)


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#6 Le 01/08/2023, à 20:41

MicP

Re : [Résolu] bash : mountpoint et lien symbolique

Ce que tu appelles disque est en fait un système de fichiers

Le système de fichiers est le résultat du formatage (en général, c'est une partition d'un disque que l'on formate)
et c'est grâce à ce système de fichiers (plus précisément système de gestion de fichiers) que des fichiers peuvent êtres créés, modifiés, supprimés, etc.

=======
Le fichier /etc/mtab contient la liste des systèmes de fichiers actuellement montés (et du chemin de leur point de montage + plein d'autres informations…)
mtab <=> mounted file systems table

=======
EDIT : J'ai réécrit le script (dans mon message plus haut) de façon à ce qu'il soit plus facile à lire.

Dernière modification par MicP (Le 01/08/2023, à 23:11)

Hors ligne

#7 Le 08/08/2023, à 17:45

Jarodd

Re : [Résolu] bash : mountpoint et lien symbolique

Bonjour,
Je viens de tester ton script en #4 (avec uniquement le chemin de pcloud avec espaces dans la variable tous_les_fs).
J'ai cette erreur :

awk: ligne de commande:1: //home/jarodd/pCloudDrive/Crypto Folder /{print $2}
awk: ligne de commande:1:                                           ^ syntax error
ko => '/home/jarodd/pCloudDrive/Crypto Folder' n'est pas monté.

J'ai aussi essayé (par hasard) d'enlever le premier slash du chemin (pour ne pas avoir '//') : même erreur.


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#8 Le 08/08/2023, à 18:27

Watael

Re : [Résolu] bash : mountpoint et lien symbolique

d'ailleurs, pourquoi awk et pas un simple grep ?

for fs in "${tous_les_fs[@]}"; do
        if grep -q "$fs" /etc/mtab; then

on peut rendre la regex plus précise, si besoin...


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 08/08/2023, à 21:03

Jarodd

Re : [Résolu] bash : mountpoint et lien symbolique

Je pense avoir une commande qui fonctionne :

grep_disk_in_mtab="$( cat /etc/mtab | grep -i "${disk}" | wc -l )"

Et ensuite la condition pour savoir si je peux lancer rsync ou pas :

if [ ${grep_disk_in_mtab} -eq 0 ]

Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#10 Le 08/08/2023, à 21:10

Watael

Re : [Résolu] bash : mountpoint et lien symbolique

le cat ne sert à rien.
le wc ne sert à rien.
et les accolades ne servent absolument à rien !

dans la proposition que j'ai faite, si grep a un code de retour différent de zéro, le if passera au else.
par rapport à ta commande, ça donnera :

if grep -qi "$disk"; then ...

et c'est tout.
smile

Dernière modification par Watael (Le 08/08/2023, à 21:11)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 09/08/2023, à 08:25

Jarodd

Re : [Résolu] bash : mountpoint et lien symbolique

Bonjour,
En effet ça marche bien smile J'ai du faire une erreur hier.
Merci pour votre aide !


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne