Planen der Festplattenwartung für Thin Disks, wenn TRIM unter Windows deaktiviert ist
Summary: In einer Windows-Umgebung, in der große Datenvolumen häufig gelöscht und neu erstellt werden, leiden Thin-Disk-Laufwerke möglicherweise unter einer vorhergehenden TRIM- oder UNMAP-Aktivität und TRIM ("fsutil behavior set disabledeletenotify 1") muss möglicherweise deaktiviert werden. Diese Aktion kann zu der Frage führen, wie die Speichereffizienz aufrechterhalten werden kann, wenn TRIM deaktiviert ist. ...
Instructions
Übersicht
Wenn Sie in einer Windows-Umgebung häufig große Datenvolumen löschen und neu erstellen (z. B.: Sichern auf Festplatte), kann eine vorausgehende Löschaktion zu einer hohen Anzahl von UNMAP Befehle auf dem Array. Wenn Sie den gleichen Speicherplatz erneut schreiben, leidet möglicherweise die Schreibleistung, da die eingehenden Schreibvorgänge auf die UNMAPs verarbeitet werden. UNMAPs Rückgabe der Speicherplatzelemente an den Laufwerkpool auf der Arrayseite.
Der Betriebssystemmechanismus, der diese Storage-Effizienzlogik steuert, heißt "TRIM“. Wenn die TRIM aktiv ist, und wenn Sie einen Block auf dem Dateisystem löschen, erzeugt das Dateisystem (NTFS) Metadaten über den freigegebenen Speicherplatz und gibt sie an den I/O-Stack weiter. Auf der Festplattenebene im I/O-Stapel wird entschieden, ob das Ziellaufwerk über ATA verbunden ist. In diesem Fall muss ein ATA TRIM Befehl wird an das Objekt physisches Laufwerk gesendet. Wenn es sich bei der Festplatte um eine SCSI-Festplatte handelt, wird die TRIM in eine SCSI UNMAP.
Wenn Sie denselben Datenabschnitt löschen und neu schreiben, ist der Storage-Effizienzaspekt dieses Return-to-Pool-Mechanismus eingeschränkt. Unter diesen Umständen haben Sie sich möglicherweise für die Deaktivierung von TRIM auf NTFS-Ebene für die Dauer des jeweiligen Produktionsauftrags oder deaktivieren TRIM und beanspruchen Sie alle Blöcke zu einem anderen Zeitpunkt manuell.
Die Frage, die sich daraus ergibt, ist, wie Sie sicherstellen können, dass die Festplatten langfristig noch platzsparend sind.
Einschränkungen
Beachten Sie, dass es einige Einschränkungen gibt, die berücksichtigt werden müssen, bevor Sie eine Lösung erstellen.
1.
Um das Neutrimmen auf einem Gerät auszulösen, führen Sie in der Regel den Defragmentierungsbefehl mit der Option /L aus. Wenn Sie TRIM mithilfe von "fsutil behavior set disabledeletenotify 1," Möglicherweise haben Sie den Eindruck, dass das Trimmen oder Unmap nur beim Löschen deaktiviert ist und dass das erneute Zuschneiden wie erwartet funktioniert. Dies ist nicht der Fall. Die Aktion "retrim" in der Defragmentierung ist ein Mechanismus, der eine leere Datei mit geringer Datendichte zuweist und dann aufruft FSCTL_MOVE_FILE , um die Daten zu verschieben. Siehe "Windows Internals 7", "Part II", S. 644 ff für weitere Details. Das daraus resultierende Verhalten impliziert eine Löschaktion unter der Haube. Leider, wenn disabledeletenotify is "1", die retrim Der Befehl ist immer noch erfolgreich. Es führt nicht dazu, dass unmapsaus.
Daher muss die Sequenz zur Rückgewinnung des Speichers einen Schritt zum Aktivieren enthalten TRIM bevor die Defragmentierung ausgeführt wird.
2.
Wenn Sie darüber hinaus TRIM Aktivieren Sie es auf dem System global, defragmentieren Sie es und deaktivieren Sie es dann wieder. Der Deaktivierungsprozess kollidiert möglicherweise mit der unvollständigen Ausführung des Befehls zum erneuten Trimmen, obwohl der Befehl zur Eingabeaufforderung zurückgekehrt ist. Beim Labortest unter Windows 2019 mussten wir einige Sekunden warten, bevor wir die Einstellungen disabledeletenotify wieder auf "1". Wir glauben, dass dies das Ergebnis einer Wechselwirkung zwischen der defrag und dem Optimizer-Service im Hintergrund.
3.
Wenn Sie die TRIM Bei Verwendung von Drive Optimizer erfordert das Standard-Explorer-Menü einen geplanten Task namens "ScheduledDefrag" (/Microsoft/Windows/Defrag) im Aufgabenplaner. Wenn Sie den Task ändern, erkennt die Laufwerkoptimierung diese Tatsache und fordert Sie auf, die Standardeinstellungen wiederherzustellen, bevor Sie fortfahren können. Wenn Sie die Aufgabe deaktivieren, können Sie die Defragmentierungsbefehle weiterhin manuell ausführen, aber Sie können sie nicht planen.
4.
Diese "ScheduledDefrag" wird auch in der Systemwartung aufgerufen (Control Panel\All Control Panel Items\Security and Maintenance\Automatic Maintenance).
5.
Wenn Sie die Option deaktivieren TRIMdas UNMAP Der Befehlsfluss zu den unteren Schichten des I/O-Stapels wird sofort gestoppt. Dabei handelt es sich um erwartetes Verhalten. Wenn Sie im Laufe der Zeit beobachten, dass die Differenz zwischen zugewiesenem Speicherplatz und verwendetem Speicherplatz zu groß wird, müssen Sie möglicherweise (1) die TRIM/UNMAP Befehlsablauf von der Sparse-Datei, die mehr Zeit verarbeitet, oder (2) den Eingriff häufiger ausführen.
Lösung
Daher wird empfohlen, diese Standardeinstellungen und -aufgaben des Systems unverändert zu lassen und stattdessen die Erstellung einer neuen Aufgabe im Aufgabenplaner in Betracht zu ziehen , um Folgendes zu erreichen:
- Ermöglicht
TRIM ("fsutil behavior set disabledeletenotify 0") - Läuft
defrag /l against all drives ("defrag /C /L") - Wartet, bis die resultierenden Befehle an das Array übermittelt werden
("timeout /t 60") - Deaktiviert
TRIM again ("fsutil behavior set disabledeletenotify 1")
HINWEIS
Der Timeout-Wert in Schritt 3 ist eine Interpolation von Labortests. Verwenden Sie dies als Ausgangspunkt. Wenn Sie feststellen, dass sich Diskrepanzen zwischen den arrayseitig zugewiesenen Kapazitätswerten und den vom Dateisystem gemeldeten genutzten Kapazitätswerten aufbauen, müssen Sie möglicherweise größere Werte verwenden, z. B. 300 Sekunden (5 Minuten) und noch mehr (3600; 1 Stunde). Alternativ müssen Sie die Aufgabe möglicherweise häufiger ausführen. d.h. täglich statt wöchentlich. Der Grund, warum sich diese Diskrepanzen aufbauen können, wird oben unter Einschränkungen (5) erläutert.
XML-Aufgabenvorlage
Im Folgenden stellen wir Ihnen eine Vorlage zum Importieren in einen Aufgabenplaner zur Verfügung, die Sie als Grundlage verwenden können. Kopieren Sie den folgenden XML-Code, fügen Sie ihn in eine Datei ein, platzieren Sie die Datei in Reichweite des Serversystems, das Sie konfigurieren möchten, und verwenden Sie die Aktion zum Importieren der Aufgabe, um die Aufgabe zu importieren. Die folgende Aufgabenvorlage heißt DellSanDiskMaintenance. Er führt die oben genannten vier Schritte wöchentlich an einem Samstag um 20:00 Uhr (20:00 Uhr) aus und wird im Stammverzeichnis des Schedulers abgelegt, z. B.:
<?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>