Planification de la maintenance des disques thin si TRIM sous Windows est désactivé
Summary: Dans un environnement Windows où des jeux de données volumineux sont fréquemment supprimés et recréés, les lecteurs de disques dynamiques peuvent souffrir d’une activité TRIM ou UNMAP antérieure et TRIM (« fsutil behavior set disabledeletenotify 1 ») peut devoir être désactivé. Cette action peut conduire à la question du maintien de l’efficacité du stockage si TRIM est désactivé. ...
Instructions
Présentation
Dans un environnement Windows, si vous supprimez et recréez fréquemment des jeux de données volumineux (par exemple : Sauvegarde sur disque), une action de suppression précédente peut entraîner un nombre élevé de UNMAP sur la baie. Si vous réécrivez sur le même espace disque, vos performances d’écriture peuvent en souffrir, car les écritures entrantes attendent le UNMAPs à traiter. UNMAPs Les éléments d’espace disque sont renvoyés dans le pool de disques côté baie.
Le mécanisme du système d’exploitation qui pilote cette logique d’efficacité du stockage est appelé «TRIM. » Si la demande TRIM est actif, et si vous supprimez un bloc sur le système de fichiers, le système de fichiers (NTFS) génère des métadonnées sur l’espace libéré et les transmet à la pile d’E/S. Au niveau du disque dans la pile d’E/S, une décision est prise quant à savoir si le disque cible est attaché à ATA. Dans ce cas, un ATA TRIM commande est envoyée à l’objet disque physique. S’il s’agit d’un disque SCSI, le TRIM est converti en disque SCSI. SCSI UNMAP.
Si vous supprimez et réécrivez à nouveau la même section de données, l’aspect efficacité du stockage de ce mécanisme de retour au pool est limité. Dans ce cas, vous pouvez choisir de désactiver TRIM au niveau NTFS pour la durée de la tâche de production respective, ou désactiver TRIM et récupérez manuellement tous les blocs à un autre moment.
La question qui en résulte est la suivante : comment garantir que les disques restent économes en espace sur le long terme ?
Limites
Veuillez noter que certaines limitations doivent être prises en compte avant de créer une solution.
1.
Pour déclencher le retrim sur un appareil, vous exécutez généralement la commande derag avec l’option /L. Lorsque vous avez désactivé TRIM à l’aide de "fsutil behavior set disabledeletenotify 1," Vous avez peut-être l’impression que le découpage ou le démappage n’est désactivé qu’au moment de la suppression et que le redécoupage fonctionne comme prévu. Ce n’est pas le cas. L’action retrim dans defrag est un mécanisme qui alloue un fichier sparse vide, puis appelle FSCTL_MOVE_FILE pour déplacer les données. Pour plus d’informations, reportez-vous à « Windows Internals 7 », « Part II », p. 644 et suivantes. Le comportement qui en résulte implique une action de suppression sous le capot. Malheureusement, si disabledeletenotify iDe plus, il n’y a pas d’autre choix que d' retrim La commande réussit toujours. Il n’en résulte pas unmaps.
Par conséquent, la séquence de récupération du stockage doit inclure une étape d’activation TRIM avant l’exécution de la défragmentation.
2.
De plus, si vous avez désactivé TRIM Sur le système globalement, activez-le, défragmentez-le, puis désactivez-le à nouveau. Le processus de désactivation peut entrer en collision avec une exécution incomplète de la commande retrim, bien que la commande soit revenue à l’invite. Lors de tests en laboratoire sur Windows 2019, nous avons constaté que nous devions attendre quelques secondes avant de définir disabledeletenotify à nouveau sur « 1 ». Nous pensons que c’est le résultat d’une interaction entre le defrag command et le service Optimizer en arrière-plan.
3.
Si vous planifiez le TRIM à l’aide de Drive Optimizer, le menu par défaut de l’Explorateur nécessite une tâche planifiée appelée "ScheduledDefrag" (/Microsoft/Windows/Defrag) dans le Planificateur de tâches. Si vous modifiez la tâche, Drive Optimizer détecte ce fait et vous demande de restaurer les valeurs par défaut avant de continuer. Si vous désactivez la tâche, vous pouvez toujours exécuter les commandes de défragmentation manuellement, mais vous ne pouvez pas les planifier.
4.
Cette «ScheduledDefrag" est également appelée dans Maintenance du système (Control Panel\All Control Panel Items\Security and Maintenance\Automatic Maintenance).
5.
Si vous désactivez TRIMLla UNMAP Le flux de commandes vers les couches inférieures de la pile d’E/S s’arrête immédiatement. Cela est normal. Si, au fil du temps, vous constatez que la différence entre l’espace alloué et l’espace utilisé devient trop importante, vous devrez peut-être (1) donner la valeur TRIM/UNMAP flux de commandes du fichier sparse traitant plus de temps, ou (2) exécutez l’intervention plus souvent.
Solution
Par conséquent, nous vous recommandons de laisser ces paramètres et tâches par défaut du système tels quels, et d’envisager plutôt de créer une nouvelle tâche dans le planificateur de tâches, qui :
- Permet
TRIM ("fsutil behavior set disabledeletenotify 0") - Fonctionne
defrag /l against all drives ("defrag /C /L") - Attend que les commandes résultantes soient soumises à la baie
("timeout /t 60") - Désactive
TRIM again ("fsutil behavior set disabledeletenotify 1")
Remarque
La valeur du délai d’expiration à l’étape 3 est une interpolation des tests de laboratoire. Utilisez-le comme point de départ. Si vous constatez que des écarts s’accumulent entre les valeurs de capacité allouée côté baie et les valeurs de capacité utilisée déclarées par le système de fichiers, vous devrez peut-être utiliser des valeurs plus élevées, telles que 300 secondes (5 minutes) et même plus (3600 ; 1 heure). Alternativement, vous devrez peut-être exécuter la tâche plus souvent ; c’est-à-dire tous les jours au lieu d’une fois par semaine. La raison pour laquelle ces divergences peuvent s’accumuler est expliquée dans les limitations (5) ci-dessus.
Modèle de tâche XML
Dans ce qui suit, nous fournissons un modèle à importer dans un planificateur de tâches que vous pouvez utiliser comme base. Copiez et collez le code xml ci-dessous dans un fichier, placez le fichier à portée du système serveur que vous souhaitez configurer et utilisez l’action d’importation de la tâche pour importer la tâche. Le modèle de tâche ci-dessous s’appelle DellSanDiskMaintenance. Il exécute les quatre étapes ci-dessus chaque semaine, un samedi à 20h00 (20h00), et est placé à la racine du planificateur, par exemple :
<?xml version="1.0" encoding="UTF-16"?> <Task version="1.6" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Source>Dell Technologies</Source> <Date>2023-07-07T09:21:50.4883878</Date> <Author>Dell Technologies</Author> <Description>This task is an example of how to optimize thin SAN drives, if TRIM is globally disabled on the system.</Description> <URI>\DellSanDiskMaintenance</URI> <SecurityDescriptor>D:AI(A;;FA;;;BA)(A;;FA;;;SY)(A;;FRFX;;;LS)(A;;FR;;;AU)</SecurityDescriptor> </RegistrationInfo> <Triggers> <CalendarTrigger> <StartBoundary>2023-07-01T20:00:00</StartBoundary> <ExecutionTimeLimit>PT2H</ExecutionTimeLimit> <Enabled>true</Enabled> <ScheduleByWeek> <DaysOfWeek> <Saturday /> </DaysOfWeek> <WeeksInterval>1</WeeksInterval> </ScheduleByWeek> </CalendarTrigger> </Triggers> <Principals> <Principal id="LocalSystem"> <UserId>S-1-5-18</UserId> <RunLevel>HighestAvailable</RunLevel> </Principal> </Principals> <Settings> <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries> <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> <AllowHardTerminate>true</AllowHardTerminate> <StartWhenAvailable>false</StartWhenAvailable> <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> <IdleSettings> <StopOnIdleEnd>false</StopOnIdleEnd> <RestartOnIdle>false</RestartOnIdle> </IdleSettings> <AllowStartOnDemand>true</AllowStartOnDemand> <Enabled>true</Enabled> <Hidden>false</Hidden> <RunOnlyIfIdle>false</RunOnlyIfIdle> <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession> <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine> <MaintenanceSettings> <Period>P1D</Period> <Deadline>P4D</Deadline> <Exclusive>false</Exclusive> </MaintenanceSettings> <WakeToRun>false</WakeToRun> <ExecutionTimeLimit>PT4H</ExecutionTimeLimit> <Priority>7</Priority> </Settings> <Actions Context="LocalSystem"> <Exec> <Command>%windir%\system32\fsutil.exe</Command> <Arguments>behavior set disabledeletenotify 0</Arguments> </Exec> <Exec> <Command>%windir%\system32\defrag.exe</Command> <Arguments>/C /L /U</Arguments> </Exec> <Exec> <Command>timeout</Command> <Arguments>/t 60</Arguments> </Exec> <Exec> <Command>%windir%\system32\fsutil.exe</Command> <Arguments>behavior set disabledeletenotify 1</Arguments> </Exec> </Actions> </Task>