Como agendar a manutenção de disco para discos thin se o TRIM no Windows estiver desativado
Summary: Em um ambiente Windows em que grandes conjuntos de dados são excluídos e recriados com frequência, as unidades de disco thin podem sofrer com uma atividade TRIM ou UNMAP anterior e o TRIM ("fsutil behavior set disabledeletenotify 1") pode ter que ser desativado. Essa ação pode levar à pergunta de como manter a eficiência de armazenamento se o TRIM estiver desativado. ...
Instructions
Visão geral
Em um ambiente Windows, se você excluir e recriar conjuntos de dados grandes com frequência (por exemplo: Backup em disco), uma ação de exclusão anterior pode resultar em um número elevado de UNMAP Comandos no array. Se você regravar o mesmo espaço em disco, seu desempenho de gravação poderá ser prejudicado, pois as gravações recebidas aguardam o UNMAPs a ser processado. UNMAPs Retorne os elementos de espaço em disco para o pool de discos no lado do array.
O mecanismo do sistema operacional que impulsiona essa lógica de eficiência de armazenamento é chamado de "TRIM." Se a solicitação do TRIM estiver ativo e, se você excluir um bloco no file system, o file system (NTFS) gerará metadados sobre o espaço liberado e os transmitirá para a pilha de E/S. No nível do disco na pilha de E/S, é tomada uma decisão se o disco de destino está conectado ao ATA. Nesse caso, um ATA TRIM O comando é enviado ao objeto de disco físico. Se o disco for um disco SCSI, o TRIM será convertido em um SCSI UNMAP.
Se você excluir e regravar a mesma seção de dados novamente, o aspecto de eficiência de armazenamento desse mecanismo de retorno ao pool será limitado. Nessas circunstâncias, você pode ter optado por desativar TRIM no nível do NTFS durante o respectivo trabalho de produção ou desabilitar TRIM e recuperar manualmente todos os blocos em um momento diferente.
A pergunta resultante é: como você pode garantir que os discos ainda sejam eficientes em termos de espaço a longo prazo?
Limitações
Lembre-se de que há algumas limitações que precisam ser consideradas antes de criar uma solução.
1.
Para acionar o recorte em um dispositivo, geralmente execute o comando defrag com a opção /L. Quando você desativou o TRIM usando: "fsutil behavior set disabledeletenotify 1," Você pode ter a impressão de que o trim ou unmap só está desativado em Delete e que o retrim funciona conforme o esperado. Não é o caso. A ação retrim na desfragmentação é um mecanismo que aloca um arquivo fragmentado vazio e, em seguida, chama FSCTL_MOVE_FILE para mover os dados. Ver "Windows Internals 7", "Part II", p. 644 e ss. para mais detalhes. O comportamento resultante implica uma ação de exclusão sob o capô. Infelizmente, se disabledeletenotify is "1", o retrim O comando ainda é bem-sucedido. Isso não resulta em unmaps.
Como resultado, a sequência para recuperar o armazenamento deve incluir uma etapa para ativar TRIM antes que a desfragmentação seja executada.
2.
Além disso, se você tiver desativado TRIM No sistema globalmente, ative-o, desfragmente e desative-o novamente. O processo de desativação pode colidir com a execução incompleta do comando retrim, embora o comando tenha retornado ao prompt. Ao testar isso em laboratório no Windows 2019, descobrimos que tínhamos que esperar alguns segundos antes de configurar disabledeletenotify para "1" novamente. Acreditamos que isso seja resultado de uma interação entre o defrag Command e o serviço do Optimizer em segundo plano.
3.
Se você agendar a TRIM usando o Drive Optimizer, o menu padrão do Explorer requer uma tarefa agendada chamada "ScheduledDefrag" (/Microsoft/Windows/Defrag) no Agendador de tarefas. Se você modificar a tarefa, o Drive Optimizer detectará esse fato e solicitará a restauração dos valores padrão antes de você poder continuar. Se você desabilitar a tarefa, ainda poderá executar os comandos de desfragmentação manualmente, mas não poderá agendá-los.
4.
Este "ScheduledDefrag" também é chamada de manutenção do sistema (Control Panel\All Control Panel Items\Security and Maintenance\Automatic Maintenance).
5.
Se você desativar TRIMO UNMAP O fluxo de comando para as camadas inferiores da pilha de E/S é interrompido imediatamente. Esse é um comportamento esperado. Se, ao longo do tempo, você observar que o espaço alocado versus a diferença de espaço usado cresce demais, você pode (1) precisar fornecer o TRIM/UNMAP fluxo de comando do processamento de arquivos fragmentados mais tempo ou (2) executar a intervenção com mais frequência.
Solução
Como resultado, recomendamos que você deixe essas configurações e tarefas padrão do sistema como estão e, em vez disso, considere a criação de uma nova tarefa no agendador de tarefas, que:
- Permite
TRIM ("fsutil behavior set disabledeletenotify 0") - Executa
defrag /l against all drives ("defrag /C /L") - Aguarda até que os comandos resultantes sejam enviados ao array
("timeout /t 60") - Desabilita
TRIM again ("fsutil behavior set disabledeletenotify 1")
Nota
O valor de tempo limite na etapa 3 é uma interpolação de testes de laboratório. Use isso como ponto de partida. Se você achar que as discrepâncias entre os valores de capacidade alocados no array e os valores de capacidade usada relatados do file system se acumulam, talvez seja necessário usar valores maiores, como 300 segundos (5 minutos) e até mais (3600; 1 hora). Como alternativa, talvez seja necessário executar a tarefa com mais frequência; ou seja, diariamente em vez de semanalmente. A razão pela qual essas discrepâncias podem se acumular é explicada nas Limitações (5) acima.
Modelo de tarefa XML
A seguir, fornecemos um modelo a ser importado para um agendador de tarefas para você usar como base. Copie e cole o código xml abaixo em um arquivo, coloque o arquivo ao alcance do sistema do servidor que você deseja configurar e use a ação de importação de tarefa para importar a tarefa. O modelo de tarefa abaixo é chamado DellSanDiskMaintenance. Ele executa as quatro etapas acima semanalmente, em um sábado às 20:00h (20h), e é colocado na raiz do agendador, por exemplo:
<?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>