У меня есть встроенная система Linux, которая (при выполнении активной разработки на нем) монтирует ее корневую файловую систему как долю nfs, экспортируемую из моего поля человечности. Таким образом, только быть дополнителен ясный: встроенный Linux является клиентом nfs, мое поле человечности является сервером nfs. Я не имею большого контроля над встроенной системой, делающей фактическое монтирование nfs.
Когда я обновил до человечности 17.10, я узнал, что это больше не работает.
После большой отладки я думаю, что точно определил проблему к несоответствию версии протокола: при сниффинге трафика с wireshark я узнал, что встроенная система отправляет пакеты NFS со старой версией протокола 2, но сюда - то, что я вхожу в свое поле человечности, которое я выполняю
$ rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 43512 mountd
100005 1 tcp 39783 mountd
100005 2 udp 35844 mountd
100005 2 tcp 58287 mountd
100005 3 udp 48188 mountd
100005 3 tcp 60599 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049
100003 3 udp 2049 nfs
100227 3 udp 2049
100021 1 udp 44366 nlockmgr
100021 3 udp 44366 nlockmgr
100021 4 udp 44366 nlockmgr
100021 1 tcp 43079 nlockmgr
100021 3 tcp 43079 nlockmgr
100021 4 tcp 43079 nlockmgr
100024 1 udp 50305 status
100024 1 tcp 42983 status
так никакая версия 2 nfs, только 3 и 4.
Кто-либо знает, как добавить поддержку версии 2 nfs моему серверу nfs?
Вам необходимо изменить / etc / default / nfs-kernel-server, чтобы иметь следующие строки:
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
# To confirm above mods are in effect after service restart use
# cat /run/sysconfig/nfs-utils
# or
# service nfs-kernel-server status
#
и перезапустить службу
service nfs-kernel-server restart
, позаботиться о том, чтобы после перезапуска службы вам может потребоваться перезапустить общие ресурсы
zfs share -a
Наконец, подтвердите, что протокол 2 поддерживается (tcp и udp, если необходимо)
rpcinfo -p servername | fgrep nfs
Вы должны увидеть это
[ 114] Если вы обновитесь до Ubuntu 18.04, вы обнаружите, что в /etc/default/nfs-kernel-server
больше нет переменной RPCNFSDOPTS
.
Мне пришлось угнать RPCNFSDCOUNT
, чтобы заставить его использовать NFS v2:
RPCNFSDCOUNT="--nfs-version 2 8"
Доказательство того, что это сработало:
$ service nfs-kernel-server restart
$ cat /proc/fs/nfsd/versions
+2 +3 +4 +4.1 +4.2
После этого я мог смонтировать файловая система из OpenVMS Alpha 8.2 (... да, действительно, ...)
$ tcpip mount dnfs2:[000000] /host=beauty /path="/exports/home" /struct=5
%TCPIP$DNFSMOUNT-S-MOUNTED, /exports/home mounted on _DNFS2:[000000]
Я столкнулся с той же проблемой со своей встроенной системой (TI AM5728). Принятие Вас использует uboot, прием должен изменить командную строку, передаваемую ядру. Это установлено содержанием bootargs переменной среды. (см. uboot документацию для деталей),
Зафиксировать Вас должно будет добавить", nfsvers=3" дополнение на конец nfsroot части Вашей командной строки ядра (bootargs переменная)
В моей системе при начальной загрузке в NFS bootargs переменная строка похожа на следующее:
bootargs=console=ttyO2,115200n8 базируются =/dev/nfs rw rootfstype=nfs ip=dhcp nfsroot=192.168.x.x:/path/to/share
Это хорошо работало до 17.10 и затем умерло - следующее изменение вынуждает ядро соединить NFS v3 использования.
bootargs=console=ttyO2,115200n8 базируются =/dev/nfs rw rootfstype=nfs ip=dhcp nfsroot=192.168.x.x:/path/to/share, nfsvers=3