# Bash : Tester la connexion physique à un DD externe

**URL:** <https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 10:10 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778 "2016-02-21T22:10:19Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 10:10 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/1 "2016-02-21T22:10:19Z")

</div>

Après avoir eu un problème lors d’une sauvegarde vers un DD ext, je voudrais compléter un script simple.  
Historique :  
J’ai lancé un script simple qui est censé sauvegarder ma Jessie sur un DD ext.  
Habituellement, tout se passe parfaitement.  
Cette fois, suite à des manips sur l’arrière de ma machine, le cable sata était débranché.  
J’ai lancé ma sauvegarde comme habituellement, elle m’a paru longue mais je m’en suis rendu compte trop tard pour arrêter le processus.  
En fait, comme le cable n’aboutissait pas à la machine, il semblerait que les données soient partie dans la nature.  
Le lendemain, impossible de redémarrer.  
J’avais une autre sauvegarde sur un DD interne, cette fois et là, moins de risque côté branchement.  
J’ai pu restaurer sans trop de dégâts mais avec 15 jours d’écart. Pas trop grave, donc.

Je voudrais donc ajouter une ligne (ou 2-3) à ce script pour, qu’avant de lancer le transfert des données vers le DD externe, la connexion physique machine/DD ext soit contrôlée, et que l’on sorte du script si ladite connexion n’est pas effective.

Est-ce faisable et, si oui, quoi ajouter au script suivant ?

`sudo mount -t ext4 /dev/sdb4 /mnt
sudo rsync -av --del --exclude-from=/root/exclure / /mnt
echo
echo "sauve / terminé "
echo
sudo umount /mnt
echo "sauve démonté"`

Est-ce que tester le “montage” effectif est suffisant ?

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 21, 2016, 10:10 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/2 "2016-02-21T22:10:38Z")

</div>

Après ta commande mount il faudrait tester le retour de la commande

```auto

```

Et pour plus de sécurité ou comme alternative de vérification tu pourrais aussi vérifier que le montage est bien enregistrer et effectif.

```auto

```

Si le bout de code que tu as mis est celui qui a tourné avec le disque débranché toutes tes données doivent se trouver dans le répertoire “/mnt”

PS : ne pas copier/coller le code il est non fonctionnel en l’état.

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 10:10 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/3 "2016-02-21T22:10:43Z")

</div>

Merci Mimoza.  
Est-ce que tu veux dire quelque chose comme ça ?

[code]part-racine=’/dev/sdb4’

sudo mount -t ext4 $part-racine /mnt

$part-racine = 0

if (mount | grep sdb4 = 0)  
sudo rsync -av …  
exit  
else  
echo "blabla"  
fi  
exit[/code]

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 21, 2016, 10:10 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/4 "2016-02-21T22:10:46Z")

</div>

On peut cumuler les 2 verifications

[code]part-racine=’/dev/sdb4’

sudo mount -t ext4 $part-racine /mnt  
if $?\> 0  
ech Erreur  
exit 1

if (mount | grep sdb4 = 0)  
sudo rsync -av …  
exit  
else  
echo "blabla"  
fi  
exit[/code]

Tu peux aussi affecter le retour d’une commande dans une variable

`res = sudo mount -t ext4 $part-racine /mnt
if res> 0`

Que veux tu faire avec ca

```auto

```

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Février 21, 2016, 10:10 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/5 "2016-02-21T22:10:47Z")

</div>

salut,

[quote]Tu peux aussi affecter le retour d’une commande dans une variable

`res = sudo mount -t ext4 $part-racine /mnt`[/quote]j’ai un doute : ça ne va plutôt enregistrer la sortie de la commande ?

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 21, 2016, 10:10 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/6 "2016-02-21T22:10:49Z")

</div>

En effet tu me met le doute aussi ![:016](https://www.debian-fr.org/uploads/default/original/1X/b259ae9d61776a18a151e35004995aa8715555b6.gif "langue-en-vert")

---

<div class="post-metadata">

**Author:** ![flavien](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/f475e1/32.png) [@flavien](https://www.debian-fr.org/u/flavien)\
**Post date:** [Février 21, 2016, 10:11 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/7 "2016-02-21T22:11:00Z")

</div>

Mimoza, je te confirme qu’avec le code var=$(commande), la variable var contiendra la sortie standard de la commande. Seule l’instruction $? nous permet de connaître la valeur de retour de la commande précédente.

---

<div class="post-metadata">

**Author:** ![Dunatotatos](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/c2a13f/32.png) [@Dunatotatos](https://www.debian-fr.org/u/Dunatotatos)\
**Post date:** [Février 21, 2016, 10:12 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/8 "2016-02-21T22:12:04Z")

</div>

Mimoza, tu es sûr d’écrire du sh ?

> [@Mimoza](#):
>
> ```auto
> res = sudo mount -t ext4 $part-racine /mnt
> if res> 0
> ```

Non non non, c’est horribe, ça !

```auto
res=$(sudo mount -t ext4 $part-racine /mnt)
if ["$res" -gt 0]
then
[...]
fi
```

est déjà plus syntaxiquement correct. Mais comme le dit flavien, la sortie d’erreur n’est pas enregistrée dans la variable.

Je vois trois moyens à partir d’ici. Exploiter la valeur de $?, combiner les commandes à l’aide de &&, ou interrompre le script en cas d’échec d’une commande (set -e).

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 21, 2016, 10:12 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/10 "2016-02-21T22:12:08Z")

</div>

> [@Dunatotatos](#):
>
> Mimoza, tu es sûr d’écrire du sh ?

Non clairement je savais que ce n’était pas du sh. Mais je n’avais rien pour tester a ce moment là, disons que c’était plus du pseudo-code. ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 10:12 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/11 "2016-02-21T22:12:20Z")

</div>

Concernant la demande originelle de ce fil, j’ai retrouvé un script que j’avais fait il y a 3 ou 4 ans et qui va très bien une fois testé :

[code]cible=’/dev/sdxy’

if [! -e $cible]; then  
echo "$cible est introuvable"  
exit 1 # on sort  
else  
sudo mount -t ext4 $cible /mnt  
fi

sudo rsync -av -…[/code]

Mais rien ne vous empêche de continuer votre dialogue.

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 21, 2016, 10:12 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/12 "2016-02-21T22:12:21Z")

</div>

Oui mais là tu teste juste si le disque est présent avant de le monter, tu ne controle pas si le montage a fonctionné ou non.

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 10:12 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/13 "2016-02-21T22:12:41Z")

</div>

C’est la seule chose qui m’importait : voir le titre du fil.  
Si le montage ne se fait pas, j’ai un refus de la commande mais ça ne m’est jamais arrivé.

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Février 21, 2016, 10:12 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/14 "2016-02-21T22:12:52Z")

</div>

J’ai quand même tenu compte de la vérification du montage dans mon script.  
J’en ai fait un [tuto](https://www.debian-fr.org/t/script-de-sauvegarde-simple-avec-rsync/67939)  
Il se veut volontairement simple mais explicite.  
J’ai volontairement évité la multiplicité des variables pour ne pas rebuter les débutants.  
Merci de votre aide.

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Mars 16, 2016, 1:51 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/15 "2016-03-16T13:51:00Z")

</div>

Tiens, @ricardo, je me permets de te montrer comment je fais :

```auto
function test_mount() {

    echo " ***RSync::Test Mount USB***"

	if [[! -d "/media/user/disk"]]; then
		display bad_mount;
		exit;
	fi
}
```

Très simplement, et tout autant fonctionnel … 😉

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Mars 16, 2016, 3:47 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/16 "2016-03-16T15:47:55Z")

</div>

Oui, moi je teste l’absence au lieu de la présence et en plus, je teste le montage;  
Il est vrai que ce sont deux approches différentes mais aussi simples.

> `cibleH=‹&nbsp;/dev/disk/by-partlabel/sauve-ricardo&nbsp;›

> if [! -e $cibleH]; then  
> echo «&nbsp;$cibleH est introuvable&nbsp;»  
> exit 1  
> else  
> sudo mount -t ext4 $cibleH $PtMontage  
> if ((«&nbsp;$?&nbsp;» \> 0)); then  
> echo «&nbsp;erreur de montage&nbsp;»  
> exit 1  
> else   
> sudo rsync---------`

PS J’ai rétabli le bon lien du tuto ci-dessus

---

<div class="post-metadata">

**Author:** ![ripat](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/bc79bd/32.png) [@ripat](https://www.debian-fr.org/u/ripat)\
**Post date:** [Mars 17, 2016, 9:21 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/17 "2016-03-17T09:21:39Z")

</div>

> [@ricardo](#):
>
> ```auto
> sudo mount -t ext4 $cibleH $PtMontage
> if (("$?" &gt; 0)); then
> ...
> 
> ```

Attention qu’un `mount` sur une partition déjà montée retournera un code différent de 0. La meilleure façon de tester si une partition est montée est de tester l’existence d’un répertoire ou d’un fichier sur le mount ou bien encore de faire un grep de la cible sur la commande `mount` ou sur le fichier `/etc/mtab`

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Mars 17, 2016, 11:04 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/18 "2016-03-17T11:04:25Z")

</div>

> [@ripat](#):
>
> Attention qu’un mount sur une partition déjà montée retournera un code différent de 0.

Ben c’est le but recherché.  
\* echo «&nbsp;erreur de montage&nbsp;»

- 

```
    exit 1

```

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Mars 17, 2016, 11:32 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/19 "2016-03-17T11:32:01Z")

</div>

Il veut dire que tu peut regarder plus finement ton montage avant de sortir en erreur.

- Vérifier dans /etc/mtab si le montage existe déjà
- Si oui sauter la commande mount
- Sinon faire la commande mount
  - Si erreur de la commande mount sortir une erreur

---

<div class="post-metadata">

**Author:** ![ricardo](https://www.debian-fr.org/user_avatar/www.debian-fr.org/ricardo/32/3864_2.png) [@ricardo](https://www.debian-fr.org/u/ricardo)\
**Post date:** [Mars 17, 2016, 1:46 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/20 "2016-03-17T13:46:43Z")

</div>

Oui, je sais qu’on peut être plus pointu mais c’est justement ce que je veux éviter.  
J’avais fait, il y a env. 5 ans, une usine à gaz. Tout était testé et pointu mais trop complexe.  
Mon propos, pour ce script, c’est la simplicité.  
Donc, il fonctionne parfaitement, avec un minimum de lignes et c’est ce que je veux.

---

<div class="post-metadata">

**Author:** ![ripat](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/bc79bd/32.png) [@ripat](https://www.debian-fr.org/u/ripat)\
**Post date:** [Mars 19, 2016, 8:03 UTC](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778/21 "2016-03-19T08:03:41Z")

</div>

Ce n’est pas plus pointu, c’est juste une précaution. Si ton DD externe est _déjà_ monté (par automount par exemple) le test du mount de ton script renverra un code \> 0 que ton script verra comme une erreur de montage alors que tout est normalement monté. Et ton rsync ne s’exécutera pas alors que rien ne s’y oppose.

[Page suivante](https://www.debian-fr.org/t/bash-tester-la-connexion-physique-a-un-dd-externe/67778.md?page=2)
