DFS Namespaces и Replication в Windows Server: что мы делаем у клиентов
Меня зовут Семёнов Евгений Сергеевич, я директор АйТи Фреш. DFS (Distributed File System) — это та технология, про которую все знают, но мало кто умеет правильно настраивать. За 15 лет я развернул её у двух десятков клиентов: от мелких офисов на 10 человек до распределённых компаний с тремя филиалами в разных городах. В статье делюсь практикой: какие задачи DFS реально решает, как правильно проектировать пространство имён и репликацию, и какие грабли поджидают неопытного админа.
Зачем вообще DFS, если есть просто шары?
Самый частый аргумент: «у нас уже файловый сервер, всё работает». Соглашусь, для офиса из 5 человек DFS не нужна. А вот когда появляется второй сервер, или второй офис, или нужно перенести большую шару между машинами без простоя — без DFS становится больно.
Что DFS даёт на практике:
- Единая точка входа. Пользователи маппят один путь
\\company.local\Files\Documents, а реально файлы могут лежать на трёх разных серверах. Сменили сервер — никаких изменений на 200 рабочих местах. - Прозрачная миграция. Хотите переехать со старого 2012R2 на новый 2022 без простоя? Через DFS — добавили target, дождались репликации, переключили приоритет, удалили старый. Пользователи не заметили ничего.
- Геораспределённый доступ. Офис в Москве и филиал в Новосибирске. DFS Namespace + DFSR — каждый ходит на свой локальный сервер, изменения реплицируются дельтами RDC по медленному каналу.
- Резервный сервер на горячую. Активный сервер, синхронизированная реплика — если первый умер, клиенты сами переключаются на второй за секунды (благо Windows кэширует список targets).
- Защита от удалений. ConflictAndDeleted папка хранит копии удалённых файлов на каждом сервере. Не панацея, но иногда спасает.
Архитектура DFS: что под капотом
Технически DFS — это две независимые роли, которые часто работают вместе:
- DFS Namespaces (DFSN) — виртуальное пространство имён. Сервер DFSN не хранит файлы, он только перенаправляет клиентов на реальные шары. Конфигурация хранится в Active Directory (Domain-based Namespace) либо в реестре одного сервера (Standalone Namespace).
- DFS Replication (DFSR) — служба репликации файлов между серверами. Использует Remote Differential Compression (RDC) для передачи только изменённых блоков, а не файлов целиком. Конфигурация и состояние — в AD и локальной базе ESE.
В типовом проекте я делаю Domain-based Namespace + два-три DFSR-таргета. Standalone использую только в тех случаях, когда клиент категорически против AD (что в 2026 году бывает крайне редко).
Что нужно перед установкой DFS
Чек-лист, без которого я не начинаю:
- Active Directory с уровнем функциональности леса 2008 R2 или выше (для DFSR с поддержкой большого числа объектов).
- Минимум один сервер 2019/2022 на роль Namespace Server. Лучше два или три для отказоустойчивости.
- Серверы-таргеты с дисковым пространством под данные + 20 % запаса на staging area DFSR.
- Стабильное сетевое подключение между серверами. Для филиалов с медленными каналами обязательно настроить ограничение полосы пропускания DFSR в расписании.
- Понимание объёмов: сколько файлов, какой средний размер, как часто меняются, кто и откуда работает.
- Решённый вопрос с правами NTFS — DFS их не правит, права остаются как есть на исходных шарах.
Установка DFS Namespaces и DFS Replication
На Windows Server 2022 ставится через Server Manager или PowerShell. PowerShell быстрее:
# На сервере, который будет Namespace Server
Install-WindowsFeature -Name FS-DFS-Namespace -IncludeManagementTools
# На серверах, которые будут хранить данные
Install-WindowsFeature -Name FS-DFS-Replication -IncludeManagementTools
# Проверяем установленные роли
Get-WindowsFeature -Name FS-DFS-* | Where-Object Installed
Никакой перезагрузки не требуется, обе роли поднимаются на горячую. Дальше открываем DFS Management (dfsmgmt.msc) и начинаем создавать пространство имён.
Создание Domain-based Namespace
Через GUI:
- В DFS Management → Namespaces → New Namespace.
- Выбираем сервер, который будет Namespace Server (например, FS01).
- Указываем имя — например, Files. Получится
\\company.local\Files. - Выбираем Domain-based namespace и Mode 2008 (это дефолт для современных лесов, поддерживает access-based enumeration и до 50 000 папок).
- Готово. Namespace создан, можно добавлять folders.
То же самое через PowerShell:
# Создание domain-based namespace
New-DfsnRoot -TargetPath "\\FS01\Files" -Type DomainV2 -Path "\\company.local\Files"
# Добавляем второй namespace server для отказоустойчивости
New-DfsnRootTarget -TargetPath "\\FS02\Files" -Path "\\company.local\Files"
# Добавляем папку (link) в namespace
New-DfsnFolder -Path "\\company.local\Files\Documents" -TargetPath "\\FS01\Documents$"
# Добавляем второй target к этой папке
New-DfsnFolderTarget -Path "\\company.local\Files\Documents" -TargetPath "\\FS02\Documents$"
Настройка DFS Replication между серверами
DFSR работает группами репликации (Replication Group), внутри которых задаются папки и расписание. Настроим простой сценарий: репликация папки Documents между FS01 в Москве и FS02 в Новосибирске.
Через DFS Management:
- Replication → New Replication Group.
- Multi-purpose replication group.
- Имя — DocumentsReplication.
- Добавляем серверы FS01 и FS02.
- Топология — Full mesh (для двух серверов).
- Полоса пропускания — Full bandwidth для теста, потом ограничим.
- Primary member — FS01 (с него реплика пойдёт на FS02).
- Папка для репликации —
D:\Documentsна FS01. - На FS02 указываем локальный путь —
D:\Documents, и оставляем Disabled на старте, чтобы первая полная репликация прошла.
Через PowerShell, что я обычно делаю в скрипте автоматизации:
$RGName = "DocumentsReplication"
$Folder = "Documents"
# Создаём группу репликации
New-DfsReplicationGroup -GroupName $RGName
# Добавляем серверы
Add-DfsrMember -GroupName $RGName -ComputerName FS01,FS02
# Добавляем папку
New-DfsReplicatedFolder -GroupName $RGName -FolderName $Folder
# Указываем локальный путь на каждом сервере
Set-DfsrMembership -GroupName $RGName -FolderName $Folder -ComputerName FS01 \
-ContentPath "D:\Documents" -PrimaryMember $true -Force
Set-DfsrMembership -GroupName $RGName -FolderName $Folder -ComputerName FS02 \
-ContentPath "D:\Documents" -Force
# Создаём двунаправленное подключение
Add-DfsrConnection -GroupName $RGName -SourceComputerName FS01 -DestinationComputerName FS02
Расписание и ограничение полосы пропускания
Это самый частый недочёт у админов: запустили DFSR с full bandwidth и удивляются, почему канал между офисами лежит. Между Москвой и регионом канал обычно 50–200 Mbit, и если там полночь идёт реплика 200 GB изменений за день, утром все сидят без интернета.
В DFS Management → Replication Group → Connections → правый клик → Schedule and Bandwidth. Я обычно ставлю:
- 09:00–19:00 рабочие дни — 4 Mbit/s (чтобы не мешало работе).
- 19:00–07:00 будни и все выходные — Full bandwidth.
- На очень слабых каналах — расписание только в нерабочее время.
Через PowerShell:
# Ограничить пропускную способность 16 Mbit с 9 до 19 в будни
Set-DfsrConnectionSchedule -GroupName "DocumentsReplication" \
-SourceComputerName FS01 -DestinationComputerName FS02 \
-ScheduleType Custom -BandwidthDetail @{
Monday = @{Hour9_19 = 16; Hour19_24 = "Full"}
# ... аналогично для остальных дней
}
Как работает разрешение конфликтов
Когда один и тот же файл изменили на двух серверах одновременно, DFSR применяет правило «last writer wins». Побеждает версия с более поздним timestamp (с точностью до 100 нс). Проигравший файл не удаляется, а переименовывается с уникальным GUID и кладётся в специальную папку DfsrPrivate\ConflictAndDeleted на сервере, который этот файл проиграл.
Восстановить проигравшую версию можно вручную через утилиту Conflict and Deleted Manifest:
# PowerShell: показать все конфликтные файлы
Get-DfsrPreservedFiles -ComputerName FS02 -FolderName "Documents"
# Восстановить конкретный файл
Restore-DfsrPreservedFiles -ComputerName FS02 -FolderName "Documents" \
-FileName "Report.docx" -Path "D:\Restore"
Размер папки ConflictAndDeleted ограничивается квотой (по умолчанию 660 MB или 4 GB в зависимости от размера папки). Старые файлы вытесняются. Если у клиента активная работа в общих файлах, я часто увеличиваю квоту до 50 GB и использую её как «короткую корзину» для экстренного восстановления.
Миграция SYSVOL с FRS на DFSR
До сих пор у меня периодически попадаются домены 2003/2008, где SYSVOL реплицируется через древний FRS, и админ боится мигрировать. Зря. Процедура отработана, занимает один вечер, и без неё нельзя поднимать функциональный уровень леса.
Шаги через dfsrmig.exe (запускать с PDC Emulator):
# Проверяем текущее состояние
dfsrmig /getmigrationstate
# Должно быть: All Domain Controllers have migrated to the Start state (0).
# Переходим в Prepared (state 1)
dfsrmig /setglobalstate 1
# Ждём, проверяем
dfsrmig /getmigrationstate
# Когда все DC синхронизировались — Redirected (state 2)
dfsrmig /setglobalstate 2
# Ждём окончания
# Финал — Eliminated (state 3), удаляет FRS
dfsrmig /setglobalstate 3
Между состояниями жду минимум 24 часа на больших доменах, чтобы все DC успели среплицироваться. Если что-то идёт не так — на этапе Prepared и Redirected можно откатиться обратно. После Eliminated — точка невозврата, FRS удалён.
Мониторинг и диагностика DFS
На каждый DFS-сервер я ставлю в Zabbix несколько проверок:
- Состояние службы DFS Namespace и DFS Replication (должны быть Running).
- Количество необработанных файлов в backlog (через
Get-DfsrBacklog) — выше 1000 на одной паре, скорее всего, репликация задыхается. - Размер staging area (по умолчанию 4 GB, для больших папок поднимаю до 200 GB).
- Ошибки в Event Log канала DFS Replication (Application and Services Logs → DFS Replication).
- Доступность DFS Namespace через тестовое монтирование с тестовой машины.
Полезные команды для диагностики, которые я регулярно использую:
# Проверить состояние всех DFSR-членов
Get-DfsReplicationGroup | Get-DfsrMember
# Backlog файлов между двумя серверами
Get-DfsrBacklog -GroupName "DocumentsReplication" -FolderName "Documents" \
-SourceComputerName FS01 -DestinationComputerName FS02
# Состояние реплицируемой папки
Get-DfsrState -ComputerName FS02
# Тест разрешения путей DFSN
dfsutil /pktinfo
dfsutil diag viewdfspath \\company.local\Files\Documents
Лучшие практики, которые я вынес из 15 лет
- Не складывайте в DFSR файлы баз данных. SQL, 1С, Postgres — нет. DFSR не умеет реплицировать открытые файлы по дельте, и у вас будут постоянные конфликты. Для баз — Always On Availability Groups или специализированная репликация.
- Не реплицируйте папку Outlook OST. Файлы кэша почты по 50 GB, активно меняются, генерируют постоянный поток — убивают канал и базу DFSR.
- Включайте RDC только на медленных каналах. На локальной гигабитной сети RDC создаёт лишнюю нагрузку на CPU и не даёт выигрыша.
- Регулярно делайте Health Report. В DFS Management → Replication → Create Diagnostic Report. Пробегайте отчёт раз в месяц.
- Антивирус на сервере с DFSR требует исключений. Папка контента + папка
DfsrPrivate+ база ESE. Иначе AV открывает файлы, DFSR пытается их синхронизировать, начинаются конфликты. - Защита от шифровальщиков. DFSR честно среплицирует зашифрованные файлы на все таргеты. Поэтому DFSR — это не бэкап, нужна отдельная стратегия с теневыми копиями и off-site бэкапами.
- Документируйте схему репликации. Через год вы забудете, какая папка куда реплицируется. Я веду в Confluence таблицу: Replication Group → Folder → Members → Schedule.
Кейс: DFS для торговой компании с 4 филиалами
В декабре 2025 нас позвали в торговую компанию: офис в Москве, филиалы в Питере, Краснодаре и Екатеринбурге, по 12–18 рабочих мест в каждом. До этого они работали так: каждый филиал жил на своём маленьком файловом сервере, документы передавались по почте и в чатах. Куча версий одного и того же договора, никто не понимает, какая актуальная.
За три недели мы развернули единую DFS-инфраструктуру:
- В Москве — два namespace-сервера на Windows Server 2022 (Hyper-V на R740).
- В каждом филиале — локальный DFSR-таргет на маленьком NAS QNAP с Windows Storage Server.
- Domain-based namespace
\\holding.local\Filesс 12 фолдерами (Договоры, Маркетинг, Бухгалтерия и т.д.). - Расписание DFSR: рабочее время — 8 Mbit/s, вечером и в выходные — full bandwidth.
- Каждый филиал ходит на свой локальный таргет (через site-cost в AD), так что доступ к файлам быстрый, а изменения долетают до всех в течение нескольких минут.
- Бэкап через Veeam Agent на основной сервер в Москве, плюс еженедельный архив в Я.Облако.
Через полгода компания выросла до 5 филиалов — добавление нового заняло 2 часа: установка таргета, добавление в namespace, дождались первой синхронизации. Никаких изменений на рабочих местах.
Нужно развернуть или починить DFS у вас в офисе?
Я лично выезжаю на аудит инфраструктуры в Москве и в радиусе 50 км от МКАД. Проектирую DFS под ваши задачи, разворачиваю Namespaces и DFSR, обучаю ваших админов. Без обязательств.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — частые вопросы по DFS
- В чём разница между DFS Namespaces и DFS Replication?
- Namespaces создают единое имя
\\company.local\Files, за которым прячутся реальные шары на разных серверах. Replication копирует данные между серверами по дельте RDC. - Можно ли использовать DFSR без домена?
- Нет, DFSR требует Active Directory. Альтернативы для рабочих групп: Robocopy с расписанием, Resilio Sync, Syncthing.
- Какой максимальный размер реплицируемой папки в DFSR?
- На Windows Server 2012 R2+ теоретического лимита нет. Практически 100 TB и миллион файлов работают, дальше начинаются проблемы.
- Что делать при конфликте имён в DFSR?
- DFSR разрешает по timestamp: побеждает более позднее изменение. Проигравший файл переименовывается и кладётся в ConflictAndDeleted.
- Как мигрировать SYSVOL с FRS на DFSR?
- Через dfsrmig.exe в 4 этапа: state 0 → 1 → 2 → 3. Между состояниями ждём окончания репликации.