Storage
October 31, 2019

Полностью отключаем дедупликацию в Windows

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

Вопреки традициям начнем с короткого практического вступления. После апгрейда дисковой подсистемы в нашей виртуальной лаборатории мы решили отключить дедупликацию и восстановить дедуплицированные данные. Общий объем данных на томе составлял 2,9 ТБ, в сжатом виде он занимал 1,2 ТБ, а емкость дискового массива равнялась 3,63 ТБ. Вроде бы все в порядке и проблем возникнуть не должно, места для восстановленных данных хватает с запасом. Ну тогда запускаем!

Через какое-то время мы с некоторым удивлением наблюдали следующую картину:

Первая мысль - что вообще происходит?! Как такое может быть?! Некоторые, слабые духом администраторы могут в такой момент удариться в панику и начать предпринимать необдуманные действия, последствия которых могут быть самыми разными по силе деструктивного воздействия.

Но не будем спешить, а прежде всего разберемся в сути происходящих процессов. Начнем с дедупликации, что происходит во время оптимизации данных? Давайте посмотрим на схему ниже:

Уникальные данные обозначены синим цветом, а одинаковые блоки зеленым и красным. В процессе дедупликации такие блоки копируются в специальное хранилище и в таблице файлов (MFT) ссылки на них заменяются ссылками на блок хранилища. Оптимизированные блоки могут быть сразу очищены, безо всякого опасения потери данных, тем самым достигается выигрыш в дисковом пространстве.

В нашем примере степень дедупликации составила 25%, при этом объем данных на диске уменьшился с 4 ГБ до 2,5 ГБ, но еще 0,5 ГБ оказалось помещено в хранилище.

А теперь рассмотрим обратный процесс.

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

Таким образом для успешного восстановления нам нужно иметь запас свободного пространства равный размеру данных + размеру хранилища! Размер хранилища в свою очередь зависит от разнородности данных, чем более разнообразные данные хранятся на томе, тем большее количество блоков будет находиться в хранилище и может оказаться так, что свободного места на томе для одновременного расположения восстановленных данных и хранилища не хватит.

Что делать в таком случае? Остановить процесс восстановления и принудительно выполнить уборку мусора. Обычно администраторы нервно реагируют на прерывание процессов обработки данных, но в данном случае бояться нечего.

Целостность данных обеспечивается на уровне файловой системы NTFS, блок может быть или восстановлен, тогда ссылка в MFT будет указывать на блок данных, либо дедуплицирован - ссылка указывает на хранилище. Даже если произойдет аварийное завершение работы, то NTFS при загрузке изучит журнал и зафиксирует завершенные транзакции и откатит незавершенные.

Давайте посмотрим еще на одну схему:

В процессе восстановления система успела восстановить два нижних файла и частично один верхний, но затем да диске закончилось свободное место. Останавливаем восстановление и запускаем уборку мусора. Сборщик мусора произведет анализ и выяснит, что на красный блок хранилища ссылок в MFT нет и его можно удалить. Таким образом часть места будет освобождена и процесс восстановления можно будет продолжить.

Как оценить размер необходимого свободного пространства? Достаточно просто, сначала откройте свойства диска, затем выделите все пользовательские данные и оцените их размер.

Как видим размер оптимизированных данных 20,7 ГБ, полный размер 64,5 ГБ из них на диске 32,8 МБ. Что это значит? А это означает, что остальной объем данных расположен в хранилище. Так как размером в 38 МБ можно пренебречь, то мы имеем размер хранилища в 20,7 ГБ, поэтому для успешного восстановления данных нам потребуется 85,2 ГБ.

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

Затем откроем консоль PowerShell с правами администратора и запустим процесс восстановления данных:

Start-DedupJob -Volume D: -Type Unoptimization

Если свободного места для завершения операции нам не хватает, то остановим операцию:

Stop-DedupJob -Volume D:

Так как данная операция автоматически выключает дедупликацию для тома снова включим ее:

Enable-DedupVolume -Volume D:

И запустим уборку мусора:

Start-DedupJob -Volume D: -Type GarbageCollection

По окончании данного процессора снова можно запустить процесс восстановления данных. Для контроля выполняемых процессов используйте команду:

Get-DedupJob

Однако имейте в виду, что большую часть времени индикатор выполнения находится на нулевом значении, а потом быстро пробегает до 100%, косвенно оценить выполнение задания можно по дисковой активности системы. Скорость восстановления несколько выше скорости дедупликации, но все равно ниже скорости обычного копирования данных. Поэтому если есть возможность скопировать данные, отформатировать том и вернуть их назад - так и следует поступить, будет гораздо быстрее.

Можно ли работать с данными во время процесса восстановления? Да, можно, но придется мириться с некоторым снижением производительности дисковой подсистемы. Как показывает наш опыт, критического падения производительности не происходит, мы даже смогли запустить несколько виртуальных машин и работать с ними, не испытывая сильного дискомфорта.

После того, как все операции будут завершены еще раз проверьте состояние дедупликации командой:

Get-DedupVolume

Дедупликация тома должна быть выключена (False в колонке Enabled), если это не так, то выполните:

Disable-DedupVolume -Volume D:

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

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