Як запланувати обслуговування дисків для тонких дисків, якщо TRIM на Windows вимкнено
Summary: У Windows-середовищі, де великі набори даних часто видаляються та створюються заново, тонкі диски можуть страждати від попередньої активності TRIM або UNMAP, і TRIM ("fsutil behavior set disabledeletenotify 1") може бути вимкнений. Ця дія може поставити питання про те, як підтримувати ефективність зберігання, якщо TRIM вимкнений. ...
Instructions
Огляд
У Windows-середовищі, якщо ви часто видаляєте та створюєте заново великі набори даних (наприклад: Резервне копіювання на диск), попередня дія видалення може призвести до великої кількості UNMAP Команди на масиві. Якщо ви перепишете той самий простір на диску, продуктивність запису може постраждати, оскільки вхідні записи чекають на UNMAPs щоб бути обробленим. UNMAPs поверніть елементи простору диска до пулу на стороні масиву.
Механізм операційної системи, що керує цією логікою ефективності зберігання, називається "TRIM." Якщо TRIM активна, і якщо видалити блок у файловій системі, файлова система (NTFS) генерує метадані про звільнений простір і передає їх по стеку введення/виводу. На рівні диска в стеку введення/виведення приймається рішення, чи підключений цільовий диск ATA. У такому випадку ATA TRIM команда надсилається фізичному об'єкту диска. Якщо диск є SCSI-диском, то TRIM перетворюється на SCSI UNMAP.
Якщо ви знову видаляєте і перепишете той самий розділ даних, аспект ефективності зберігання цього механізму повернення до пулу буде обмеженим. За таких обставин ви могли обрати або вимкнути TRIM на рівні NTFS на весь час виконання відповідного виробничого завдання або вимкнути TRIM Загалом і відновлюйте будь-які блоки вручну в інший час.
Виникає питання: як гарантувати, що диски залишаються просторово ефективними в довгостроковій перспективі?
Обмеження
Будь ласка, майте на увазі, що існують певні обмеження, які потрібно врахувати перед створенням рішення.
1.
Щоб активувати retrim на пристрої, зазвичай виконується команда дефрагментації з опцією /L. Коли ви вимкнули TRIM за допомогою "fsutil behavior set disabledeletenotify 1," Можливо, ви думаєте, що обрізання або зняття карти вимкнені лише при видаленні , а переналаштування працює як очікувалося. Це не так. Дія retrim у дефрагментації — це механізм, який виділяє порожній розріджений файл і потім викликає FSCTL_MOVE_FILE щоб перемістити дані. Див. «Windows Internals 7», «Part II», с. 644 і далі для детальнішої інформації. Отримана поведінка передбачає дію видалення під капотом. На жаль, якщо disabledeletenotify is «1», retrim Командування все одно вдається. Це не призводить до unmaps.
Відповідно, послідовність для повернення сховища повинна включати крок для активації TRIM До того, як дефрагментація буде запущена.
2.
Крім того, якщо у вас є інвалідність TRIM У системі глобально активуйте його, дефрагментуйте і потім знову деактивуйте, процес деактивації може зіткнутися з виконанням неповного виконання команди Retrim, хоча команда повернулася до прядка. Під час лабораторного тестування на Windows 2019 ми з'ясували, що потрібно почекати кілька секунд перед встановленням disabledeletenotify Знову на «1». Ми вважаємо, що це є результатом взаємодії між defrag Command і сервіс оптимізатора у фоновому режимі.
3.
Якщо ви плануєте TRIM використовуючи Drive Optimizer, стандартне меню Провідника вимагає запланованого завдання "ScheduledDefrag" (/Microsoft/Windows/Defrag) у планувальнику завдань. Якщо ви змінюєте завдання, Drive Optimizer виявляє цей факт і просить відновити стандартні налаштування перед тим, як ви зможете продовжити. Якщо ви вимкнете завдання, ви все одно зможете вручну виконати команди дефрагментації, але не зможете їх запланувати.
4.
Це "ScheduledDefrag" завдання також називається у Системному Технічному Підтримці (Control Panel\All Control Panel Items\Security and Maintenance\Automatic Maintenance).
5.
Якщо ви деактивуєте TRIM, UNMAP потік команд до нижніх рівнів стеку виводу припиняється одразу. Це очікувана поведінка. Якщо з часом ви помітите, що різниця між виділеним простором і використаним простором стає надто великою, можливо, вам потрібно (1) задати TRIM/UNMAP Командний потік із обробки розріджених файлів довше, або (2) виконувати інтервенцію частіше.
Розв'язок
Тому ми рекомендуємо залишити ці стандартні налаштування та завдання системи як є, а натомість розглянути можливість створення нового завдання в планувальнику завдань, яке:
- Ввімкнення
TRIM ("fsutil behavior set disabledeletenotify 0") - Серії
defrag /l against all drives ("defrag /C /L") - Чекає, поки отримані команди не будуть надані масиву
("timeout /t 60") - Відключення
TRIM again ("fsutil behavior set disabledeletenotify 1")
ПРИМІТКА
Значення тайм-ауту на кроці 3 — це інтерполяція лабораторних тестів. Використайте це як відправну точку. Якщо ви виявите, що накопичуються розбіжності між значеннями виділеної ємності на рівні масиву та файловою системою, яка повідомляла про використану ємність, можливо, доведеться використовувати більші значення, наприклад 300 секунд (5 хвилин) і навіть більше (3600; 1 година). Альтернативно, можливо, доведеться виконувати це завдання частіше; тобто щодня замість щотижня. Причина, чому ці розбіжності можуть накопичуватися, пояснена у Обмеженнях (5) вище.
Шаблон завдання XML
Далі ми надаємо шаблон, який ви можете імпортувати у планувальник завдань, щоб ви могли використовувати його як основу. Скопіюйте та вставте нижче xml-код у файл, розмістіть файл у зоні досяжності серверної системи, яку хочете налаштувати, і скористайтеся дією імпорту завдання для імпорту завдання. Нижче наведений шаблон завдання називається DellSanDiskMaintenance. Він виконує вищезазначені чотири кроки щотижня, у суботу о 20:00 (20:00), і розміщується в корені планера, наприклад:
<?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>