Come pianificare la manutenzione dei dischi thin se TRIM su Windows è disabilitato
Summary: In un ambiente Windows in cui i dataset di grandi dimensioni vengono spesso eliminati e ricreati, le unità disco thin potrebbero risentire di una precedente attività TRIM o UNMAP e potrebbe essere necessario disabilitare TRIM ("fsutil behavior set disabledeletenotify 1"). Questa azione può portare a chiedersi come mantenere l'efficienza dello storage se TRIM è spento. ...
Instructions
Panoramica
In un ambiente Windows, se si eliminano e ricreano frequentemente dataset di grandi dimensioni (ad esempio: Backup su disco), un'azione di eliminazione precedente può comportare un numero elevato di UNMAP sull'array. Se si riscrive lo stesso spazio su disco, le prestazioni di scrittura potrebbero risentirne, perché le scritture in ingresso attendono il UNMAPs da trattare. UNMAPs Restituisce gli elementi dello spazio su disco al disk pool sul lato array.
Il meccanismo del sistema operativo che guida questa logica di efficienza dello storage è chiamato "TRIM". Se TRIM è attivo e, se si elimina un blocco nel file system, il file system (NTFS) genera metadati sullo spazio liberato e li trasmette allo stack di I/O. A livello di disco nello stack di I/O, viene deciso se il disco di destinazione è collegato ad ATA. In tal caso, un ATA TRIM Il comando viene inviato all'oggetto disco fisico. Se il disco è un disco SCSI, il TRIM viene convertito in un SCSI UNMAP.
Se si elimina e si riscrive nuovamente la stessa sezione di dati, l'efficienza dello storage di questo meccanismo di restituzione al pool è limitato. In queste circostanze, è possibile che l'utente abbia scelto di disabilitare TRIM a livello di NTFS per la durata del rispettivo processo di produzione o disabilitare TRIM e recuperare manualmente eventuali blocchi in un altro momento.
La domanda che ne deriva è: come si può garantire che i dischi siano ancora efficienti in termini di spazio a lungo termine?
Limitazioni
Tieni presente che ci sono alcune limitazioni che devono essere prese in considerazione prima di creare una soluzione.
1.
Per attivare il retrim su un dispositivo, in genere si esegue il comando defrag con l'opzione /L. Quando è stato disabilitato TRIM utilizzando "fsutil behavior set disabledeletenotify 1," Potresti avere l'impressione che il trim o l'unmap siano disabilitati solo al momento dell'eliminazione e che il retrim funzioni come previsto. Non è così. L'azione retrim in defrag è un meccanismo che alloca un file sparse vuoto e quindi chiama FSCTL_MOVE_FILE per spostare i dati. Vedi "Windows Internals 7", "Part II", p. 644 e seguenti per ulteriori dettagli. Il comportamento risultante implica un'azione di eliminazione dietro le quinte. Purtroppo, se disabledeletenotify is "1", il retrim Il comando ha comunque esito positivo. Ciò non comporta unmaps.
Di conseguenza, la sequenza per recuperare lo storage deve includere un passaggio per l'attivazione TRIM prima che venga eseguita la deframmentazione.
2.
Inoltre, se hai disabilitato TRIM Sul sistema globalmente, attivarlo, deframmentarlo e quindi disattivarlo nuovamente, il processo di disattivazione potrebbe entrare in conflitto con l'esecuzione incompleta del comando retrim, anche se il comando è tornato al prompt. Durante i test di laboratorio su Windows 2019, abbiamo scoperto che dovevamo attendere un paio di secondi prima di impostarlo disabledeletenotify di nuovo a "1". Riteniamo che questo sia il risultato di un'interazione tra il defrag e il servizio Optimizer in background.
3.
Se si pianifica l'opzione TRIM utilizzando Drive Optimizer, il menu predefinito di Esplora risorse richiede un'attività pianificata denominata "ScheduledDefrag" (/Microsoft/Windows/Defrag) nell'Utilità di pianificazione. Se si modifica l'attività, Drive Optimizer rileva questo fatto e chiede di ripristinare le impostazioni predefinite prima di poter continuare. Se si disabilita l'attività, è comunque possibile eseguire manualmente i comandi di deframmentazione, ma non è possibile pianificarli.
4.
Questo "ScheduledDefrag" è chiamata anche in Manutenzione del sistema (Control Panel\All Control Panel Items\Security and Maintenance\Automatic Maintenance).
5.
Se si disattiva TRIMLe UNMAP Il flusso dei comandi ai livelli inferiori dello stack di I/O si arresta immediatamente. Si tratta di un comportamento previsto. Se, nel corso del tempo, si osserva che lo spazio allocato rispetto alla differenza di spazio utilizzato diventa troppo grande, è possibile (1) dover fornire il valore TRIM/UNMAP flusso di comando dal file sparse che elabora più tempo, o (2) eseguire l'intervento più spesso.
Soluzione
Di conseguenza, si consiglia di lasciare le impostazioni e le attività predefinite del sistema così come sono e di prendere in considerazione la possibilità di creare una nuova attività nell'utilità di pianificazione, che:
- Consente
TRIM ("fsutil behavior set disabledeletenotify 0") - Viene eseguito
defrag /l against all drives ("defrag /C /L") - Attende che i comandi risultanti vengano inviati all'array
("timeout /t 60") - Disattiva
TRIM again ("fsutil behavior set disabledeletenotify 1")
NOTA
Il valore di timeout nel passaggio 3 è un'interpolazione di test di laboratorio. Usalo come punto di partenza. Se si rilevano discrepanze tra i valori della capacità allocata sul lato array e i valori della capacità utilizzata segnalati dal file system, potrebbe essere necessario utilizzare valori maggiori, come 300 secondi (5 minuti) e anche di più (3600; 1 ora). In alternativa, potrebbe essere necessario eseguire l'attività più spesso; vale a dire giornalmente invece che settimanalmente. Il motivo per cui queste discrepanze possono accumularsi è spiegato nelle Limitazioni (5) di cui sopra.
Modello di attività XML
Di seguito, viene fornito un modello da importare in un'utilità di pianificazione da utilizzare come base. Copiare e incollare il codice xml riportato di seguito in un file, posizionare il file a portata del sistema server che si desidera configurare e utilizzare l'azione di importazione attività per importare l'attività. Il modello di attività riportato di seguito è denominato DellSanDiskMaintenance. Esegue i quattro passaggi precedenti ogni settimana, il sabato alle 20:00 (20:00) e viene posizionato nella radice dell'utilità di pianificazione, ad esempio:
<?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>