Заметки о Windows и других программных продуктах Microsoft...

Дедупликация данных в Windows Server 2016 (часть 1)

Дедупликация данных в Windows Server 2016 (часть 1)

Возможность дедупликации данных впервые появилась в Windows Server 2012. С тех пор прошло много времени и в Windows Server 2016 включена уже третья версия дедупликации, переработанная и улучшенная. О том, что именно умеет новая дедупликация и чем она отличается от предыдущих реализаций, а также об особенностях ее настройки и работы и пойдет речь в этой и последующих статьях.

Начнем с изменений. Итак

Что нового

Первое и наиболее важное изменение в работе дедупликации Windows Server 2016 — это введение многопоточности.

Многопоточность

В Windows Server 2012 R2 дедупликация работает в однопоточном режиме и может задействовать не более 1 процессорного ядра на один том. Это серьезно ограничивает производительность, а для обхода этого ограничения необходимо разбивать диски на несколько томов меньшего размера. При этом максимальный размер тома не должен быть больше 10Тб.

В Windows Server 2016 движок дедупликации переработан и задание дедупликации может работать в многопоточном режиме, используя для каждого тома сразу несколько вычислительных потоков и очередей ввода\вывода. Изменения эти наглядно проиллюстрированы на картинке ниже, честно позаимствованной 🙂 на технете.

схема дедупликации в Windows Server 2016

 

На картинке все выглядит красиво и убедительно, а как обстоит дело на практике?  Чтобы убедиться в том, что многопоточность действительно работает, я провел небольшой эксперимент. Для эксперимента я взял сервер с двумя 6-ядерными процессорами, что при включенном HyperThreading дает нам 24 логических процессора. На сервере была установлена Windows Server 2012 R2 и включена дедупликация для одного тома.

Я запустил на сервере процедуру оптимизации, замерил производительность и выяснил, что процесс дедупликации (fsdmhost.exe) использует максимум 4% мощности процессора, что примерно соответствует 1 логическому ядру.

нагрузка на процессор в Windows Server 2012R2

 

Затем операционная система на сервере была проапгрейжена на Windows Server 2016, после чего я повторно замерил производительность. И как видите, после апгрейда дедупликация уже не ограничена одним ядром и может использовать больше 4% процессорной мощности сервера.

нагрузка процессора в Windows Server 2016

 

Внедрение многопоточности и другие изменения в движке повлияли на ограничения по размеру томов и файлов. Поскольку многопоточность увеличивает производительность дедупликации и снимает необходимость в разбиении диска на несколько томов, в 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».

установка дедупликации через GUI

 

Либо из PowerShell выполнить команду:

Install-WindowsFeature -Name FS-Data-Deduplication -IncludeAllSubfeature -IncludeManagementTools

установка дедупликации через PowerShell

Включение и настройка дедупликации

После добавления компонента надо включить дедупликацию для конкретного тома (или нескольких томов). Сделать это можно двумя разными способами — из графической оснастки либо с помощью 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

 

Кроме этого, 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

Настройка расписания дедупликации через PowerShell

Ручной запуск дедупликации

При необходимости задание дедупликации можно запустить вручную. Для примера запустим полную оптимизацию тома 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 не рекомендует этого. Есть практический опыт?

А как насчет дедупликации томов c ВМ (серверные ОС) — в предыдущем посте описка.

Это было в Server 2012, начиная с Server 2012 R2 можно дедуплицировать виртуальные машины. Я использую дедупликацию на Hyper-V серверах, экономия по месту примерно 50%-60%. Но дедупликация — штука прожорливая, особенно в Server 2016. Тут надо очень точно рассчитывать нагрузку, иначе либо дедупликация не может нормально отработать, либо сервер может лечь.

Это хорошо. Еще пару вопросов:
1. Как сильно влияет дедупликация на производительность сервера, в частности дисковой подсистемы?
2. Если вручную пнуть дедупликацию командой Start-DedupJob -Volume D: -Type Optimization -Memory 75 -Cores 100 -Priority High -Full, то она гарантированно отожрет 75% памяти и 100%, или это просто верхняя граница?

1. Достаточно заметно. Особенно по памяти, по диску меньше.
2. Это верхняя граница. Но по опыту — если запустить на более-менее нагруженном сервере эту команду, то сервер может лечь.

Дмитрий

Подскажите, если диск с включенной дедупликацией подсоединить к другой машине, дедуплицированные данные будут доступны или как?

Просто потаюсь предугадать действия по восстановлению данных например после выхода из строя компьтера, каким образом данные можно перенести например на другой сервер.

Если на другой машине дедупликация установлена, то данные должны быть доступны.