#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
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
… 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.
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 J'ai du faire une erreur hier.
Merci pour votre aide !
Ubuntu 22.04.3 LTS (64 bits)
Hors ligne