Configurer la restauration des versions précédentes

 

Depuis Windows 7 (ou Vista), il est possible de configurer des points de restauration système et/ou les versions précédentes des fichiers. (via les propriétés de l’ordinateur … “Propriétés système” … Onglet “Protection du système” … Bouton “Configuration”).
ShadowCopy1
A mon avis, cette faculté est très intéressante, à minima pour offrir un service de restauration instantané des fichiers locaux suite à une destruction ou un écrasement accidentel. (et ce sans recourir à des solutions “lourdes” de restauration).

Présentation

Ce service s’appuie sur la fonctionnalité des clichés instantanés de volume, disponible également sur les versions serveurs depuis 2003, et s’exploite au travers des accès partagés. Autrement dit, une version précédente d’un volume “c:\” est accessible via “\\localhost\c$\<date du cliché>”.

Les réglages

Si vous souhaitez exploiter cette capacité de restauration instantanée, vous devrez distinguer plusieurs scénarios :

  • Sur les postes, les  points de restauration système ET les versions précédentes des fichiers sont activés par défaut. (Les versions précédentes peuvent également être activés sur les autres partitions de données)
  • Sur les serveurs, les clichés instantanés de volume (permettant l’exploitation des versions précédentes des fichiers sur les partages) ne sont pas activés par défaut. (En cas d’activation, une tache planifiée par défaut, mais modifiable, réalisera un cliché à 7h00 et un autre à 12h00, et ce du lundi au vendredi. Donc, en gros, une capacité de revenir à 1/2 journée de travail).

Ensuite, il vous faudra choisir :

  • L’emplacement de la zone de stockage : Par défaut, la zone de stockage est située dans la même partition sous le dossier protégé “System Volume Information”
  • Estimer la taille de la zone stockage : Cette taille peut varier de 1% à illimitée, mais il est important de comprendre 2 choses dans le mécanisme :
    • Cette zone ne grossit pas en fonction du volume des données supprimées (ce n’est pas une corbeille). Hormis, sa taille de départ d’environ 300Mo, son volume progressera selon le nombre des unités d’allocation (ou blocs élémentaires) effectivement remplacés, lors des modification ou suppression de fichiers.
    • Si l’espace libre de la partition est faible, le système ne pourra pas utiliser de blocs “libres” et sera donc obligé de les déplacer dans la zone stockage.
  • Réaliser la configuration manuellement, ou via GPO (et c’est là où le bat blesse, car toutes les options de réglages ne sont pas proposées.)

Configuration automatique

Pour activer ces facultés de restauration, Microsoft propose plusieurs solutions “partielles”

Pour activer, ou désactiver automatiquement les points de restauration, sur les systèmes d’exploitation clients, tels que Windows7, Vista ou WindowsXP il est possible d’utiliser  les applets de commande Powershell v2 ou + :

  • Enable-ComputerRestore c::
  • Disable-ComputerRestore c:

Pour modifier automatiquement la taille de la zone de stockage, il faut utiliser l’outil “vssadmin” tel que :

  • vssadmin Resize ShadowStorage /For=C: /On=D: /MaxSize=900MB
  • vssadmin Resize ShadowStorage /For=C: /On=C: /MaxSize=5%

/For : Spécifie le volume pour lequel la taille maximale du stockage doit être modifiée

/On  : Spécifie le volume de stockage
Si MaxSize n’est pas spécifiée, l’espace utilisable est “illimité”. La valeur de MaxSize doit être supérieure ou égale à 300 Mo et accepte les suffixes suivants : KB, MB, GB, TB, PB et EB. Vous pouvez également utiliser les suffixes B, K, M, G, T, P et E. Si aucun suffixe n’est spécifié, MaxSize est considéré en octets. La valeur de MaxSize peut également être exprimée en pourcentage, comme dans l’exemple ci-dessus.

Pour l’exploitation, il est possible de masquer/démasquer l’accès à la restauration des versions précédentes locales, à distance ou dans les sauvegardes Windows via les paramètres de stratégie de groupe (GPO) suivants :

Configuration Ordinateur … Modèles d’administration … Composants Windows … Versions Précédentes

  • Empêcher la restauration des versions précédentes à partir des sauvegardes
  • Masquer la liste des versions précédentes pour des fichiers locaux
  • Empêcher la restauration des versions locales précédentes
  • Masquer la liste des versions précédentes pour des fichiers distants
  • Empêcher la restauration des versions distantes précédentes
  • Masquer les versions précédentes des fichiers d’emplacement de sauvegarde

Donc, à partir de ce postulat, on peut envisager un script de démarrage d’ordinateur (GPO) mais j’avoue que je suis quelque peu déconcerté face au comportement des fameuses applets de commande mentionnées précédemment. En effet, selon l’option active dans la configuration de la protection du système, le résultat est variable, ce qui ne semble pas étonnant du fait qu’il y a 3 options possibles pour seulement 2 commandes réciproques.
ShadowCopy2

Théoriquement, Enable-ComputerRestore positionne la 1ère option, et  Disable-ComputerRestore  positionne la 3ème option. Cela semble se vérifier, dès lors que la 1ère ou la 3ème option est active au moment où la commande est jouée, mais dès lors que c’est la 2ème option qui est active, la commande Enable-ComputerRestore positionne bien la 1ère option mais la commande Disable-ComputerRestore revient à ce 2ème choix, et non sur la 3ème option. Si on positionne manuellement la 3ème option, la commande Enable-ComputerRestore positionne bien la 1ère option.

Les réglages sont normalement sous “HKLM:\SOFTWARE\Microsoft\Windows NT\CurentVersion\SystemRestore” mais il semble que ce comportement soit lié à la présence d”une clé “{3E7F07C9-6BC3-11DC-A033-0019B92BB8B1}” située sous “HKLM:\SOFTWARE\Microsoft\Windows NT\CurentVersion\SPP\Client” qui référence les volumes protégés par ce mécanisme des versions précédentes. (Une autre valeur {09F7EDC5-294E-4180-AF6A-FB0E6A0E9513} est ajoutée si la protection système est également active).  En supprimant la clé “Clients” , la commande Disable-ComputerRestore sélectionne bien la 3ème option, et la commande Enable-ComputerRestore sélectionne bien la 1ème option en régénérant la clé “Clients” et les entrées idoines dans le registre. 

Donc, la problématique restante est maintenant de définir la donnée à injecter dans cette valeur Reg_Multi_SZ {3E7F07C9-6BC3-11DC-A033-0019B92BB8B1} qui doit correspondre à l’identifiant du ou des volume(s) concerné(s). On peut le récupérer via une requête WMI mais il faudra encore l’ajuster… en ajoutant “:LabelDuVolume (Lettre%3A)” à la fin.

Proposition de script

Ca fait mal à la tête hein !? Tire la langue , je vous propose donc quelques éléments de code Powershell afin d’essayer d’automatiser un peu tout cela :

Function Set-FileProtect {

Param
( 
  [array]$Drives = "C",
  [string]$StoreSize = "5%"
  )

# Code pour la génération du contenu de la valeur de registre
$Value = @(); $MultiValue = New-Object System.Collections.Arraylist(,$value)
foreach ($Drive in $Drives) {
  $Item ++
  $Query = "select * from win32_volume where DriveLetter='" + $($Drive) + ":'"
  $Volume = Get-WmiObject -Query "$Query" | select DeviceID, Label, Name 
  $VolID = $Volume.DeviceID.toString()
  $Label = $Volume.Label.toString() 
  $VolLetter = $Volume.Name.chars(0)
  if ($Item -lt $Drives.Count -and $Item -ne $Drives.Count) { $Multi = ","} else { $Multi = ""}
  $MultiValue.Add("$VolID" + ":" + "$Label" + " (" + "$VolLetter" + "%3A)" + $Multi) 
 }
 # DEBUG write "MultiValue : $MultiValue" 

# Code pour la suppression/ recréation de la clé et la valeur de registre
  $key = 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SPP\Clients'
  if (Test-Path $key) { 
    Remove-Item $Key -Recurse 
    }
  New-Item -Path $key -ItemType Registry
  New-itemProperty $key -name "{3E7F07C9-6BC3-11DC-A033-0019B92BB8B1}" -value $MultiValue -type MultiString

# Code pour la création de la zone de stockage
  $Cmd = "vssadmin"
  foreach ($Drive in $Drives) {
    $Arg= @("Resize","ShadowStorage","/For=$($Drive):","/On=$($Drive):","/MaxSize=$StoreSize")
    # DEBUG write "Execution : $Cmd $Arg"
    Start-Process $Cmd -ArgumentList $Arg -Wait -NoNewWindow
  }  #>
} 

# Usage : Set-FileProtect –Drives C,D –StoreSize 10%
# Exemple :
Set-FileProtect –Drives C –StoreSize 3%

Par défaut la fonction active la protection sur le volume système et affecte une zone de stockage de 5%. Certes, ce code est perfectible, mais il dégrossit le sujet. A l’occasion, j’essayerais d’élaborer un script plus élégant, qui par exemple, teste si une protection est en place afin de ne pas tout casser à chaque exécution…. En attendant, si vous souhaitez généraliser ces réglages via un script de démarrage, je vous conseille d’ajouter une clé ou un fichier de votre cru en fin de tâche, puis d’ajouter un test de présence de l’élément en début du script.

Bonne continuation

Christophe

3 Commentaires

  1. Pascal

    Bonjour,
    Je me permets de vous contacter concernant la “Configuration de la restauration des versions précédentes”.
    Tout d’abord merci pour cet article qui est le plus détaillé que j’ai trouvé. Il est très bien expliqué.
    J’ai suivi les informations indiquées dans votre article.
    Cependant, j’ai une question concernant la problématique de la valeur Reg-Multi_SZ {3E7F07C9-6BC3-11DC-A033-0019B92BB8B1}:
    En effet, je souhaite déployer l’ajout de cette valeur sur l’ensemble de mon parc mais impossible de le faire sur la partition D: des postes de travail.
    J’ai tout essayé: “:LabelDuVolume (Lettre%3A)” ….
    Mais cela ne fonctionne pas sur la partition D.
    Cela fonctionne uniquement sur ma partition C:

    Auriez-vous une idée pour que cela fonctionne sur la partition D ?

    D’avance merci pour votre aide,

    Cordialement

    Pascal

    Répondre
    1. Christophe

      Bonjour Pascal,
      Je viens de constater que le script proposé active l’option sur la partition stipulée en paramètre mais la désactive sur les autres partitions. Autrement dit, si la protection est activée sur C:, la commande “Set-FileProtect –DriveLetter D: –StoreSize 3%” l’active bien sur D: mais la désactive sur C: dans le même temps.
      Si j’ai bien compris, vous souhaitez activer ce réglage sur plusieurs partitions et non pas uniquement sur D: ?
      Si c’est le cas, je vais essayer de réviser la logique de mon script pour y remédier, dès que possible,…
      A bientôt

      Répondre
  2. Christophe

    Voilà, j’ai fait une correction du script (dans l’article) qui accepte maintenant une ou plusieurs lettres en paramètre (séparateur virgule et sans les “:”).
    A priori, ça marche sur ma conf. avec 2 partitions mais j’avoue que c’est un peu à l’arrache …
    en attendant mieux 🙂
    Bonne continuation

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. Apprenez comment les données de vos commentaires sont utilisées.