Aller au contenu

Script pour monter automatiquement un disque USB externe


Messages recommandés

Bonjour à tous je cherche à créer un script afin d'automatiser le montage de mon disque USB de backup local. Ceci afin qu'il ne soit pas monté en permanence sur le NAS mais uniquement au moment de la sauvegarde et de m'éviter de fastidieuses connexion et reconnexion manuelle.

Première question cela fait-il du sens de le faire (je laisse les experts en débattre)?

De prime à bord, je tiens à préciser que ce disque de backup local n'est pas mon unique point de backup de mon NAS.

Je vois donc déjà les "experts" me dire alors à quoi bon, surtout si les accès du NAS on été sécurisé, par exemple en suivant l'excellent tuto de fenrir sur le sujet...

De mon point de vue, je vois cela comme une précaution supplémentaire ou une bonne pratique à mettre en place. En effet de cette manière je pourrais possiblement me rendre compte de l'attaque avant que mon disque usb de backup soit monté automatiquement et donc le déconnecter physiquement afin qu'il ne soit pas affecté par l'attaque. Je dis également moins sensibles car il y aura toujours moyen qu'on puisse y accéder. Mais cela complique la tâche de l'attaquant.

Passons à la mise en pratique :

Pour cela je compte utiliser la fonction d'éjection après la sauvegarde de hyper backup. Il ne me reste donc plus qu'à créer un script qui monte automatiquement mon disque dans le planificateur des tâches pour qu'il le monte 5 minutes avant la tâche de sauvegarde par exemple.

Je me suis donc connecté en SSH via Putty à mon NAS (DSM7.1) avec 2 disques USB connectés dont l'un éjecté mais encore connecté. Ceci afin de localiser les répertoires des montages.

Les répertoires d'intérêts localisés :

/volume1 (c'est le volume de donnée du NAS ou sont sauver les dossiers partager par exemple)

/volumeUSB1 (c'est le répertoire principal du disque USB connecté mais éjecté)

      /volumeUSB1/@eaDir

/volumeUSB2 (c'est le répertoire principal du disque USB connecté et monter)

    /volumeUSB2/@eaDir

    /volumeUSB2/usbshare (répertoire de montage du disque USB)

 

j'ai ensuite utilisé la commande lsusb pour détecter le matériel connecter en USB sur mon NAS

1d6b:0002:0404 09  2.00  480MBit/s 0mA 1IF  (Linux 4.4.180+ xhci-hcd xHCI Host Controller 0000:00:15.0) hub
  |__1-1         xxxx:xxxx:xxxx xx  2.10  480MBit/s 100mA 1IF  (Seagate Backup+ Hub xxxxxxxxx) hub
  |__1-2         xxxx:xxxx:xxxx xxx  1.10   12MBit/s 20mA 1IF  (EATON Eaton 5SC xxxxxxxxx)
  |__1-4         xxxx:xxxx:xxxx xx  2.00  480MBit/s 200mA 1IF  (Synology Diskstation xxxxxxxxxx)
|__usb2          xxxx:xxxx:xxxx xx  3.00 5000MBit/s 0mA 1IF  (Linux 4.4.180+ xhci-hcd xHCI Host Controller 0000:00:15.0) hub
  |__2-1         xxxx:xxxx:xxxx xx  3.00 5000MBit/s 0mA 1IF  (Seagate Backup+ Hub xxxxxxxxxxx) hub
    |__2-1.1     xxxx:xxxx:xxxx xx  3.10 5000MBit/s 0mA 1IF  (Seagate Backup+ Hub xxxxxxxxxxxx)
    |__2-1.2     xxxx:xxxx:xxxx xx  3.00 5000MBit/s 896mA 1IF  (Intenso External USB 3.0 xxxxxxxxxxx)

On voit ici que mes deux disques usb sont visibles sur les deux dernière lignes 2-1.1 (Disque monté), 2-1.2 (disque éjecté)

On les retrouve également sous /sys/bus/usb/devices:

1-0:1.0  1-1  1-1:1.0  1-2  1-2:1.0  1-4  1-4:1.0  2-0:1.0  2-1  2-1.1  2-1:1.0  2-1.1:1.0  2-1.2  2-1.2:1.0  usb1  usb2

La commande sudo fdisk -l donnera plus de détails concernant les périphériques USB.

Je ne vais pas afficher ici l'entier du retour mais uniquement les devices qui m’intéresse :

USB 2-1.1:

Disk /dev/usb1: 7.3 TiB, 8001563221504 bytes, 15628053167 sectors
Disk model: Backup+ Hub BK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx

Device      Start         End     Sectors  Size Type
/dev/usb1p1   256 15628048064 15628047809  7.3T Linux filesystem

USB 2-1.2:

Disk /dev/usb3: 3.7 TiB, 4000787030016 bytes, 976754646 sectors
Disk model: External USB 3.0
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: xxxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx

Device      Start       End   Sectors  Size Type
/dev/usb3p1    32 976751999 976751968  3.7T Linux filesystem

Ces identifiant sont également visibles sous /dev

Avec ces différentes commandes on a donc bien pu vérifier que mon disque éjecté mais connecté physiquement au NAS est bien visible dans le system d'exploitation bien que son contenu ne soit pas accessible.

Pour le rendre accessible, il va falloir le monter dans /volumeUSB1 de la même manière que son homologue /volumeUSB2

Je vais donc créer un dossier usbshare dans volumeUSB1 avec la commande mkdir. sudo mkdir usbshare

On peut aussi le supprimer avec la commande rmdir. sudo rmdir usbshare

Puis le monter avec mount. sudo mount /dev/usb3p1 /volumeUSB1/usbshare

Ou le démonter avec la commande umount. sudo umount usbshare

Après cette commande le contenu de mon disque précédemment éjecté et disponible sous /volumeUSB1/usbshare le disque est donc monté...

En revanche le disque n'est pas détecté comme monté dans DSM...

 

J’ai essayé également de créer un dossier partager depuis DSM et de l'utiliser comme destination de montage pour mon disque USB et cela fonctionne (je peux voir le contenu du disque depuis le web GUI de DSM)... mais impossible de le sélectionner comme destination dans hyperbackup malheureusement.

 

J’imagine donc qu'il faudra modifier un fichier quelque part afin de déclarer ce disque comme monter pour DSM. Mais je n'ai pas encore trouvé la solution. Du reste si quelque à cette information je la prends volontiers avec tous mes remerciements.

P.S:

j'ai également esssayer la commande: echo "2-1.2" > /sys/bus/usb/drivers/usb/bind
-ash: echo: write error: No such device

bien que 2-1.2 soit bien visible sous /sys/bus/usb/drivers/usb ...

Modifié par Rbatimus
Lien vers le commentaire
Partager sur d’autres sites

Ok problème résolu:

pour monter les disques depuis ssh ils doivent être démonter en ssh aussi avant, cela même si ils on été éjecté proprement depuis DSM.

sinon le montage ne fonctionne pas toujours...

Ce qui implique d'avoir deux Scripts:

l'un qui monte les diques:

#!/bin/bash

echo "2-1" > /sys/bus/usb/drivers/usb/bind

et un autre qui les démontes:

#!/bin/bash

echo "2-1" > /sys/bus/usb/drivers/usb/unbind

Je programme l' execution du script de démontage de mes disques 5 minutes avant l'execution du script de montage automatique. Le montage s'éxecute également 5 minutes avant leur utilisation par Hyper backup. Hyper backup se charge de les éjecter à la fin de la tâche de backup...

ce qui fait que les disques sont monté uniquement durant leur temps d'utilisation +5 minutes...

 

c'est pas très propre mais ça fait le job.

Si quelqu'un à une meilleur idée je suis prenneur ;).

 

 

Modifié par Rbatimus
Lien vers le commentaire
Partager sur d’autres sites

  • 5 semaines après...

Salut @Rbatimus, je cherche à faire exactement comme toi afin de sécurisé les sauvegardes.

Je trouve bien dommage que cette fonction ne soit intégré directement dans les menus avec programmation, alors que cela me semble essentiel avec les ransomwares qui pullules actuellement.

J'aimerai intégrer ces scripts dans le planificateur de taches, et comme je suis vraiment pas doué en script, peux tu me dire je que dois écrire dans le champ "script défini par l'utilisateur".

Merci d'avance,

Lien vers le commentaire
Partager sur d’autres sites

Je viens de faire plusieurs tests et les résultats sont mitigés.

Pour l'usb de la face avant (usb2-1) cela fonctionne , mais pour l'usb à l'arrière (usb1-4) nada.

Voici les infos usb que j'ai en SSH.

|__usb1          1d6b:0002:0404 09  2.00  480MBit/s 0mA 1IF  (Linux 4.4.180+ xhci-hcd xHCI Host Controller 0000:00:15.0) hub
  |__1-4         f400:f400:0100 00  2.00  480MBit/s 200mA 1IF  (Synology DiskStation 7F0004189F13F212)
|__usb2          1d6b:0003:0404 09  3.00 5000MBit/s 0mA 1IF  (Linux 4.4.180+ xhci-hcd xHCI Host Controller 0000:00:15.0) hub
  |__2-1         174c:55aa:0100 00  3.00 5000MBit/s 0mA 1IF  (asmedia 1153 1234567897B5)
  |__2-2         174c:1153:0100 00  3.00 5000MBit/s 0mA 1IF  (Ugreen Ugreen Storage Device 26A1EE835F6F)

et voici le script pour l'usb arrière,

démontage:

#!/bin/bash
echo "1-4" > /sys/bus/usb/drivers/usb/unbind 

montage:

#!/bin/bash
echo "1-4" > /sys/bus/usb/drivers/usb/bind 

Ton aide serait la bienvenue,🤕

Modifié par telenaze
Lien vers le commentaire
Partager sur d’autres sites

En fin de compte j'ai réussi, voici donc les scripts pour l'usb arrière,

Démontage:

#!/bin/bash
echo "1-2" > /sys/bus/usb/drivers/usb/unbind 

Montage:

#!/bin/bash
echo "1-2" > /sys/bus/usb/drivers/usb/bind 

Merci à toi pour ce post sans qui je n'aurais surement pas réussi à réaliser des sauvegardes protégées contre  les spamwares. 😉

Lien vers le commentaire
Partager sur d’autres sites

Après avoir programmé tout cela , je me demandais s'il n'était pas possible d'avoir un script qui fasse le démontage suivi du montage après un délais de 30secondes par exemple.

nous aurions ainsi qu’un seul script avant le lancement d'hyper backup.

A suivre...

Modifié par telenaze
Lien vers le commentaire
Partager sur d’autres sites

Après quelques recherches, j'ai trouvé une solution qui permet d'avoir un seul script pour démonter et remonter le disque:

#!/bin/bash
echo "1-2" > /sys/bus/usb/drivers/usb/unbind 
sleep 20
echo "1-2" > /sys/bus/usb/drivers/usb/bind 

sleep 20 :  l'unité prise en compte est la seconde.

Si nous voulons passer en minute il faut ajouter un "m" à la fin de l'unité de "sleep". De même pour les heures ("h") ou encore pour les jours ("d").

ex: sleep 10m pour 10minutes

😉

Lien vers le commentaire
Partager sur d’autres sites

Synology vient de me répondre,

Reste plus qu'a attendre et croiser les doigts.😉

Citation
Bonjour,
 
Merci d'avoir pris le temps de nous transmettre vos retours.
 
Nous attachons une grande importance à ces retours et aux suggestions de nos utilisateurs, qui nous permettent d'améliorer constamment nos produits.
Nous prenons note de votre suggestion et allons la transmettre à nos équipes de développement afin qu'elles en étudient la faisabilité.
 
Pour recevoir les actualités des produits Synology, nous vous invitons à créer un compte Synology et à vous inscrire à notre newsletter en suivant le lien ci-dessous :
 
 
Cordialement,
L'équipe Synology

 

Modifié par telenaze
Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

Salut @telenaze,

Navré pour le délais de réponse, cela faisait un moment que je n'était pas repassé par le forum avec les fêtes.

Je vois que dans l'intervalle tu as bien pu progresser sur ton script, bravo & merci pour tes retours qui seront utiles à d'autres!

En effet, c'est bien vu de l'avoir signalé à l'équipe de dev Synology.

 

Modifié par Rbatimus
Lien vers le commentaire
Partager sur d’autres sites

Le 16/12/2022 à 13:55, telenaze a dit :

En fin de compte j'ai réussi, voici donc les scripts pour l'usb arrière,

Démontage:

#!/bin/bash
echo "1-2" > /sys/bus/usb/drivers/usb/unbind 

Montage:

#!/bin/bash
echo "1-2" > /sys/bus/usb/drivers/usb/bind 

Merci à toi pour ce post sans qui je n'aurais surement pas réussi à réaliser des sauvegardes protégées contre  les spamwares. 😉

@telenaze, Je ne dirais pas que ta sauvegarde est maintenant protégée contre les ransomware. Ce serait faux de le dire car un attaquant qui se procurerais tes accès root du NAS serait capabale de remonter et d'infecter ta sauvgarde local. mais ce genre d'attaques à large échelle sont automatisés et ce qui sort d'un configuration généraliste sera plus difficilement attaquable... donc tant que ton disque n'est pas monté il sera théoriquement mieux protégé...

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

Petit addendum qui pourra s'avérer utile:

la commande 

echo "1-2" > /sys/bus/usb/drivers/usb/unbind

équivaut à retirer le câble USB du disque dure du NAS... ce qui nous vaut un joli message du system "le dique xxx n'a pas été éjecté correctement".

Si on veut faire les choses proprement il faut alors démonter la partition système du disque avant de l'éjecter.

Pour se faire il faut identifier le nom de la partition avec la commande:

df -h

par exemple: /dev/usb1p1

 

ce qui nous donne le scripte suivant pour éjecter proprement le disque:

umount /dev/usb1p1 #démontage de la partition du disque

sleep 10 #une pause de 10 secondes laisse le temps au système de finir le démontage de la partition

echo "1-2" > /sys/bus/usb/drivers/usb/unbind #éjection du disque

 

Après execution de ce script le message "le dique xxx n'a pas été éjecté correctement", n'apparaitra plus ce qui soulagera notre file de notification.

 

Lien vers le commentaire
Partager sur d’autres sites

@telenaze chez moi cela fonctionne parfaitement en tout cas.

 

Es-tu certain d'avoir démonter la bonne partition?

qu'es-ce que la commande df -h te retourne?

 

Sinon tu peux essayer peut-être d'augmenter le temps entre le démontage de la partition et l'éjection du disque...

Modifié par Rbatimus
Lien vers le commentaire
Partager sur d’autres sites

Salut,

Je viens de refaire un test et j'ai le message d'erreur.

voici le résultat de df -h

/dev/usb1p1                         7.3T  5.2T  2.1T  72% /volumeUSB2/usbshare

et voici le script

umount /dev/usb1p1  #démontage de la partition du disque
sleep 20 #une pause de 20 secondes laisse le temps au système de finir le démontage de la partition
echo "1-2" > /sys/bus/usb/drivers/usb/unbind #éjection du disque 

 

Lien vers le commentaire
Partager sur d’autres sites

Oui ton script semble correct...

Voici le mien:

#!/bin/bash

umount /dev/usb1p1
sleep 10
echo "2-1.3" > /sys/bus/usb/drivers/usb/unbind

je vois que tu as fais un copier-coller depuis le forum. Tu peux encore essayer d'effacer ton script et de le taper manuellement (Sans les commentaires) pour écarter l'ajout d'un caractère spécial dans le script...

 

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

Bonjour à tous,

Tout d'abords merci beaucoup pour vos questions / réponses.

Je suis un gros débutant et il y a énormément de topics et d'infos qui sont incroyable d’utilité et de pédagogie ici.

j'ai eu exactement comme vous la problématique de monté/démonté un hdd externe de manière automatisé

J'ai également eu le même problème que telenaze concernant le message d'erreur malgré le "umount /dev/usb1p1"

dans les log de la tache j'ai trouver le pourquoi du comment : umount: /volumeUSB1/usbshare: target is busy.

Du coup j'ai simplement rajouter un "-l" à ma commande umount, sur les conseil d'ici : https://linuxhint.com/umount-target-busy/   (dsl les modos si j'ai pas le droit)

ce qui me donne chez moi :

 #!/bin/bash

umount -l /dev/usb1p1
sleep 10
echo "1-1" > /sys/bus/usb/drivers/usb/unbind

 

et tout marche niquel pour le démontage.

en espérant avoir apporter ma pierre,

Très belle journée à vous =)

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...
  • 7 mois après...

Merci à vour tous pour ce beau boulot.. Cela fait déjà 2 ou 3 ans que je me re-penche occasionnellement sur ce problème qui ne se manifestait uniquement après une mise à jour DSM ou u redémarrage du NAS.

Et je comprends pourquoi maintenant: Lorsque le démontage était effectué par Hyperbackup, il était fait proprement. (démontage avant eject)

Bonne journée à tous.

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.