NFS-клиент на Windows: правильное подключение Linux-шар
Привет! Это Евгений Семёнов, я директор ITFresh. За пятнадцать с лишним лет в IT-аутсорсинге чего только не повидал! Сотни гибридных инфраструктур прошли через мои руки: тут тебе и 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-агент бэкапа бывает очень 'дружелюбным' к Linux-системам! Мы видим это на практике: он без проблем считывает нужные данные, когда NFS-тома расположены на таких мощных и распределённых хранилищах, как Ceph или GlusterFS.
Наш опыт показывает: в проектах со смешанной инфраструктурой, NFS-клиент для Windows нужен примерно в каждой пятой ситуации, то есть в 20% случаев. Это не ежедневная задача, нет. Но, поверьте, встречается это куда регулярнее, чем кажется.
В каких Windows есть штатный NFS-клиент
Почему этот вопрос так актуален? Потому что NFS-клиент пропал далеко не из всех версий. Раньше его можно было найти во всех Pro-редакциях Windows, но потом 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, то, увы, штатного клиента NFS там не ждите. Что же делать в таком случае? Варианты, конечно, есть. Можно, например, обновить систему до Enterprise-версии, или установить бесплатный Allegro NFS Client. Но знаете, что я обычно советую первым делом? Попробуйте переключиться на 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"
Или вот путь через графический интерфейс: «Панель управления → Программы и компоненты → Включение или отключение компонентов 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, а на Windows – IDMU. Но, честно говоря, для большинства задач, а это 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-го к нам обратился клиент – инженерное бюро, двадцать четыре рабочих места. Жаловались на то, что «тормозит общий проектный диск». Приехал я к ним разбираться: стоит Linux-сервер, на нём ZFS, объем – 24 ТБ, и всё это отдаётся через Samba. А на нём одновременно работают двадцать инженеров, да не просто так, а в AutoCAD и Revit! Естественно, каждая операция «открыть файл» занимала от сорока до шестидесяти секунд.
Однажды я сам переводил шары с SMB на NFSv3 – клиенты тогда использовали Windows 10 Enterprise. Я не только настроил AnonymousUid/Gid через GPO для всего подразделения с рабочими станциями, но и обязательно увеличил rsize/wsize до 65536. Сервер, кстати, был что надо: Dell с Xeon Platinum 8280, 128 ГБ оперативки, да ещё и 40G Mellanox до свича. Самое удивительное? После всех этих манипуляций время на «открыть файл» упало до каких-то 3-6 секунд. Вот это скорость! Инженеры, конечно, разницу моментально почувствовали.
На всю эту работу у меня ушло два дня: первый день я полностью посвятил тестам, второй – уже самой раскатке. Что по деньгам? Внедрение обошлось клиенту в 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
Сразу скажу, как есть: мы в ITFresh всегда советуем клиентам SMB на Windows, если нет особых требований. Ну правда, зачем себе жизнь усложнять? Это же просто сказка! Отлично дружит с Active Directory, мгновенно считывает права через ACL, и забудьте про муторные UID/GID. А вот NFS… его мы достаём из рукава только в двух, очень конкретных случаях. Первый — если видим, что SMB на Linux ну совсем не тянет по производительности. И второй, когда специфические сервисы, такие как 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.
