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 ?
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.
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).
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é.
J’ai quand même tenu compte de la vérification du montage dans mon script.
J’en ai fait un tuto
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.
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=‹ /dev/disk/by-partlabel/sauve-ricardo ›
if [ ! -e $cibleH ]; then
echo « $cibleH est introuvable »
exit 1
else
sudo mount -t ext4 $cibleH $PtMontage
if ((« $? » > 0)); then
echo « erreur de montage »
exit 1
else
sudo rsync---------`
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
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.
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.