NFS-клиент на Windows: правильное подключение Linux-шар
Меня зовут Семёнов Евгений Сергеевич, директор АйТи Фреш. За 15+ лет в ИТ-аутсорсинге через мои руки прошли сотни гибридных инфраструктур: Linux-серверы под базы и файлы, Windows — на рабочих местах и серверах приложений. И каждый второй раз возникает вопрос — как Windows-машине увидеть Linux-шару через NFS. Тема простая, но с подводными камнями: UID/GID, права, squashing. Разберу всё, что знаю, с рабочими командами.
Когда NFS на Windows — правильное решение
Microsoft много лет держит Services for NFS как «не главный» способ работы с файлами. Понятно: есть SMB, который роднее. Но NFS остаётся живым и местами незаменимым:
- Сервер приложений на Windows обращается к датасету на Linux-СХД — исторически так сложилось, переделывать в SMB нет смысла.
- Архивные шары на NAS TrueNAS/Synology экспортированы по NFS, и вам проще подключиться напрямую.
- Гипервизор Hyper-V монтирует NFS-хранилище с Linux-ноды для виртуалок.
- Инженеры CAD работают с общими 3D-моделями на Linux-сервере.
- Windows-агент бэкапа читает NFS-тома с Ceph/GlusterFS.
У нас на практике NFS-клиент в Windows нужен плюс-минус в 20% проектов смешанной инфраструктуры. Не супер-часто, но регулярно.
В каких Windows есть штатный NFS-клиент
Вопрос важный, потому что его нет везде. Раньше NFS-клиент был во всех Pro-редакциях, потом Microsoft порезал:
| Редакция | NFS-клиент |
|---|---|
| Windows 11/10 Home | Нет |
| Windows 11/10 Pro | Нет (с Win10 1803 убрали) |
| Windows 11/10 Pro for Workstations | Да |
| Windows 11/10 Enterprise / Education | Да |
| Windows Server 2016–2025 | Да, во всех редакциях |
Если у вас Windows 10/11 Pro без Workstations — штатного клиента нет. Варианты: обновиться до Enterprise, поставить бесплатный Allegro NFS Client или переходить на SMB. Я всегда сначала предлагаю заказчику SMB, если такая возможность есть.
Установка Services for NFS
На Windows Server — через роль, на Windows 10/11 Enterprise — через «Компоненты Windows».
Windows Server 2019/2022/2025:
Install-WindowsFeature NFS-Client -IncludeManagementTools
# или полный пакет с сервером
Install-WindowsFeature FS-NFS-Service, NFS-Client -IncludeManagementTools
Windows 10/11 Enterprise:
# PowerShell от администратора
Enable-WindowsOptionalFeature -Online -FeatureName "ServicesForNFS-ClientOnly","ClientForNFS-Infrastructure"
Либо через GUI: «Панель управления → Программы и компоненты → Включение или отключение компонентов Windows → Службы для NFS → Клиент для NFS». Перезагрузка не требуется. Проверка установки:
Get-Service NfsClnt
# Статус должен быть Running, StartType Automatic
Настройка NFS-сервера на Linux
Чтобы подключиться — нужно, чтобы на другой стороне была настроена экспортируемая шара. Минимальный /etc/exports для отдачи Windows-клиентам:
# /etc/exports на Linux-сервере
/srv/share 10.10.10.0/24(rw,sync,no_subtree_check,no_root_squash,insecure)
/srv/ro 10.10.10.0/24(ro,sync,no_subtree_check,insecure)
Опция insecure обязательна для Windows-клиента — он подключается с порта выше 1024, и без этой опции сервер откажет. no_root_squash нужен, если Windows будет писать от административных операций. После правки:
exportfs -rav
systemctl restart nfs-server
showmount -e localhost
Монтирование шары на Windows
Простой вариант — из командной строки:
mount -o anon \\10.10.10.50\srv\share Z:
# или с параметрами производительности
mount -o anon,nolock,rsize=65536,wsize=65536,mtype=hard \\10.10.10.50\srv\share Z:
Что означают ключи:
- anon — подключение анонимно с AnonymousUid/Gid из реестра.
- rsize/wsize — размер блока чтения/записи; 65536 даёт максимальный throughput на 10G-сети.
- mtype=hard — жёсткое монтирование, при разрыве сети клиент продолжает ждать (для рабочих данных).
- nolock — отключает файловые блокировки NLM; часто нужно при работе с несколькими клиентами.
Просмотр смонтированных шар:
mount
showmount -e 10.10.10.50
Отключение:
umount Z:
umount -f Z: # принудительно
Маппинг пользователей: UID/GID
Главная боль NFS между Linux и Windows — несовместимость моделей прав. Linux оперирует UID/GID, Windows — SID. Services for NFS решают это через «маппинг», но на практике я всегда делаю проще — прописываю фиксированные AnonymousUid/Gid:
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default" `
-Name AnonymousUid -Value 1000 -Type DWord
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default" `
-Name AnonymousGid -Value 1000 -Type DWord
Restart-Service NfsClnt
Теперь Windows всегда ходит на NFS-шару с UID=1000, GID=1000. На Linux-стороне делаете владельцем каталога соответствующего пользователя:
chown -R 1000:1000 /srv/share
chmod -R 775 /srv/share
Если нужен доменный маппинг — ставите на Linux-сервере nfs-idmapd и IDMU на Windows. Но для 9 из 10 задач хватает anonuid/anongid.
Постоянное монтирование при входе
Флаг -p у mount давно сломан. Я всегда пишу батник и вешаю его в Task Scheduler на событие «At log on»:
@echo off
rem nfs-mount.cmd
mount -o anon,nolock,rsize=65536,wsize=65536 \\10.10.10.50\srv\share Z:
mount -o anon,nolock \\10.10.10.50\srv\ro Y:
exit /b 0
Создаём задачу:
schtasks /Create /TN "NFS-AutoMount" /TR "C:\Scripts\nfs-mount.cmd" /SC ONLOGON /RL HIGHEST /F
Реальный кейс: CAD-бюро и ZFS-сервер
В октябре 2025 клиент — инженерное бюро на 24 рабочих места — пожаловался, что у них «тормозит общий проектный диск». Пришёл смотреть: стоит Linux-сервер с ZFS, 24 ТБ, отдаёт через Samba. 20 инженеров одновременно работают с AutoCAD и Revit. Средняя операция «открыть файл» занимала 40–60 секунд.
Переключил шары с SMB на NFSv3 (у клиентов были Windows 10 Enterprise). Настроил AnonymousUid/Gid через GPO для всего OU с рабочими местами, увеличил rsize/wsize до 65536. Сервер — Dell с Xeon Platinum 8280, 128 ГБ RAM, 40G Mellanox до свича. После переключения «открыть файл» стало 3–6 секунд. Инженеры заметили сразу.
Работа заняла 2 дня: день на тест, день на раскатку. Стоимость — 48 000 руб. за внедрение, ежемесячное обслуживание 15 000 руб. Клиент доволен до сих пор.
Типичные ошибки и диагностика
- Access denied при записи. UID/GID не совпадают. Проверить:
mount+nfsadmin client stop/start+ реестр AnonymousUid. - Network error 53. Неверное имя шары или не запущен NFS-сервер.
showmount -eдолжен показать список. - Ошибка 67. Путь задан некорректно. Вместо /srv/share использовать \\srv\share.
- Медленная запись. Проверьте
asyncна Linux-экспорте и размеры rsize/wsize на клиенте. - Пропадает Z: после перезагрузки. Добавить в Task Scheduler на At log on, а не полагаться на флаг -p.
- Нет связи через VPN. Порты 111, 2049, 1110, 4045 должны пропускаться. Часто фаер режет 111/tcp и 111/udp.
Когда лучше отказаться от NFS в пользу SMB
Я честно говорю клиентам: если нет специфических требований, SMB на Windows удобнее. Интегрируется с AD, видит права через ACL, не требует возни с UID/GID. NFS беру в двух случаях: когда на Linux-стороне производительность SMB просаживается и когда сервисы (Hyper-V, Oracle DB) явно просят NFS.
Настроим NFS и гибридное хранилище
Я лично настраиваю NFS-экспорт на Linux-серверах и клиентов на Windows — от 1 шары до целого гибридного файл-сервера на 100+ пользователей. Подскажу, когда лучше NFS, а когда SMB. Первичная консультация — бесплатно.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — частые вопросы
- В какой редакции Windows есть NFS-клиент?
- В Windows 10/11 Pro for Workstations и Enterprise, а также во всех редакциях Windows Server. На Home — штатного клиента нет, нужны сторонние решения.
- NFSv3 или NFSv4 выбирать?
- Встроенный клиент Microsoft поддерживает только NFSv3. Для NFSv4.1 на Windows нужны сторонние клиенты. На практике для Linux-шар использую v3 с anonuid/anongid.
- Как задать UID/GID для Windows-пользователя?
- Через реестр HKLM\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default параметры AnonymousUid и AnonymousGid. После этого Windows-клиент всегда ходит на шару с указанными UID/GID.
- Почему не сохраняется Z: после перезагрузки?
- Потому что у mount -p флаг persistent не всегда переживает отзывы kerberos/credentials. Я обычно ставлю mount в батник на автозапуск или создаю задачу в Task Scheduler at logon.
- Access denied при попытке записи — что делать?
- Причина почти всегда в несовпадающих UID/GID. Проверьте на Linux ls -lan и сравните с тем, что возвращает Windows showmount. Выставьте AnonymousUid/Gid равными владельцу каталога или используйте no_root_squash.