5 филиалов и 5 версий одного файла: DFS-репликация для логистической компании

Задача клиента: логистическая компания, где каждый филиал жил своей жизнью

В марте 2026 года к нам в АйТи Фреш обратилась логистическая компания РосЛогистик из Самары. Компания управляет грузоперевозками по всей России и имеет 5 филиалов: головной офис в Самаре и подразделения в Казани, Нижнем Новгороде, Перми и Уфе. Общий штат — 180 сотрудников.

Проблема, которая привела клиента к нам, была знакома многим распределённым компаниям: сотрудники в разных филиалах работали с разными версиями одних и тех же документов. Накладные, маршрутные листы, договоры — всё это редактировалось локально и отправлялось по почте «для синхронизации». В результате диспетчер в Казани планировал маршрут по устаревшему прайс-листу, а бухгалтерия в Самаре не видела актов из Перми.

«Мы потеряли крупный контракт: клиенту отправили коммерческое предложение с прошлогодними тарифами. Казанский филиал работал со старым файлом, который кто-то забыл обновить. Это стало последней каплей» — коммерческий директор РосЛогистик.

Руководство поставило задачу: единое файловое пространство для всех филиалов, автоматическая синхронизация, работа при отключении связи между филиалами и прозрачность для пользователей.

Аудит файловой инфраструктуры

Мы обследовали каждый филиал и составили картину:

  • Самара (головной) — Windows Server 2022, файловый сервер с общими папками, 850 ГБ данных, Active Directory
  • Казань — Windows Server 2019, локальный файловый сервер, 320 ГБ данных, присоединён к домену через site-to-site VPN
  • Нижний Новгород — Windows Server 2019, аналогично Казани, 280 ГБ
  • Пермь — NAS Synology DS920+, не в домене, 200 ГБ данных
  • Уфа — общие папки на рабочей станции Windows 11 Pro (!!!), 150 ГБ

Каналы связи между филиалами — site-to-site VPN через MikroTik, пропускная способность от 20 до 50 Мбит/с. Основные проблемы:

  • Нет единого пространства имён — пользователи подключают сетевые диски вручную по IP-адресам
  • Нет автоматической репликации — файлы копируются вручную или через почту
  • Конфликты версий — два человека редактируют один файл, побеждает «последний сохранивший»
  • Пермь и Уфа — вне домена, нет централизованного управления

Проектирование решения на DFS

Мы выбрали связку DFS Namespaces + DFS Replication (DFSR) — встроенные компоненты Windows Server, не требующие дополнительных лицензий. Преимущества перед альтернативами:

РешениеПлатформаЛицензияИнтеграция с ADOffline-доступ
DFS Namespaces + DFSRWindows ServerВключено в ОСНативнаяЧерез Offline Files
Nextcloud + syncLinux/WindowsБесплатноЧерез LDAPКлиент синхронизации
SyncthingКроссплатформенноБесплатноНетДа
Azure File SyncГибридПодписка AzureЧерез Azure ADДа

DFS выиграл благодаря нативной интеграции с Active Directory, отсутствию дополнительных затрат и прозрачности для пользователей — они работают с привычным UNC-путём \\roslogistic.local\shared и не задумываются, с какого сервера получают файл.

Архитектура решения:

# Архитектура DFS
┌─────────────────────────────────────────────────────┐
│     DFS Namespace: \\roslogistic.local\shared       │
│     (Domain-based, Windows Server mode)              │
└───────────┬──────────────┬──────────────┬───────────┘
            │              │              │
     ┌──────▼──────┐ ┌────▼──────┐ ┌─────▼─────┐
     │  Самара     │ │  Казань   │ │  Н.Новгород│
     │  DC01-SAM   │ │  FS-KAZ   │ │  FS-NNO   │
     │  (Hub)      │ │  (Spoke)  │ │  (Spoke)  │
     └──────┬──────┘ └───────────┘ └───────────┘
            │
     ┌──────▼──────┐ ┌────────────┐
     │  Пермь     │ │  Уфа       │
     │  FS-PRM    │ │  FS-UFA    │
     │  (Spoke)   │ │  (Spoke)   │
     └────────────┘ └────────────┘

  Топология: Hub-and-Spoke (Самара — центр)

Подготовка серверов и Active Directory

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

Ввод Перми и Уфы в домен

Филиалы в Перми и Уфе требовали особого внимания. В Перми мы заменили Synology на Windows Server 2022 Standard (виртуальная машина на существующем Hyper-V хосте). В Уфе — развернули новый сервер:

# Пермь: установка Windows Server 2022 на Hyper-V
# После установки ОС — присоединение к домену
Add-Computer -DomainName roslogistic.local -Credential (Get-Credential) -Restart

# Уфа: аналогично, после установки
Add-Computer -DomainName roslogistic.local -Credential (Get-Credential) -Restart

# Проверяем, что все серверы в домене
Get-ADComputer -Filter * -SearchBase "OU=Servers,DC=roslogistic,DC=local" | Select-Object Name, DNSHostName

# Name        DNSHostName
# ----        -----------
# DC01-SAM    dc01-sam.roslogistic.local
# FS-KAZ      fs-kaz.roslogistic.local
# FS-NNO      fs-nno.roslogistic.local
# FS-PRM      fs-prm.roslogistic.local
# FS-UFA      fs-ufa.roslogistic.local

Установка роли DFS на все серверы

Роли DFS Namespaces и DFS Replication устанавливаются через Server Manager или PowerShell:

# На каждом файловом сервере (можно удалённо через Invoke-Command)
$servers = @('DC01-SAM','FS-KAZ','FS-NNO','FS-PRM','FS-UFA')

Invoke-Command -ComputerName $servers -ScriptBlock {
    Install-WindowsFeature -Name FS-DFS-Namespace, FS-DFS-Replication -IncludeManagementTools
    Get-WindowsFeature FS-DFS* | Format-Table Name, InstallState
}

# Результат на каждом сервере:
# Name                    InstallState
# ----                    ------------
# FS-DFS-Namespace        Installed
# FS-DFS-Replication      Installed

Также на каждом сервере создали единообразную структуру папок:

# Создаём корневую папку для DFS-данных
$servers | ForEach-Object {
    Invoke-Command -ComputerName $_ -ScriptBlock {
        New-Item -Path 'D:\DFSRoots\Shared' -ItemType Directory -Force
        New-Item -Path 'D:\DFSStaging' -ItemType Directory -Force

        # Создаём SMB-шару
        New-SmbShare -Name 'Shared' -Path 'D:\DFSRoots\Shared' -FullAccess 'ROSLOGISTIC\Domain Admins' -ChangeAccess 'ROSLOGISTIC\Domain Users'
    }
}

Настройка DFS Namespaces

DFS Namespaces создаёт единую точку входа \\roslogistic.local\shared, за которой скрываются физические серверы. Пользователь в Казани автоматически попадает на ближайший сервер FS-KAZ, а не тянет файлы из Самары через VPN.

Создание пространства имён

# Создаём доменное пространство имён
New-DfsnRoot -TargetPath '\\DC01-SAM\Shared' -Type DomainV2 -Path '\\roslogistic.local\shared' -Description 'Общие файлы РосЛогистик'

# Добавляем целевые папки (folder targets) для каждого филиала
# Папка "Документы" — реплицируется на все серверы
New-DfsnFolder -Path '\\roslogistic.local\shared\Документы' -TargetPath '\\DC01-SAM\Shared\Документы'
New-DfsnFolderTarget -Path '\\roslogistic.local\shared\Документы' -TargetPath '\\FS-KAZ\Shared\Документы'
New-DfsnFolderTarget -Path '\\roslogistic.local\shared\Документы' -TargetPath '\\FS-NNO\Shared\Документы'
New-DfsnFolderTarget -Path '\\roslogistic.local\shared\Документы' -TargetPath '\\FS-PRM\Shared\Документы'
New-DfsnFolderTarget -Path '\\roslogistic.local\shared\Документы' -TargetPath '\\FS-UFA\Shared\Документы'

# Папка "Бухгалтерия" — только Самара и филиал, где работают бухгалтеры
New-DfsnFolder -Path '\\roslogistic.local\shared\Бухгалтерия' -TargetPath '\\DC01-SAM\Shared\Бухгалтерия'
New-DfsnFolderTarget -Path '\\roslogistic.local\shared\Бухгалтерия' -TargetPath '\\FS-KAZ\Shared\Бухгалтерия'

# Папка "Шаблоны" — реплицируется read-only на филиалы
New-DfsnFolder -Path '\\roslogistic.local\shared\Шаблоны' -TargetPath '\\DC01-SAM\Shared\Шаблоны'

# Проверяем пространство имён
Get-DfsnFolder -Path '\\roslogistic.local\shared\*' | Format-Table Path, State

# Path                                           State
# ----                                           -----
# \\roslogistic.local\shared\Документы           Online
# \\roslogistic.local\shared\Бухгалтерия         Online
# \\roslogistic.local\shared\Шаблоны             Online

Настройка referral ordering и site awareness

Чтобы клиенты обращались к ближайшему серверу, настроили AD Sites and Services и порядок referral:

# AD Sites (должны быть уже настроены, если нет — создаём)
# Site: Samara — subnet 10.10.1.0/24
# Site: Kazan — subnet 10.10.2.0/24
# Site: NNovgorod — subnet 10.10.3.0/24
# Site: Perm — subnet 10.10.4.0/24
# Site: Ufa — subnet 10.10.5.0/24

New-ADReplicationSite -Name 'Samara'
New-ADReplicationSite -Name 'Kazan'
New-ADReplicationSite -Name 'NNovgorod'
New-ADReplicationSite -Name 'Perm'
New-ADReplicationSite -Name 'Ufa'

New-ADReplicationSubnet -Name '10.10.1.0/24' -Site 'Samara'
New-ADReplicationSubnet -Name '10.10.2.0/24' -Site 'Kazan'
New-ADReplicationSubnet -Name '10.10.3.0/24' -Site 'NNovgorod'
New-ADReplicationSubnet -Name '10.10.4.0/24' -Site 'Perm'
New-ADReplicationSubnet -Name '10.10.5.0/24' -Site 'Ufa'

# Настройка referral ordering — приоритет ближайшему серверу
Set-DfsnRoot -Path '\\roslogistic.local\shared' -EnableSiteCosting $true -EnableInsiteReferrals $true

# Таймаут кэша referral — 30 минут
Set-DfsnRoot -Path '\\roslogistic.local\shared' -TimeToLiveSec 1800

Теперь при обращении к \\roslogistic.local\shared\Документы клиент в Казани сначала получит referral на FS-KAZ, и только при его недоступности — на серверы других сайтов.

Настройка DFS Replication

DFS Replication (DFSR) обеспечивает автоматическую синхронизацию содержимого папок между серверами. Это основной механизм, который решает проблему «5 версий одного файла».

Создание группы репликации

# Создаём группу репликации для папки "Документы"
New-DfsReplicationGroup -GroupName 'RG-Documents' -Description 'Репликация общих документов' | Out-Null

# Добавляем все серверы в группу
$members = @('DC01-SAM','FS-KAZ','FS-NNO','FS-PRM','FS-UFA')
$members | ForEach-Object {
    Add-DfsrMember -GroupName 'RG-Documents' -ComputerName $_
}

# Добавляем реплицируемую папку
Add-DfsrReplicatedFolder -GroupName 'RG-Documents' -FolderName 'Документы'

# Настраиваем пути на каждом сервере
Set-DfsrMembership -GroupName 'RG-Documents' -FolderName 'Документы' -ComputerName 'DC01-SAM' -ContentPath 'D:\DFSRoots\Shared\Документы' -PrimaryMember $true -StagingPathQuotaInMB 32768
Set-DfsrMembership -GroupName 'RG-Documents' -FolderName 'Документы' -ComputerName 'FS-KAZ' -ContentPath 'D:\DFSRoots\Shared\Документы' -StagingPathQuotaInMB 16384
Set-DfsrMembership -GroupName 'RG-Documents' -FolderName 'Документы' -ComputerName 'FS-NNO' -ContentPath 'D:\DFSRoots\Shared\Документы' -StagingPathQuotaInMB 16384
Set-DfsrMembership -GroupName 'RG-Documents' -FolderName 'Документы' -ComputerName 'FS-PRM' -ContentPath 'D:\DFSRoots\Shared\Документы' -StagingPathQuotaInMB 8192
Set-DfsrMembership -GroupName 'RG-Documents' -FolderName 'Документы' -ComputerName 'FS-UFA' -ContentPath 'D:\DFSRoots\Shared\Документы' -StagingPathQuotaInMB 8192

Топология Hub-and-Spoke и bandwidth throttling

Для 5 филиалов мы выбрали топологию Hub-and-Spoke: центральный сервер в Самаре связан с каждым филиалом. Это проще в управлении и эффективнее использует каналы:

# Создаём соединения Hub-and-Spoke (Самара — центр)
$spokes = @('FS-KAZ','FS-NNO','FS-PRM','FS-UFA')

foreach ($spoke in $spokes) {
    Add-DfsrConnection -GroupName 'RG-Documents' `
        -SourceComputerName 'DC01-SAM' `
        -DestinationComputerName $spoke `
        -Description "SAM <-> $spoke"
}

# Настраиваем ограничение полосы (bandwidth throttling)
# Каналы до филиалов: Казань 50 Мбит, Н.Новгород 30 Мбит, Пермь 20 Мбит, Уфа 20 Мбит
# Ограничиваем DFSR до 50% канала в рабочее время и 90% ночью

# Расписание для FS-KAZ: рабочее время 9:00-18:00 — 25 Мбит (50%)
Set-DfsrConnectionSchedule -GroupName 'RG-Documents' `
    -SourceComputerName 'DC01-SAM' `
    -DestinationComputerName 'FS-KAZ' `
    -Day Monday,Tuesday,Wednesday,Thursday,Friday `
    -BandwidthDetail @{TimeSlotIndex=36; Bandwidth='25Mbps'}

# Ночное время 22:00-06:00 — 45 Мбит (90%)
Set-DfsrConnectionSchedule -GroupName 'RG-Documents' `
    -SourceComputerName 'DC01-SAM' `
    -DestinationComputerName 'FS-KAZ' `
    -Day Monday,Tuesday,Wednesday,Thursday,Friday `
    -BandwidthDetail @{TimeSlotIndex=88; Bandwidth='45Mbps'}

# Для Перми и Уфы — более жёсткие ограничения
Set-DfsrConnectionSchedule -GroupName 'RG-Documents' `
    -SourceComputerName 'DC01-SAM' `
    -DestinationComputerName 'FS-PRM' `
    -Day Monday,Tuesday,Wednesday,Thursday,Friday `
    -BandwidthDetail @{TimeSlotIndex=36; Bandwidth='10Mbps'}

Staging folders и оптимизация

Staging folder — это промежуточное хранилище, куда DFSR помещает файлы перед отправкой. Правильный размер staging — критически важен для производительности:

# Рекомендация Microsoft: staging quota = 32 × размер крупнейших файлов
# У РосЛогистик самые крупные файлы — сканы договоров до 50 МБ
# 32 × 50 МБ = 1600 МБ — но мы ставим с запасом

# Проверяем текущие настройки staging
Get-DfsrMembership -GroupName 'RG-Documents' | Select-Object ComputerName, ContentPath, StagingPath, StagingPathQuotaInMB | Format-Table

# ComputerName  ContentPath                        StagingPath                             StagingPathQuotaInMB
# ------------  -----------                        -----------                             --------------------
# DC01-SAM      D:\DFSRoots\Shared\Документы       D:\DFSRoots\Shared\Документы\DfsrPrivate\Staging  32768
# FS-KAZ        D:\DFSRoots\Shared\Документы       D:\DFSRoots\Shared\Документы\DfsrPrivate\Staging  16384
# FS-NNO        D:\DFSRoots\Shared\Документы       D:\DFSRoots\Shared\Документы\DfsrPrivate\Staging  16384
# FS-PRM        D:\DFSRoots\Shared\Документы       D:\DFSRoots\Shared\Документы\DfsrPrivate\Staging  8192
# FS-UFA        D:\DFSRoots\Shared\Документы       D:\DFSRoots\Shared\Документы\DfsrPrivate\Staging  8192

# Перемещаем staging на отдельный диск для лучшей производительности (если есть)
# На DC01-SAM:
Set-DfsrMembership -GroupName 'RG-Documents' -FolderName 'Документы' -ComputerName 'DC01-SAM' -StagingPath 'E:\DFSStaging\Документы'

Если staging переполняется, DFSR начинает «чистить» его, что замедляет репликацию. Мы настроили мониторинг размера staging через SCOM.

Разрешение конфликтов и GPO для Folder Redirection

Одновременное редактирование файла в разных филиалах — неизбежная ситуация. DFSR обрабатывает конфликты по принципу «последний записавший побеждает», но проигравшая версия сохраняется в специальной папке.

Политика разрешения конфликтов

DFSR использует два правила при конфликте:

  • Для существующих файлов — побеждает версия с более поздней датой модификации. Если даты совпадают — побеждает файл с сервера, чей GUID больше
  • Для новых файлов/папок с одинаковым именем — побеждает старший файл (раньше создан)

Проигравшая версия перемещается в папку ConflictAndDeleted:

# Проверяем квоту для конфликтных файлов
Get-DfsrMembership -GroupName 'RG-Documents' | Select-Object ComputerName, ConflictAndDeletedQuotaInMB

# По умолчанию 4096 МБ — увеличиваем на хабе
Set-DfsrMembership -GroupName 'RG-Documents' -FolderName 'Документы' -ComputerName 'DC01-SAM' -ConflictAndDeletedQuotaInMB 8192

# Скрипт для отчёта о конфликтах (запуск раз в день)
$report = Get-DfsrBacklog -GroupName 'RG-Documents' -SourceComputerName 'DC01-SAM' -DestinationComputerName 'FS-KAZ' -Verbose

# Проверяем ConflictAndDeleted на всех серверах
$members | ForEach-Object {
    $path = "\\$_\d$\DFSRoots\Shared\Документы\DfsrPrivate\ConflictAndDeleted"
    $count = (Get-ChildItem $path -ErrorAction SilentlyContinue | Measure-Object).Count
    Write-Host "$_`: $count conflicted files"
}

Для минимизации конфликтов мы внедрили организационные меры: критические документы (договоры, прайс-листы) редактируются только в Самаре, филиалы работают с ними в режиме чтения через NTFS-права.

GPO для Folder Redirection

Чтобы рабочие документы пользователей автоматически попадали в DFS, настроили перенаправление папок через Group Policy:

# Создаём GPO для Folder Redirection
New-GPO -Name 'DFS Folder Redirection' -Comment 'Перенаправление папок в DFS' | New-GPLink -Target 'OU=Users,DC=roslogistic,DC=local'

# Настройка через GPMC (Group Policy Management Console):
# User Configuration → Policies → Windows Settings → Folder Redirection
#
# Папка "Документы":
#   Setting: Basic - Redirect everyone's folder to the same location
#   Target folder location: Create a folder for each user under the root path
#   Root Path: \\roslogistic.local\shared\UserDocs
#   Policy Removal: Redirect the folder back to the local userprofile location
#
# Папка "Рабочий стол":
#   Root Path: \\roslogistic.local\shared\UserDesktop

# Проверяем через PowerShell
Get-GPO -Name 'DFS Folder Redirection' | Get-GPOReport -ReportType HTML -Path 'C:\temp\dfs-gpo-report.html'

# Включаем Offline Files для работы при потере связи
# Computer Configuration → Policies → Administrative Templates
# → Network → Offline Files
#   Enable Offline Files: Enabled
#   Configure slow-link mode: Enabled, Latency=80ms, Throughput=64Kbps

Мониторинг DFSR и диагностика

DFS Replication без мониторинга — бомба замедленного действия. Backlog может расти незаметно, staging переполняться, а конфликты — накапливаться. Мы настроили многоуровневый мониторинг.

Утилита dfsrdiag и PowerShell-мониторинг

# Проверка бэклога репликации между серверами
Get-DfsrBacklog -GroupName 'RG-Documents' -SourceComputerName 'DC01-SAM' -DestinationComputerName 'FS-KAZ'

# Identifier                  : {A1B2C3D4-5678-9ABC-DEF0-123456789ABC}
# BacklogFileCount            : 3

# Бэклог 3 файла — нормально. Бэклог 10000+ — проблема.

# Массовая проверка бэклога
$hub = 'DC01-SAM'
$spokes = @('FS-KAZ','FS-NNO','FS-PRM','FS-UFA')

foreach ($spoke in $spokes) {
    $backlog = (Get-DfsrBacklog -GroupName 'RG-Documents' -SourceComputerName $hub -DestinationComputerName $spoke).BacklogFileCount
    $backlogReverse = (Get-DfsrBacklog -GroupName 'RG-Documents' -SourceComputerName $spoke -DestinationComputerName $hub).BacklogFileCount
    Write-Host "$hub -> ${spoke}: $backlog files | $spoke -> ${hub}: $backlogReverse files"
}

# DC01-SAM -> FS-KAZ: 3 files | FS-KAZ -> DC01-SAM: 1 files
# DC01-SAM -> FS-NNO: 0 files | FS-NNO -> DC01-SAM: 5 files
# DC01-SAM -> FS-PRM: 12 files | FS-PRM -> DC01-SAM: 0 files
# DC01-SAM -> FS-UFA: 0 files | FS-UFA -> DC01-SAM: 0 files

# Диагностика с dfsrdiag
dfsrdiag backlog /rgname:"RG-Documents" /rfname:"Документы" /sendingmember:DC01-SAM /receivingmember:FS-KAZ

# Состояние репликации
Get-DfsrState -ComputerName $hub | Format-Table FileName, UpdateState, Inbound

Автоматические DFSR Health Reports

# Генерация отчёта о здоровье DFSR
# Запуск через Task Scheduler раз в неделю
$reportPath = 'D:\Reports\DFSR'
New-Item -Path $reportPath -ItemType Directory -Force

# Health report
Write-DfsrHealthReport -GroupName 'RG-Documents' -ReferenceComputerName 'DC01-SAM' -MemberComputerName $members -Path $reportPath -CountFiles

# Propagation report
Write-DfsrPropagationReport -GroupName 'RG-Documents' -ReferenceComputerName 'DC01-SAM' -Path $reportPath -FileCount 100

# Скрипт мониторинга с отправкой алерта в Telegram
$threshold = 100  # Бэклог больше 100 — тревога

foreach ($spoke in $spokes) {
    $backlog = (Get-DfsrBacklog -GroupName 'RG-Documents' -SourceComputerName $hub -DestinationComputerName $spoke -ErrorAction SilentlyContinue).BacklogFileCount
    if ($backlog -gt $threshold) {
        $message = "⚠ DFSR Alert: Backlog $hub -> ${spoke}: $backlog files (threshold: $threshold)"
        # Отправка в Telegram
        $token = 'BOT_TOKEN'
        $chatId = '-100XXXXXXXXXX'
        $uri = "https://api.telegram.org/bot$token/sendMessage?chat_id=$chatId&text=$message"
        Invoke-RestMethod -Uri $uri -Method Post
    }
}

Резервное копирование с учётом DFS

Важно: DFSR не является заменой резервного копирования. Удалённый файл реплицируется как удаление на все ноды. Мы настроили бэкапы с учётом особенностей DFS:

# Windows Server Backup на хаб-сервере (ежедневно)
wbadmin start backup -backupTarget:F: -include:D:\DFSRoots -vssFull -quiet

# Veeam Backup на каждом филиальном сервере (еженедельно)
# Важно: бэкапим только хаб (Самара) полностью, филиалы — по расписанию

# VSS snapshot перед бэкапом (не прерывает репликацию)
# DFSR автоматически приостанавливает репликацию во время VSS snapshot
# и возобновляет после его завершения

# Восстановление отдельного файла из ConflictAndDeleted
# (если пользователь перезаписал нужную версию)
$conflictPath = '\\DC01-SAM\d$\DFSRoots\Shared\Документы\DfsrPrivate\ConflictAndDeleted'
Get-ChildItem $conflictPath | Sort-Object LastWriteTime -Descending | Select-Object Name, Length, LastWriteTime -First 20

Результаты внедрения: пять филиалов — один файл

Проект занял 8 рабочих дней: 2 дня на подготовку серверов, 2 дня на настройку DFS, 2 дня на миграцию данных из филиалов, 2 дня на тестирование и обучение пользователей. Результаты через месяц эксплуатации:

МетрикаДо внедренияПосле внедрения
Инциденты «устаревшая версия файла»15–20 в неделю0 (автоматическая синхронизация)
Время доступа к файлу из филиала3–15 сек (через VPN до Самары)Мгновенно (локальная копия)
Время синхронизации измененийРучная отправка по почте (часы/дни)1–5 минут автоматически
Работа при обрыве VPNНет доступа к файламПолный доступ (локальная копия)
Единая точка входа5 разных UNC-путей по IP\\roslogistic.local\shared
«Диспетчер в Перми открывает тот же прайс-лист, что и менеджер в Казани. Бухгалтерия в Самаре видит акты из Уфы в тот же день. Мы наконец-то работаем как единая компания, а не как пять отдельных контор» — коммерческий директор РосЛогистик.

Отдельно отметим: проект не потребовал дополнительных лицензий — DFS Namespaces и DFS Replication входят в стоимость Windows Server, который уже использовался в каждом филиале. Основные затраты — замена NAS в Перми на виртуальную машину с Windows Server и новый сервер для Уфы.

Рекомендации при внедрении DFS

  • Начните с AD Sites — без правильной конфигурации сайтов DFS referral не будет направлять клиентов на ближайший сервер
  • Hub-and-Spoke для 3+ филиалов — Full Mesh создаёт слишком много соединений репликации и сложен в диагностике
  • Sizing staging — недостаточный staging — причина номер один медленной репликации
  • Bandwidth throttling обязателен — без него DFSR может забить канал и нарушить работу других сервисов
  • Организационные правила — определите, кто и где редактирует критические документы, чтобы минимизировать конфликты
  • Мониторьте backlog — растущий бэклог — ранний индикатор проблем с каналом или дисками

Развитие проекта

По результатам успешного внедрения DFS мы согласовали с РосЛогистик план развития:

  • Q2 2026 — внедрение ABE (Access-Based Enumeration) для скрытия папок, к которым у пользователя нет доступа
  • Q3 2026 — интеграция с SharePoint Online для совместного редактирования документов Office
  • Q4 2026 — рассмотрение Azure File Sync как дополнения к DFSR для облачного бэкапа и tiering

Часто задаваемые вопросы

Это два разных компонента, которые часто используются вместе, но решают разные задачи. DFS Namespaces создаёт единое виртуальное пространство имён (например, \\domain\shared), за которым могут скрываться папки на разных серверах. Пользователь видит одну структуру, не зная, на каком сервере файл физически. DFS Replication (DFSR) — это механизм синхронизации содержимого папок между серверами. Он отслеживает изменения и реплицирует их. Можно использовать DFSR без Namespaces и наоборот, но вместе они дают полноценную распределённую файловую систему.

DFSR обрабатывает это как конфликт. Побеждает файл с более поздней датой модификации — он становится «актуальной» версией и реплицируется на все серверы. Проигравшая версия не удаляется, а перемещается в скрытую папку ConflictAndDeleted на сервере, где она «проиграла». Администратор может извлечь конфликтные версии вручную. Для минимизации конфликтов рекомендуется установить организационные правила: кто и где редактирует критические документы.

Технически DFSR работает по протоколу RPC, который можно настроить через RPC over HTTP (порт 443). Однако Microsoft не рекомендует этот сценарий для production: DFSR проектировался для надёжных каналов с предсказуемой задержкой. Для репликации через интернет лучше использовать site-to-site VPN (IPsec, WireGuard) или рассмотреть Azure File Sync, который специально создан для гибридных сценариев с облаком.

Microsoft поддерживает DFSR для репликации до нескольких терабайт данных и миллионов файлов. Практические ограничения зависят от пропускной способности каналов, размера staging folder и количества изменений в единицу времени. В нашей практике DFSR стабильно работает с объёмами до 5 ТБ и 2–3 миллионами файлов. При больших объёмах рекомендуем разделять данные на несколько групп репликации с разными расписаниями.

Нет. DFS Namespaces и DFS Replication — встроенные роли Windows Server, доступные в редакциях Standard и Datacenter без дополнительных лицензий. Вам нужны только лицензии на сам Windows Server и клиентские CAL (Client Access License) для подключающихся пользователей. Это одно из ключевых преимуществ DFS для компаний, уже использующих Windows Server.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#DFS Namespaces настройка#DFS Replication филиалы#DFSR Windows Server#DFS staging folder#DFS конфликт разрешение#DFS bandwidth throttling#dfsrdiag мониторинг#DFSR health report