Короткий ответ
Domain-based DFS — это ссылки в AD + серверы пространства имён, не сами файлы. Если \\contoso.example\public не открывается, проверяйте DNS домена, серверы NS, dfsdiag, кэш рефералов клиента. Файлы на D:\data могут быть живы по \\FS01\data. Отставание репликации содержимого — DFSR, не эта статья.
SYSVOL — отдельное пространство; его лечат как SYSVOL/DFSR домена.
Симптомы и как отличить
\\contoso.example\public— путь не найден;\\FS01\dataработает.- Открывается, но не туда / долго — мёртвый target в реферале.
- Только один сайт.
| Жив UNC | Проблема |
|---|---|
\\FS01\data | namespace / referral |
Даже \\FS01\data нет | SMB |
| Корень есть, файлы старые | DFSR backlog |
| Нет SYSVOL | SYSVOL |
Возможные причины
- Все namespace servers недоступны (SMB 445 к ним).
- Объект DFS в AD не читается: DNS, DC, права.
- Корень Standalone, клиент ходит на доменное имя.
- Folder target offline, нет рабочего реферала.
- Кэш реферала клиента держит мёртвый IP.
- Access-based enumeration на namespace прячет корень.
- После миграции DC/PDC клиенты не видят метаданные (редко, но проверяемо).
Диагностика
dfsdiag /testdcs /domain:contoso.example
dfsdiag /testdfsconfig /dfsroot:\\contoso.example\public
dfsdiag /testreferral /dfspath:\\contoso.example\public
dfsdiag /testreferral /dfspath:\\contoso.example\public\dataСписок корней (модуль DFSN, если установлен):
Get-DfsnRoot -Domain contoso.example -ErrorAction SilentlyContinue
Get-DfsnRootTarget -Path '\\contoso.example\public'
Get-DfsnFolderTarget -Path '\\contoso.example\public\data'С клиента WS-042:
Test-NetConnection FS01.contoso.example -Port 445
dfsutil.exe /pktinfo/pktinfo показывает кэш рефералов. DNS:
Resolve-DnsName contoso.example
Resolve-DnsName _ldap._tcp.dc._msdcs.contoso.example -Type SRVРешение
Сценарий A. Нет ни одного namespace server
Поднимите хотя бы один NS: служба Dfs, шара корня, 445. В DFS Management сервер в списке Root targets должен быть Online.
Get-Service Dfs, DfsDriver -ErrorAction SilentlyContinueСценарий B. Мёртвый folder target
В свойствах папки DFS уберите Offline-сервер из реферала или исправьте SMB на нём. Клиентам:
dfsutil.exe cache referral flushНа новых ОС сбросьте кэш реферала через dfsutil.exe /pktflush (RSAT) или новый логон. Не ищите несуществующий «Get-DfsnClient*».
Сценарий C. Клиент ходит не туда
Site costing: сервер без подсети в AD Sites. Привяжите подсеть 10.0.10.0/24 к сайту, иначе реферал на чужой офис с таймаутом.
Сценарий D. Права на namespace
NTFS/share на корне NS (обычно C:\DFSRoots\public) должны позволять Read пользователям. Это не права на данные D:\data.
Сценарий E. Кэш клиента, сайты и права на корень
Клиент WS-042 мог закэшировать реферал на выключенный FS01. Пока кэш жив, живой FS02 не используется. Снимите dfsdiag /testreferral с админской станции (что отдаёт служба сейчас) и dfsutil.exe /pktinfo с проблемного ПК (что видит клиент).
dfsdiag /testdcs /domain:contoso.example
dfsdiag /testreferral /dfspath:\\contoso.example\public\data
Get-DfsnFolderTarget -Path '\\contoso.example\public\data' |
Format-Table TargetPath, State, ReferralPriorityClassOffline target в списке с равным приоритетом даёт таймауты, которые пользователи называют «файловый сервер тормозит» или «не открывается». Уберите мёртвый путь из folder targets.
AD Sites: если подсеть 10.0.10.0/24 не привязана, клиент ходит в чужой сайт. Это не поломка корня, но UNC «висит». Привяжите подсеть.
Права: на C:\DFSRoots\public нужны Read для тех же групп, что ходят в данные. Отказ на корне DFSN выглядит как «нет public», хотя \\FS01\data открывается. ABE на namespace прячет папки, к которым нет прав — пользователь думает, что «DFS пустой».
После добавления второго namespace server подождите репликацию объекта в AD, затем проверяйте с клиента, не сразу.
Как проверить, что проблема устранена
dfsdiag /testreferral /dfspath:\\contoso.example\public\data
Get-ChildItem '\\contoso.example\public\data' | Select-Object -First 5С WS-042 холодный заход (после flush) открывает корень. Get-DfsnFolderTarget — хотя бы один Online. Соседний сайт получает свой таргет, если так задумано.
Если не помогло
- Standalone корень
\\FS01\publicvs доменный — клиентские ярлыки переписать. - Только администратор видит корень — ABE на namespace.
- PDCe недоступен кратко — редко блокирует чтение DFS, но AD должен отвечать.
- Путаница с DFSR: файлы есть на одном узле, реферал на пустой — смотрите backlog.
Если dfsdiag /testdcs красный, сначала DNS и LDAP, не пересоздавайте корень. Клиентский /pktinfo с адресом выключенного FS — flush и повтор. Два namespace server в разных сайтах без подсетей в AD Sites дают «рандомные» таймауты. Не путайте шару SYSVOL с вашим public: разные корни, разные статьи. После restore DC объект DFSN в AD мог не дойти — repadmin, не dfsutil delete.
Профилактика
- Минимум два namespace server на доменный корень.
- Не держать в реферале выключенные FS.
- Подсети в AD Sites.
- Мониторинг
dfsdiagи 445 на NS. - Ярлыки пользователей — на доменный корень, не на один
\\FS01. - Второй namespace server в другом сайте и подсети в AD Sites. Регламент вывода FS из реферала до выключения железа, иначе клиенты
WS-042будут копить мёртвый pkt cache. Проверка после изменения:dfsdiag /testreferral /dfspath:\\contoso.example\public\data. Если TestDCs красный, сначала почините DNS и LDAP, иначе рефералы будут пустыми даже при живомFS01. Не пересоздавайте доменный корень, покаdfsdiag /testdfsconfigне прочитан целиком и понятен.
FAQ
dfsdiag нет в PATH.
RSAT DFS Management Tools на админской станции. На Core — фича DFSN/RSAT.
Чем pktinfo отличается от TestReferral?
pktinfo — кэш этого клиента. TestReferral — что отдаёт служба сейчас.
Можно ли удалить корень и создать заново?
Потеряете пути UNC, которые прописаны у пользователей. Сначала backup конфигурации DFSN. Не как первый шаг.
Нужен ли PDC для каждого реферала?
Клиенты читают DFS из DC своего сайта. Мёртвый PDC сам по себе не обязан ломать NS, но мёртвый AD — да.
Get-DfsnRoot не найден.
Импортируйте модуль DFSN или ставьте RSAT. Альтернатива — dfsutil/dfsdiag, не «значит DFS нет».
Почему \FS01\data жив, а \contoso.example\public нет?
Это namespace, не диск. Чините NS/реферал/DNS домена, не LanmanServer на файловом томе. После flush кэша на WS-042 повторите dfsdiag /testreferral. Не запускайте authoritative DFSR, чтобы «появился public». Сначала живой namespace server и TestReferral.