Schijfonderhoud plannen voor thin disks als TRIM op Windows is uitgeschakeld
Summary: In een Windows-omgeving waar vaak grote datasets worden verwijderd en opnieuw worden gemaakt, kunnen dunne schijven last hebben van een eerdere TRIM- of UNMAP-activiteit en moet TRIM ("fsutil behavior set disabledeletenotify 1") mogelijk worden uitgeschakeld. Deze actie kan leiden tot de vraag hoe de storage-efficiëntie kan worden gehandhaafd als TRIM is uitgeschakeld. ...
Instructions
Overzicht
Als u in een Windows-omgeving vaak grote gegevenssets verwijdert en opnieuw maakt (bijvoorbeeld: Back-up maken op schijf), kan een voorafgaande verwijderactie resulteren in een groot aantal UNMAP opdrachten op de array. Als u dezelfde schijfruimte herschrijft, kunnen uw schrijfprestaties eronder lijden, omdat de inkomende schrijfbewerkingen wachten op de UNMAPs te verwerken. UNMAPs Koppel schijfruimte-elementen terug aan de schijfgroep aan de arrayzijde.
Het besturingssysteemmechanisme dat deze logica voor storage-efficiëntie aandrijft, heet "TRIM." Als TRIM actief is en als u een blok op het bestandssysteem verwijdert, genereert het bestandssysteem (NTFS) metagegevens over de vrijgekomen ruimte en geeft deze door aan de I/O-stack. Op schijfniveau in de I/O-stack wordt besloten of de doelschijf ATA-gekoppeld is. In dat geval is een ATA TRIM De opdracht wordt verzonden naar het fysieke schijfobject. Als de schijf een SCSI-schijf is, wordt de TRIM geconverteerd naar een SCSI UNMAP.
Als u dezelfde gegevenssectie opnieuw verwijdert en herschrijft, is het storage-efficiëntieaspect van dit return-to-pool-mechanisme beperkt. Onder deze omstandigheden kunt u ervoor hebben gekozen om TRIM op NTFS-niveau voor de duur van de betreffende productietaak, of schakel TRIM alle blokken op een ander moment handmatig
terug te vorderen.De daaruit voortvloeiende vraag is: hoe kunt u ervoor zorgen dat de schijven op de lange termijn nog steeds ruimte-efficiënt zijn?
Beperkingen
Houd er rekening mee dat er enkele beperkingen zijn waarmee rekening moet worden gehouden voordat u een oplossing maakt.
1.
Om opnieuw trimmen op een apparaat te activeren, voert u meestal de opdracht defragmenteren uit met de optie /L. Wanneer u TRIM hebt uitgeschakeld met "fsutil behavior set disabledeletenotify 1," U hebt misschien de indruk dat de trim of unmap alleen is uitgeschakeld bij verwijderen en dat de retrim werkt zoals verwacht. Dit is niet het geval. De retrim-actie in deffragment is een mechanisme dat een leeg sparse-bestand toewijst en vervolgens aanroept FSCTL_MOVE_FILE om de data te verplaatsen. Zie "Windows Internals 7", "Part II", p. 644 e.v. voor meer details. Het resulterende gedrag impliceert een verwijderingsactie onder de motorkap. Helaas, als disabledeletenotify is "1", de retrim commando slaagt nog steeds. Het resulteert niet in unmaps.
Als gevolg hiervan moet de volgorde voor het terugwinnen van de opslag een stap bevatten om te activeren TRIM voordat de defragmentatie wordt uitgevoerd.
2.
Verder, als u de TRIM Activeer het op het systeem algemeen, defragmenteer en deactiveer het opnieuw, het deactiveringsproces kan botsen met de onvolledige uitvoering van de opdracht Retrim, hoewel de opdracht is teruggekeerd naar de prompt. Toen we dit in het lab testten op Windows 2019, ontdekten we dat we een paar seconden moesten wachten voordat we het instelden disabledeletenotify naar "1" terug. Wij zijn van mening dat dit het resultaat is van een wisselwerking tussen de defrag Command en de Optimizer-service op de achtergrond.
3.
Als u de TRIM Als u Drive Optimizer gebruikt, is voor het standaardmenu van Verkenner een geplande taak vereist met de naam "ScheduledDefrag" (/Microsoft/Windows/Defrag) in Taakplanner. Als u de taak wijzigt, detecteert Drive Optimizer dit feit en vraagt om de standaardwaarden te herstellen voordat u verder kunt gaan. Als u de taak uitschakelt, kunt u de defragmentatieopdrachten nog steeds handmatig uitvoeren, maar u kunt ze niet plannen.
4.
Dit "ScheduledDefrag" wordt ook aangeroepen in Systeemonderhoud (Control Panel\All Control Panel Items\Security and Maintenance\Automatic Maintenance).
5.
Als u deactiveert TRIMDe UNMAP De opdrachtstroom naar de onderste lagen van de IO-stack stopt onmiddellijk. Dit is normaal gedrag. Als u na verloop van tijd merkt dat het verschil tussen de toegewezen ruimte en de gebruikte ruimte te groot wordt, moet u mogelijk (1) de TRIM/UNMAP commandostroom van de schaarse bestandsverwerking meer tijd, of (2) de interventie vaker uitvoeren.
Oplossing
Daarom raden we u aan deze standaardinstellingen en -taken van het systeem te laten zoals ze zijn en in plaats daarvan te overwegen een nieuwe taak te maken in de taakplanner, die:
- Kunt
TRIM ("fsutil behavior set disabledeletenotify 0") - Loopt
defrag /l against all drives ("defrag /C /L") - Wacht totdat de resulterende opdrachten naar de array worden verzonden
("timeout /t 60") - Uitgeschakeld
TRIM again ("fsutil behavior set disabledeletenotify 1")
OPMERKING
De time-outwaarde in stap 3 is een interpolatie van laboratoriumtests. Gebruik dit als uitgangspunt. Als u merkt dat er steeds meer discrepanties ontstaan tussen de toegewezen capaciteitswaarden aan de arrayzijde en de door het bestandssysteem gerapporteerde gebruikte capaciteitswaarden, moet u mogelijk grotere waarden gebruiken, zoals 300 seconden (5 minuten) en zelfs meer (3600; 1 uur). Het kan ook zijn dat u de taak vaker moet uitvoeren; d.w.z. dagelijks in plaats van wekelijks. De reden waarom deze discrepanties zich kunnen ophopen, wordt uitgelegd in Beperkingen (5) hierboven.
XML-taaksjabloon
Hieronder vindt u een sjabloon dat u kunt importeren in een taakplanner die u als basis kunt gebruiken. Kopieer en plak de onderstaande xml-code in een bestand, plaats het bestand binnen het bereik van het serversysteem dat u wilt configureren en gebruik de taakimportactie om de taak te importeren. De onderstaande taaksjabloon heet DellSanDiskMaintenance. De bovenstaande vier stappen worden wekelijks uitgevoerd, op zaterdag om 20:00 uur, en worden in de hoofdmap van de planner geplaatst, bijvoorbeeld:
<?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>