Windows10で重複排除(Dedup)を使う(Part1.導入編)
Windows10で重複排除(Dedup)を使う(Part2.設定編)
Windows10で重複排除(Dedup)を使う(Part3.運用編)
重複排除というのは、保存されたファイルの内容から、同じブロックを共有することで全体のディスク使用量を削減する機能です。
別のファイルシステムの機能で「圧縮機能」というのもありますが、条件によってはそれ以上の削減効果を得ることができます。(ReFSではまだ使えませんが)
一般的な話になりますが、削減効果としては
・ユーザドキュメントで30-50%程度
・繰り返し取得したフルバックアップファイルとかだと50-90%程度
とかなりのDisk容量を削減可能な場合があります。
(状況によって上下しますので、あくまで参考値です。)
(よく似たファイルが多いほど効果は高いです。)
重複排除はエンタープライズレベルの機能で、非常に高価な機能だったのですが、最近のWindowsServer(2012以降)には、重複排除機能が機能として搭載されています。
重複排除には処理方式としては、大きく分けると2種類あります。
インライン方式(リアルタイム処理)
- ストレージに保存する直前に重複排除してから、保存します。
リアルタイムで同じブロックがストレージに保存されているかを判断し、
同じブロックが既にあれば、ブロックへのインデックス(メタデータ)のみ保存します。
重複排除・圧縮後のデータだけを書き込むため、より必要な容量が抑えられる反面、
一般的に多くのCPUパワーと、大量のメモリを利用する製品が多く、
これらが足りないと書き込み性能に影響が出る場合があります。
(データストレージ、NetApp、Oracle由来のZFSファイルシステムなど)
ポストプロセス方式(後処理)
- ストレージに保存完了後の空き時間に重複排除処理を行います。
ストレージの負荷が低いタイミングやスケジュールで、順次同じブロックがあるかを
チェックし、同じブロックがあれば、ブロックを共有して、
ブロックへのインデックス(メタデータ)に置き換えます。
書き込みの際、性能に影響を与えない。比較的CPU,メモリ負荷が低い反面、
一旦重複排除・圧縮前のデータを書き込むための容量が一時的に必要となります。
(Windows Dedup等)
ほかにもプレプロセス方式(前処理)もありますが、ストレージではなく、
書き込みをするアプリ(バックアップソフト等)で実装されている場合が多い気がします。
事前にサーバ側で重複排除処理を実施しておき、完了した時点でストレージに保存します。
この辺の説明は、企業さんのサイトになりますが、こちらあたりがわかりやすいと思います。
WindowsServerでの重複排除ですが、こちらは、ポストプロセス方式(後処理)タイプの重複排除となります。サーバの負荷が低いアイドル状態や、暇な時間帯に重複排除処理を順次実施するタイプとなります。
なお、重複排除時には、ファイルはメタデータとブロックデータに分かれて保存されますが、ブロックデータ保存時は圧縮をしてから保存されるようです(圧縮除外拡張子指定あり)
比較的CPU,メモリ負荷が低いので、OSに機能として搭載するには現実的なのかもしれません。
こちらはエンタープライズレベルの機能になりますので、クライアントOSには搭載されず、サーバ系OS(WindowsServer2012以降)にのみ搭載されている機能になります。
重複排除に関するドキュメントはMSサイトを確認下さい。
(サーバOSであっても、いろいろ制限等などありますので、リスクを承知の上でお願いします。)
ただし、WindowsServerはクライアントOSとベースが同じですので、WindowsServerの重複排除モジュールを抜き出してクライアントOSに入れた方がおられるようです。
もちろんサポート対象外ですので、完全に自己責任になります。
How to Enable Data Deduplication in Windows 8
Windows2012のモジュールを導入(NTFSに対応)
:iInstallModule
Enable Deduplication on your Windows 8.1
Windows2012R2のモジュールを導入?(NTFSに対応)
:InstallModule
enabling-deduplication-on-windows-10-tp
WinSV2016のモジュールを導入(NTFSに対応)
おそらくWin10 2004以前が対象
:datadedup.zip
Dedupe Packages for Windows 10 Build 19041 (2004)
2004以降のWin10にWInSV2019のモジュールを導入(NTFS,REFSに対応)
:dedup-10.0.19041.1.zip
今回は、RefsをマウントしたWin10 21H2 にWinSV2019のモジュールを導入してみたいと思います。(何度も言いますが、自己責任になります。)
取得した、dedup-10.0.19041.1.zip をWin10 21H2上に解凍し、以下のコマンドでモジュールを導入します。(Zip内のinstall_remove_en-US.txtに記載があります。)
cd C:\DATA\dedup-10.0.19041.1\dedup-10.0.19041.1 (解凍したフォルダに移動)
dism /online /add-package /packagepath:Microsoft-Windows-FileServer-ServerCore-Package-amd64-10.0.19041.1.cab /packagepath:Microsoft-Windows-FileServer-ServerCore-Package-amd64-en-US-10.0.19041.1.cab
dism /online /add-package /packagepath:Microsoft-Windows-Dedup-Package-amd64-10.0.19041.1.cab /packagepath:Microsoft-Windows-Dedup-Package-amd64-en-US-10.0.19041.1.cab
dism /online /enable-feature /featurename:Dedup-Core /all
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
PS C:\WINDOWS\system32> cmd Microsoft Windows [Version 10.0.19044.1766] (c) Microsoft Corporation. All rights reserved. C:\WINDOWS\system32>cd C:\DATA\dedup-10.0.19041.1\dedup-10.0.19041.1 C:\DATA\dedup-10.0.19041.1\dedup-10.0.19041.1>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は A09A-1567 です C:\DATA\dedup-10.0.19041.1\dedup-10.0.19041.1 のディレクトリ 2022/06/25 13:24 <DIR> . 2022/06/25 13:24 <DIR> .. 2022/06/25 13:24 1,193 install_remove_en-US.txt 2022/06/25 13:24 <DIR> LanguageFiles 2022/06/25 13:24 3,515,399 Microsoft-Windows-Dedup-Package-amd64-10.0.19041.1.cab 2022/06/25 13:24 34,888 Microsoft-Windows-Dedup-Package-amd64-en-US-10.0.19041.1.cab 2022/06/25 13:24 64,448 Microsoft-Windows-FileServer-ServerCore-Package-amd64-10.0.19041.1.cab 2022/06/25 13:24 14,302 Microsoft-Windows-FileServer-ServerCore-Package-amd64-en-US-10.0.19041.1.cab 2022/06/25 13:24 1,475 Readme.txt 6 個のファイル 3,631,705 バイト 3 個のディレクトリ 33,972,563,968 バイトの空き領域 C:\DATA\dedup-10.0.19041.1\dedup-10.0.19041.1>dism /online /add-package /packagepath:Microsoft-Windows-FileServer-ServerCore-Package-amd64-10.0.19041.1.cab /packagepath:Microsoft-Windows-FileServer-ServerCore-Package-amd64-en-US-10.0.19041.1.cab 展開イメージのサービスと管理ツール バージョン: 10.0.19041.844 イメージのバージョン: 10.0.19044.1766 1 / 2 を処理しています - パッケージ Microsoft-Windows-FileServer-ServerCore-Package~31bf3856ad364e35~amd64~~10.0.19041.1 を追加しています [==========================100.0%==========================] 2 / 2 を処理しています - パッケージ Microsoft-Windows-FileServer-ServerCore-Package~31bf3856ad364e35~amd64~en-US~10.0.19041.1 を追加しています [==========================100.0%==========================] 操作は正常に完了しました。 C:\DATA\dedup-10.0.19041.1\dedup-10.0.19041.1>dism /online /add-package /packagepath:Microsoft-Windows-Dedup-Package-amd64-10.0.19041.1.cab /packagepath:Microsoft-Windows-Dedup-Package-amd64-en-US-10.0.19041.1.cab 展開イメージのサービスと管理ツール バージョン: 10.0.19041.844 イメージのバージョン: 10.0.19044.1766 1 / 2 を処理しています - パッケージ Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~~10.0.19041.1 を追加していま す [==========================100.0%==========================] 2 / 2 を処理しています - パッケージ Microsoft-Windows-Dedup-Package~31bf3856ad364e35~amd64~en-US~10.0.19041.1 を追加しています [==========================100.0%==========================] 操作は正常に完了しました。 C:\DATA\dedup-10.0.19041.1\dedup-10.0.19041.1>dism /online /enable-feature /featurename:Dedup-Core /all 展開イメージのサービスと管理ツール バージョン: 10.0.19041.844 イメージのバージョン: 10.0.19044.1766 機能を有効にしています [==========================100.0%==========================] 操作は正常に完了しました。 |
なお、ReFS関連で以下のレジストリキーがあると、WinPEとして起動していると認識されて失敗するので、削除してから実施してください。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\MiniNT\
これでPowerSHell上で重複排除(Dedup)に関するコマンド等が使用できるようになります。
Get-DedupProperties (まだ有効化していないのでこの段階ではエラーになります)
Get-dedupstatus
Get-dedupjob
Get-DedupVolume
Get-DedupSchedule
・・・
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
PS C:\WINDOWS\system32> Get-DedupProperties コマンド パイプライン位置 1 のコマンドレット Get-DedupProperties 次のパラメーターに値を指定してください: DriveLetter[0]: D DriveLetter[1]: Get-DedupProperties : Deduplication is not enabled for the volume Activity ID: {0d3a3ce7-dead-473f-bc61-402d67496318} 発生場所 行:1 文字:1 + Get-DedupProperties + ~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (StorageWMI:ROOT/Microsoft/...age/MSFT_Volume) [Get-DedupProperties], CimE xception + FullyQualifiedErrorId : StorageWMI 43021,Get-DedupProperties PS C:\WINDOWS\system32> get-dedupstatus PS C:\WINDOWS\system32> get-dedupjob PS C:\WINDOWS\system32> Get-DedupVolume PS C:\WINDOWS\system32> Get-DedupSchedule Enabled Type StartTime Days Name ------- ---- --------- ---- ---- True Optimization BackgroundOptimization True GarbageCollection 2:45 Saturday WeeklyGarbageCollection True Scrubbing 3:45 Saturday WeeklyScrubbing |
この段階でスケジュールはすでに登録されています。
BackgroundOptimization | 自動的に重複排除処理(共通したブロックを確認し、インデックス(メタデータ)と置き換える処理)を実行する (サーバアイドル時に実行) |
GarbageCollection | 定期的にガーべージコレクション(未使用のブロックを確認して削除する機能を実施します) デフォルトでは、毎週土曜日 2:45- |
Scrubbing | ディスク障害または不良セクターによるチャンク ストア内の破損を特定します。 デフォルトでは、毎週土曜日 3:45- |
では,詳細を表示させてみます。
get-dedupschedule | select Enabled,Name,Type,Priority,Full,ScheduledTask,Days,Start,DurationHours,StopWhenSystemBusy,IdleTimeout,SkipReconciliation,ReadOnly,InputOutputThrottleLevel,InputOutputThrottle,AtStartup,FastStart,Cores,Memory,CimClass,CimInstanceProperties,CimSystemProperties,PSComputerName
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
PS C:\WINDOWS\system32> get-dedupschedule | select Enabled,Name,Type,Priority,Full,ScheduledTask,Days,Start,DurationHours,StopWhenSystemBusy,IdleTimeout,SkipReconciliation,ReadOnly,InputOutputThrottleLevel,InputOutputThrottle,AtStartup,FastStart,Cores,Memory,CimClass,CimInstanceProperties,CimSystemProperties,PSComputerName Enabled : True Name : BackgroundOptimization Type : Optimization Priority : Low Full : ScheduledTask : \Microsoft\Windows\Deduplication\BackgroundOptimization Days : Start : DurationHours : StopWhenSystemBusy : True IdleTimeout : SkipReconciliation : ReadOnly : InputOutputThrottleLevel : InputOutputThrottle : 20 AtStartup : FastStart : Cores : 75 Memory : 25 CimClass : ROOT/Microsoft/Windows/Deduplication:MSFT_DedupJobSchedule CimInstanceProperties : {AtStartup, Cores, Days, DurationHours...} CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties PSComputerName : Enabled : True Name : WeeklyGarbageCollection Type : GarbageCollection Priority : Normal Full : False ScheduledTask : \Microsoft\Windows\Deduplication\WeeklyGarbageCollection Days : Saturday Start : 2022/06/26 2:45:00 DurationHours : 48 StopWhenSystemBusy : True IdleTimeout : SkipReconciliation : ReadOnly : False InputOutputThrottleLevel : InputOutputThrottle : 0 AtStartup : FastStart : Cores : 100 Memory : 50 CimClass : ROOT/Microsoft/Windows/Deduplication:MSFT_DedupJobSchedule CimInstanceProperties : {AtStartup, Cores, Days, DurationHours...} CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties PSComputerName : Enabled : True Name : WeeklyScrubbing Type : Scrubbing Priority : Normal Full : False ScheduledTask : \Microsoft\Windows\Deduplication\WeeklyScrubbing Days : Saturday Start : 2022/06/26 3:45:00 DurationHours : 72 StopWhenSystemBusy : True IdleTimeout : SkipReconciliation : ReadOnly : False InputOutputThrottleLevel : InputOutputThrottle : 0 AtStartup : FastStart : Cores : 100 Memory : 50 CimClass : ROOT/Microsoft/Windows/Deduplication:MSFT_DedupJobSchedule CimInstanceProperties : {AtStartup, Cores, Days, DurationHours...} CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties PSComputerName : |
なお、項目の詳細については、MSドキュメントを参照ください。
ここでスケジュールされたガベージコレクションは、通常のものになります。
この通常の重複排除領域のガベージコレクションはデフォルトでは週1回実施されます。
そのジョブの4回に一度、Fullのガーベージコレクション(深くブロックの使用状況をチェックしてより多くのブロックを削除する)が発生するのですが、
このタイミングでVSSが有効になっている場合、VSSがクリアされる場合があるので、場合によっては無効化したい場合があります
その場合、以下のコマンドを実行します。
(設定)
Set-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\ddpsvc\Settings -Name DeepGCInterval -Type DWord -Value 0xFFFFFFFF
(確認)
Get-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\ddpsvc\Settings
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
PS C:\WINDOWS\system32> Get-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\ddpsvc\Settings DoNotDedup : {} GlobalDefaultsCreated : 1 SvcTelemetryLastLoggedTimeHighPart : 30967884 SvcTelemetryLastLoggedTimeLowPart : 385434989 PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Se rvices\ddpsvc\Settings PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Se rvices\ddpsvc PSChildName : Settings PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry PS C:\WINDOWS\system32> Set-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\ddpsvc\Settings -Name DeepGCInterval -Type DWord -Value 0xFFFFFFFF PS C:\WINDOWS\system32> PS C:\WINDOWS\system32> Get-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\ddpsvc\Settings DoNotDedup : {} GlobalDefaultsCreated : 1 SvcTelemetryLastLoggedTimeHighPart : 30967884 SvcTelemetryLastLoggedTimeLowPart : 385434989 DeepGCInterval : 4294967295 PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Se rvices\ddpsvc\Settings PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Se rvices\ddpsvc PSChildName : Settings PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry |
これで、インストールは完了になります。
ちなみにサーバOS(WinSV2012以降)であれば、サーバマネージャ(GUI)もしくは、Powershellで以下のコマンドを実行することでインストールできます。
Install-WindowsFeature -Name FS-Data-Deduplication
詳細はMSドキュメントを参照して下さい。
次回は、重複排除の有効化と、設定を実施する予定です。