Возможность дедупликации данных впервые появилась в Windows Server 2012. С тех пор прошло много времени и в Windows Server 2016 включена уже третья версия дедупликации, переработанная и улучшенная. О том, что именно умеет новая дедупликация и чем она отличается от предыдущих реализаций, а также об особенностях ее настройки и работы и пойдет речь в этой и последующих статьях.
Начнем с изменений. Итак
Что нового
Первое и наиболее важное изменение в работе дедупликации Windows Server 2016 — это введение многопоточности.
Многопоточность
В Windows Server 2012 R2 дедупликация работает в однопоточном режиме и может задействовать не более 1 процессорного ядра на один том. Это серьезно ограничивает производительность, а для обхода этого ограничения необходимо разбивать диски на несколько томов меньшего размера. При этом максимальный размер тома не должен быть больше 10Тб.
В Windows Server 2016 движок дедупликации переработан и задание дедупликации может работать в многопоточном режиме, используя для каждого тома сразу несколько вычислительных потоков и очередей ввода\вывода. Изменения эти наглядно проиллюстрированы на картинке ниже, честно позаимствованной 🙂 на технете.
На картинке все выглядит красиво и убедительно, а как обстоит дело на практике? Чтобы убедиться в том, что многопоточность действительно работает, я провел небольшой эксперимент. Для эксперимента я взял сервер с двумя 6-ядерными процессорами, что при включенном HyperThreading дает нам 24 логических процессора. На сервере была установлена Windows Server 2012 R2 и включена дедупликация для одного тома.
Я запустил на сервере процедуру оптимизации, замерил производительность и выяснил, что процесс дедупликации (fsdmhost.exe) использует максимум 4% мощности процессора, что примерно соответствует 1 логическому ядру.
Затем операционная система на сервере была проапгрейжена на Windows Server 2016, после чего я повторно замерил производительность. И как видите, после апгрейда дедупликация уже не ограничена одним ядром и может использовать больше 4% процессорной мощности сервера.
Внедрение многопоточности и другие изменения в движке повлияли на ограничения по размеру томов и файлов. Поскольку многопоточность увеличивает производительность дедупликации и снимает необходимость в разбиении диска на несколько томов, в Windows Server 2016 для дедупликации можно использовать тома до 64Тб. Также увеличен максимальный размер файла, теперь поддерживается дедупликация файлов размером до 1Тб.
Ну и изменения помельче.
Поддержка виртуализованных приложений резервного копирования
В Windows Server 2012 был всего один тип дедупликации, предназначенный в основном для обычных файловых серверов. Дедупликация таких нагрузок, как постоянно работающие виртуальные сервера, не поддерживалась, поскольку дедупликация не умела работать с открытыми файлами.
В Windows Server 2012 R2 дедупликация научилась использовать VSS, соответственно стала поддерживаться дедупликация виртуальных серверов. Для таких нагрузок появился отдельный тип дедупликации.
В Windows Server 2016 добавился еще один, третий тип дедупликации, предназначенный специально для виртуализованных серверов резервного копирования (напр. DPM). Надо сказать, что такой вариант был и раньше, однако в связи со специфическими нагрузками настройки дедупликации требовалось подбирать вручную. В Windows Server 2016 для таких нагрузок добавлен отдельный тип дедупликации, уже включающий в себя необходимые настройки.
Поддержка Nano Server
Nano Server — это вариант развертывания операционной системы Windows Server 2016 с минимальным количеством устанавливаемых компонентов. Nano Server полностью поддерживает дедупликацию.
Поддержка последовательного обновления кластера
Последовательное обновление кластера (Cluster OS Rolling Upgrade) — это новая функция Windows Server 2016, с помощью которой можно последовательно проапгрейдить операционную систему на каждом узле кластера с Server 2012 R2 до Server 2016, при этом не останавливая работу кластера. Это возможно благодаря специальному смешанному режиму работы кластера, когда в кластере одновременно могут работать узлы Windows Server 2012 R2 и Windows Server 2016.
Смешанный режим означает, что одни и те-же данные могут находиться на узлах с разными версиями дедупликации. Дедупликация Windows Server 2016 поддерживает этот режим и обеспечивает доступ к дедуплицированным данным в течение всего процесса обновления кластера.
Установка и включение дедупликации
Первое, что нужно сделать для включения дедупликации — это установить соответствующую роль сервера. Можно из оснастки «Server Manager» запустить мастер и добавить роль файлового сервера с компонентом «Data Deduplication».
Либо из PowerShell выполнить команду:
Install-WindowsFeature -Name FS-Data-Deduplication -IncludeAllSubfeature -IncludeManagementTools
Включение и настройка дедупликации
После добавления компонента надо включить дедупликацию для конкретного тома (или нескольких томов). Сделать это можно двумя разными способами — из графической оснастки либо с помощью PowerShell.
Для настройки из GUI открываем «Server Manager», переходим в раздел «File and storage services» — «Volumes», встаем на нужный том, кликаем по нему правой клавишей мыши и в открывшемся меню выбираем пункт «Configure Data Deduplication».
Затем выбираем необходимый тип дедупликации и жмем «Apply». Дополнительно можно указать типы файлов, которые не должны подвергаться дедупликации, а также исключить из дедупликации определенные директории.
Следующее, что необходимо сделать после включения — это настроить расписание, по которому будут отрабатывать задания дедупликации, поэтому дальше жмем на кнопку «Set Deduplication Schedule».
По умолчанию включена фоновая оптимизация (background optimization), а также можно настроить два дополнительных задания принудительной оптимизации (throughput optimization). Настроек здесь немного — можно только выбрать дни недели, задать время запуска и продолжительность работы.
Гораздо больше возможностей для настройки предоставляет PowerShell. Для включения дедупликации используем такую команду:
Enable-DedupVolume -Name D: -UsageType HyperV
После включения просмотрим имеющиеся задания дедупликации:
Get-DedupSchedule
Как видите, здесь картина несколько иная. Так кроме фоновой оптимизации имеется задание приоритетной оптимизации (PriorityOptimization), а также задания сборки мусора (GarbageCollection) и очистки (Scrubbing). Все эти задания не видны из графической оснастки.
Кроме этого, PowerShell позволяет более тонко настроить параметры выполнения задания. Для примера создадим новое задание оптимизации. Задание должно запускаться в 8 утра с понедельника по пятницу и работать 12 часов, с нормальным приоритетом, использовать не более 50% оперативной памяти и 100% процессорной мощности:
New-DedupSchedule -Name ThroughputOptimization -Type Optimization -Days @(1,2,3,4,5) -DurationHours 12 -Start (Get-Date ″12/8/2016 8:00 PM″) -Memory 50 -Cores 100 -Priority Normal
Примечание. В принципе заданию можно дать любое имя. Но если создать задание с именем ThroughputOptimization, то оно будет отображаться и в графической оснастке.
Затем произведем еще несколько изменений. Во первых сменим время и параметры запуска задания сбора мусора:
Set-DedupSchedule -Name WeeklyGarbageCollection -DurationHours 12 -Start (Get-Date ″12/8/2016 8:00 PM″) -Memory 50 -Cores 100 -Priority Normal -Full $true
Перенесем на воскресенье задание очистки:
Set-DedupSchedule -Name WeeklyScrubbing -Days Sunday -DurationHours 12 -Start (Get-Date ″12/8/2016 8:00 PM″) -Memory 50 -Cores 100 -Priority Normal
И отключим приоритетную оптимизацию:
Set-DedupSchedule -Name PriorityOptimization -Enabled $false
Ручной запуск дедупликации
При необходимости задание дедупликации можно запустить вручную. Для примера запустим полную оптимизацию тома D с максимальным приоритетом:
Start-DedupJob -Volume D: -Type Optimization -Memory 75 -Cores 100 -Priority High -Full
Отследить запущенные задания дедупликации можно с помощью команды Get-DedupJob. Обратите внимание, что одновременно отрабатывает только одна задача, а остальные стоят в очереди и ждут ее завершения. Если текущая задача не завершится в ближайшее время, то задания в очереди отменятся и очередь будет очищена. Об этом необходимо помнить при составлении расписания, так как если различные задачи пересекаются между собой, то некоторые из них не смогут вовремя отработать.
Просмотр состояния дедупликации
Данные о состоянии дедупликации для тома можно посмотреть командой:
Get-DedupVolume -Volume D: | fl
Так мы можем посмотреть основные параметры тома — полный объем, свободное место, уровень сжатия и т.д.
А проверить состояние заданий дедупликации можно такой командой:
Get-DedupStatus -Volume D: | fl
Эта команда кроме всего прочего покажет, когда и с каким результатом были завершены задания дедупликации. В случае проблем с дедупликацией эту информацию можно использовать для диагностики.
Выключение дедупликации
Отключить дедупликацию для тома можно либо из графической оснастки, убрав соответствующую галочку, либо с помощью PowerShell. Например:
Disable-DedupVolume -Name D:
Выключение дедупликации для тома отменяет все запланированные задания, а также запрещает запуск любых задач дедупликации, кроме read-only операций (команды типа Get) и раздедупликации (unoptimization). При этом сами данные остаются в том же состоянии, в котором они были до выключения дедупликации, просто новые данные перестают дедуплицироваться.
После выключения дедупликации доступ к данным остается и с ними можно работать так же, как и раньше. Это поведение можно изменить, воспользовавшись ключом DataAccess, например:
Disable-DedupVolume -Name D: -DataAccess
Эта команда удаляет драйвер-фильтр файловой системы для указанного тома, тем самым останавливая все операции ввода-вывода для дедуплицированных файлов. Соответственно при попытке обращения к файлам вы получите отказ в доступе. Вернуть доступ можно командой Enable-DedupVolume с ключом DataAccess.
Ну и если необходимо полностью убрать дедупликацию и вернуть данные к исходному состоянию, то можно воспользоваться процедурой раздедупликации. Например следующей командой запустим раздедупликацию для тома D с максимально-возможной скоростью:
Start-DedupJob -Volume D: -Type Unoptimization -Memory 100 -Cores 100 -Priority High -Full
Обратите внимание, что для раздедупликации потребуется дополнительное дисковое пространство. Если свободного места на томе недостаточно, то процедура завершится ошибкой. В этом случае можно воспользоваться альтернативным способом — просто скопировать данные на другой том. При копировании данные автоматически разжимаются, опять же можно раздедуплицировать не сразу весь том, а скопировать данные по частям.
На этом пока закончим. А в следующей части более подробно разберем настройки дедупликации и рассмотрим некоторые особенности ее работы.
Интересно, спасибо. А как насчет дедупликации томов в ВМ (серверные ОС) на хостах Hyper-V, раньше читал что MS не рекомендует этого. Есть практический опыт?