RÉSUMÉ
Cet article contient des informations sur un programme simple, rapide et éprouvé d’amélioration de processus nommé TRIM. Ce dernier permet aux entreprises d’atteindre un niveau élevé de sécurité et de conformité. Nous avons déjà implémenté ce programme chez Devolutions et le recommandons chaudement.
Table des matières
- TRIM, c'est quoi?
- Le processus de vérification
- Le processus de validation
- Le script PowerShell
- Le mot de la fin
TRIM, c'est quoi?
TRIM est une commande d’interface ATA. Lorsque vous utilisez votre lecteur ou que vous modifiez des données, le SSD doit s’assurer que la moindre information non valide est supprimée et que de nouvelles informations peuvent être enregistrées sur l’espace ainsi libéré. En d’autres termes, le programme TRIM indique au SSD quelles sont les données qui peuvent être supprimées.
Pourquoi ce programme est-il nécessaire? En raison de la façon dont les SSD lisent et écrivent de l’information, les données ne sont pas réellement supprimées sur commande (même si elles semblent disparaître des documents et des appareils). La section du SSD qui contient les données indésirables est plutôt signalée comme n’étant plus en usage. La commande TRIM sert à confirmer que les données sont bien supprimées. Une fois cette confirmation effectuée, la suppression finale est gérée par Active Garbage Collection lors de la prochaine période d’inactivité du système d’exploitation.
Le processus de vérification
Chez Devolutions, nous avons implémenté un processus de vérification logique et optimisé auquel participent notre équipe informatique et notre équipe de sécurité :
- L’équipe informatique s’occupe des partitions, de l’effacement des disques et de la réinstallation de Windows. Les disques sont ensuite confiés à notre équipe de sécurité.
- L’équipe de sécurité analyse le travail accompli jusque-là et s’assure que les données ne sont plus récupérables. Les disques sont alors rendus à l’équipe informatique pour être réinitialisés.
Ce processus réduit le nombre de tâches que doit effectuer chaque équipe. Il s’agit-là d’un bel exemple de comment la sécurité peut améliorer l’efficacité et la productivité d’un processus.
Le processus de validation
Pour nous assurer que le programme TRIM est bel et bien actif et que le processus fonctionne correctement, nous avons créé un script PowerShell déployable avec notre GPM. Ce script génère une tâche de validation périodique à partir de TRIM. Cette étape effectuée, nous analysons les journaux obtenus par notre SIEM.
Voici le résultat de cette commande :
Description | |
---|---|
NTFS DisableDeleteNotify = 0 | Ce statut indique que TRIM est déjà activé sur les SSD avec NTFS. |
NTFS DisableDeleteNotify = 1 | Si la valeur 1 est affichée, alors les TRIM est désactivé sur les SSD avec NTFS. |
NTFS DisableDeleteNotify is not currently set | Ce statut indique que le support TRIM est automatiquement activé dès qu’un SSD avec NTFS est connecté. |
ReFS DisableDeleteNotify = 0 | Le 0 indique que TRIM est activé sur les SSD avec ReFS. |
ReFS DisableDeleteNotify = 1 | La valeur 1 signifie ici que TRIM est désactivé pour les SSD avec ReFS. |
ReFS DisableDeleteNotify is not currently set | Ce statut indique que le support TRIM est automatiquement activé dès qu’un SSD avec ReFS est connecté. |
Le script PowerShell
Voici le script PowerShell, créé par nos soins, que nous vous invitons à utiliser pour votre entreprise :
# Trim Validation
$scriptblock = {
param (
)
function Write-Log {
[CmdletBinding()]
param (
[Parameter(Mandatory)]
[String]
$Message,
[Parameter(Mandatory)]
[int32]
$EventID,
[Parameter(Mandatory)]
[String]
$Type
)
Write-EventLog -LogName "Windows PowerShell" -Source "TrimPS1" -EventId $EventID -Message $Message -EntryType $Type
}
function Get-TrimConfigurationntfs{
$trimntfs = fsutil behavior query disabledeletenotify ntfs
$trimntfsvalue = $trimntfs.substring(27,1)
if ($trimntfsvalue -ne "0"){
$message = "Trim NTFS is inactive"
Write-Log -EventId 2 -Message $message -Type "Warning"
}
else{
$message = "Trim NTFS is active"
Write-Log -EventId 0 -Message $message -Type "Information"
}
}
function Get-TrimConfigurationrefs{
$trimrefs = fsutil behavior query disabledeletenotify refs
$trimrefsvalue = $trimrefs.substring(27,1)
if ($trimrefsvalue -ne "0"){
$message = "Trim REFS is inactive"
Write-Log -EventId 2 -Message $message -Type "Warning"
}
else{
$message = "Trim REFS is active"
Write-Log -EventId 0 -Message $message -Type "Information"
}
}
Get-TrimConfigurationntfs
Get-TrimConfigurationrefs
}
##### Section opérationnelle du script #####
function Write-Log {
[CmdletBinding()]
param (
[Parameter(Mandatory)]
[String]
$Message,
[Parameter(Mandatory)]
[int32]
$EventID,
[Parameter(Mandatory)]
[String]
$Type
)
Write-EventLog -LogName "Windows PowerShell" -Source "TrimPS1" -EventId $EventID -Message $Message -EntryType $Type
}
$jobname = "Trim-Verification";
$accountId = "SYSTEM";
$task = Get-ScheduledJob -Name $jobname -ErrorAction SilentlyContinue
New-EventLog -LogName 'Windows PowerShell' -Source 'TrimPS1' -ErrorAction Ignore
if ($null -ne $task){
Unregister-ScheduledJob $task -Confirm:$false;
}
try {
$trigger = New-JobTrigger -Weekly -DaysOfWeek Monday, Tuesday, Wednesday, Thursday, Friday -At "11:00" -WeeksInterval 1 # Vérification du Lundi au Vendredi à 11h
$options = New-ScheduledJobOption -ContinueIfGoingOnBattery -StartIfOnBattery -RequireNetwork -RunElevated;
Register-ScheduledJob -Name $jobname -ScriptBlock $scriptblock -ScheduledJobOption $options -Trigger $trigger;
$principal = New-ScheduledTaskPrincipal -UserID $accountId -LogonType ServiceAccount -RunLevel Highest;
$psJobsPathInScheduler = "\Microsoft\Windows\PowerShell\ScheduledJobs";
$someResult = Set-ScheduledTask -TaskPath $psJobsPathInScheduler -TaskName $jobname -Principal $principal;
$message = "Scheduled job ok"
Write-Log -EventId 65000 -Message $message -type "Information"
}
catch {
$message = "Unable to setup scheduled job. This is an error"
Write-Log -EventId 65001 -Message $message -type "Warning"
$task = Get-ScheduledJob -Name $jobname -ErrorAction SilentlyContinue
if ($null -ne $task){
Unregister-ScheduledJob $task -Confirm:$false;
}
exit 1
}
Si vous utilisez notre script PowerShell, alors portez une attention particulière aux EventID suivants :
- EventID 0 si TRIM est actif
- Information
- TRIM (NTFS ou REFS) est actif
- EventID 2 si le programme TRIM est inactif
- Warning
- TRIM (NTFS ou REFS) est inactif
Le mot de la fin
D’après notre expérience, le programme TRIM est une solution efficace et fiable pour ce qui est de réduire le nombre d’étapes nécessaires dans la gestion du matériel à des fins commerciales ou de redistribution. Nous ne sommes pas les seuls à approuver cette méthode. Par exemple :
- L’entreprise Data Rescue Labs a déclaré dans un vidéo YouTube que les compagnies qui vendent des logiciels spéciaux de récupération de données à partir de SSD soumis à un processus TRIM « mentent effrontément », et que de telles prétentions sont « risibles ».
- R-studio Data Recovery, dont le logiciel phare est reconnu pour ses excellentes capacités de restauration de données, a commenté que : « La récupération des données d’un appareil SSD est extrêmement difficile, voire impossible, après l’exécution de la commande TRIM ».
Bien que nous utilisons TRIM et que nous vous le recommandons fortement, il est toujours préférable d’effectuer ses propres recherches et de s’assurer que ce processus remplit tous les objectifs et exigences qu’on pourrait avoir.