mardi 2 octobre 2012

Cobian Backup et Multiple disque USB

Cobian Backup est un excellent logiciel de backup open-source... l'un des meilleurs sans être une usine à gaz!
Même après des années d'utilisation j'en reste pleinement satisfait.

Il y a cependant une ombre au tableau.
Si l'on peu utiliser plusieurs disques USB pour faire des backups (disons 1 disque différent par jour), il est impossible d'avoir une lettre de volume unique pour tous ces lecteurs.
On a pas non plus la certitude que l'on aura toujours la même lettre pour un lecteur lorsuq'il est rebranché plus tard.

C'est ennuyant parce que Cobian Backup est intimement lié à la lettre d'identification du volume.

Il reste alors deux solutions possibles:
  1. Créer une tâche Cobian Backup par disque de backup (en assignant une lettre différente à chaque lecteur)... une approche pas vraiment "pro"
  2. Utilise un batch qui essaye de re-mapper le lecteur sur une lettre choisie arbitrairement (par exemple Z:)... nettement plus pro
MapDrive.bat
Dans le billet "Usb drivers / Subst solution", j'ai trouvé un batch qui teste l'existence d'un fichier pour détecter le lecteur backup.
Une fois le lecteur détecté, il utilise l'instruction MountVol pour remonter le lecteur sur une lettre arbitrairement choisie.

Hé bien... chapeau bas! Voici une méthode simple et élégante.

@echo off
rem ********************************************************
rem changes disk drive letter based off file test

rem     File/dir To Test For
rem     ex   E:\backup.tag   = backup.tag
rem     ex2  E:\iPod_Control = iPod_Control

SET TEST=backup.tag


rem    Drive to Move To

SET DEST=Z:

rem    Media Name
rem    ex Backup or "USB STICK"

SET NAME=GGBackup

rem ********************************************************

echo Testing Destination %DEST%
if exist %DEST%\%TEST% goto good
if exist %DEST% goto fail_inuse
echo Finding %NAME%

set DRV=E:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=F:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=G:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=H:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=I:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=J:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=K:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=L:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

goto fail


:found
echo Found  %NAME% At %DRV%
echo Moving %NAME% To %DEST%

FOR /F "delims=" %%x IN ('MOUNTVOL %DRV% /L') DO SET DF=%%x

IF "%DF%"=="The system cannot find the file specified." GOTO failmap

echo.
echo Unmapping Drive %DRV%
MOUNTVOL %DRV% /D
echo Remapping Drive %DEST%
MOUNTVOL %DEST% %DF%

echo.
Echo Testing %DEST%
if exist %DEST%\%TEST% goto good
echo Faild Test
echo %NAME% Status Unknown
goto end

:good
echo.
echo %NAME% Is Properly Located At %DEST%
goto end

:failmap
echo Failed To Reassign Found Drive
goto end

:fail_inuse
echo %DEST% Is Inuse And Not Target Drive
echo Remap Failed
goto end

:fail
echo %NAME% Not Found
goto end


:end

Ce qu'il y a de vraiment bien avec ce batch, c'est que "Cobian Backup" peut l'exécuter juste avant la tâche de backup :-)))

RemoveDrive
N'essayez pas de démonter votre clé USB avec mountvol, vous allez avoir une sacré surpris!!!
MountVol est un peu trop radical et le périphérique n'est plus remonté lorsqu'il est rebranché (voir l'autre article publié ce jour).

Pour démonter un Volume en toute sécurité, il faut utiliser le programme RemoveDrive qui fonctionne à merveille.
RemoveDrive peut être trouvé ici http://www.uwe-sieber.de/drivetools_e.html

UnMapDrive
Sur base du premier script, ce dernier à été modifié pour appeler la commande RemoveDrive.exe au lieu de MountVol.
Il teste l'existence d'un fichier (backup.tag) et démonte ensuite le volume.

C'est une version vite fait... mais un bon début ;-)
@echo off
rem ********************************************************
rem changes disk drive letter based off file test

rem     File/dir To Test For
rem     ex   E:\backup.tag   = backup.tag
rem     ex2  E:\iPod_Control = iPod_Control

SET TEST=backup.tag


rem    Drive to Move To

SET DEST=Z:

rem    Media Name
rem    ex Backup or "USB STICK"

SET NAME=GGBackup

rem ********************************************************

echo Testing Destination %DEST%
if exist %DEST%\%TEST% goto good
if exist %DEST% goto found
echo Finding %NAME%

set DRV=E:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=F:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=G:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=H:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=I:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=J:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=K:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

set DRV=L:
echo testing %DRV%
if exist %DRV%\%TEST% goto found

goto fail


:found
echo Found  %NAME% At %DRV%
echo Moving %NAME% To %DEST%

rem FOR /F "delims=" %%x IN ('MOUNTVOL %DRV% /L') DO SET DF=%%x

rem IF "%DF%"=="The system cannot find the file specified." GOTO failmap

echo.
echo Unmapping Drive %DRV%
removedrive.exe %DRV%
goto end

:good
echo.
echo %NAME% Is Properly Located At %DEST%
echo Unmapping Drive %DEST%
c:\dev\removedrive.exe %DEST%
goto end

rem :failmap
rem echo Failed To Reassign Found Drive
rem goto end

:fail
echo %NAME% Not Found
goto end


:end

Aucun commentaire: