Назад | Перейти на главную страницу

Конфигурация OpenBSD: клиент не может подключиться через NFS с помощью Berkeley Automounter (amd)

Я пытаюсь сделать так, чтобы мой клиент openBSD (OpenBSD 4.9) автоматически монтировал файловую систему Linux NFS (Scientific Linux 6.1). Пока не уверен, правильно ли он настроен.

Чтобы не мешать, я могу смонтировать nfs вручную:

# mount_nfs -T -3 192.168.15.100:/exports /mnt
# ls -la /mnt
total 52
drwxr-xr-x   7 root    wheel   4096 Oct  4 22:42 .
drwxr-xr-x  16 root    wheel    512 Nov 26 16:33 ..
drwxrwxr-x   5 _sndio  _sndio  4096 Oct 31 21:58 centos
drwxr-xr-x  15 root    wheel   4096 Nov  6 09:17 home
drwxr-xr-x   5 root    wheel   4096 Oct 31 21:27 sl
drwxr-xr-x   3 root    wheel   4096 Nov 19 16:02 sles
drwxr-xr-x  17 503     503     4096 Nov 10 17:37 users
# 

Так что, насколько я могу судить, подключение не является проблемой.

Согласно странице руководства в /etc/amd/auto.home настроено следующее:

/defaults type:=nfs;sublink:=${key};opts:=rw,soft,intr,vers=3,proto=tcp
*         rhost:=192.168.15.100;rfs:=/exports

В свою очередь, / etc / amd / master настроен как таковой:

# cat /etc/amd/master                                                                                                                                                                    
/exports amd.home

После перезагрузки я вижу монтирование, но, как ни странно, вместо имени хоста:

amd:24490                        0         0         0   100%    /exports

Насколько я понимаю, amd немного отличается от FreeBSD. Тем не менее, я попытался проверить, можно ли его смонтировать.

Нет:

ksh: cd: /exports/users - Resource temporarily unavailable
# cd /exports/192.168.15.100/host/users
ksh: cd: /exports/192.168.15.100/host/users - Resource temporarily unavailable

Поиск в Google не очень помогает - кажется, автоматическое монтирование NFS с OpenBSD обычно не делается. Кроме как этот, информация довольно скудная.

Я могу, конечно, всегда ездить постоянно, но я, как правило, немного анален по соглашению, так что пока нет. :)

Некоторое направление было бы признательностью.

(И о, если вам интересно, я пробовал использовать amd во FreeBSD, и это не сработало - хотя я не возражал бы объяснить разницу между тем, как FreeBSD реализует и как OpenBSD реализует это)

ОБНОВЛЕНИЕ: после повторной записи файла карты несколько раз я дошел до фактического взаимодействия с сервером NFS с такой конфигурацией:

/defaults type:=nfs;rhost:=kerberos.monzell.com;rfs:=/exports;\
          sublink:=${key};opts:=rw,nodev,nosuid,soft,intr,tcp,resvport
*         ${host}==${rhost};type:=nfs;fs:=${rfs};opts:=rw,nodev,nosuid,soft,intr,tcp,resvport

Однако по какой-то причине кажется, что amd по умолчанию будет использовать только NFS версии 2 поверх udp:

# tcpdump dst kerberos
tcpdump: listening on pcn0, link-type EN10MB
tcpdump: WARNING: compensating for unaligned libpcap packets
20:38:28.558385 openbsd.monzell.com.856 > kerberos.monzell.com.sunrpc: udp 100
20:38:28.559154 openbsd.monzell.com.856 > kerberos.monzell.com.892: udp 96
20:38:30.592761 openbsd.monzell.com.856 > kerberos.monzell.com.nfsd: xid 0x22000000 (NFSv2) 40 null
20:38:33.558107 arp reply openbsd.monzell.com is-at 52:54:00:52:8f:66

Я пробовал различные варианты принудительного монтирования как nfsv3, например:

/defaults type:=nfs;rhost:=kerberos.monzell.com;rfs:=/exports;\
          sublink:=${key};opts:=rw,nodev,nosuid,soft,intr,vers=3,proto=tcp,resvport
*         ${host}==${rhost};type:=nfs;fs:=${rfs};opts:=rw,nodev,nosuid,soft,intr,vers=3,proto=tcp,resvport

или:

/defaults type:=nfs;rhost:=kerberos.monzell.com;rfs:=/exports;\
          sublink:=${key};opts:=rw,nodev,nosuid,soft,intr,vers=-3,proto=tcp,resvport
*         ${host}==${rhost};type:=nfs;fs:=${rfs};opts:=rw,nodev,nosuid,soft,intr,vers=3,proto=tcp,resvport

Пока еще ничего.

Любопытно, что OpenBSD по умолчанию монтирует версию 3, поэтому я не уверен, почему она должна начинаться с версии 3 в amd. Какие варианты правильнее передать на автомонтирование?

РЕДАКТИРОВАТЬ: Как я уже сказал, я могу указать через fstab. Для доказательства вот он:

kerberos:/exports /mnt nfs rw,nodev,nosuid,tcp,soft,intr 1 1 
Filesystem        512-blocks      Used     Avail Capacity  Mounted on
/dev/wd0a             290396     89032    186848    32%    /
/dev/wd0k            3240316   1858940   1219364    60%    /home
/dev/wd0d             448956        12    426500     0%    /tmp
/dev/wd0f            1943196    903596    942444    49%    /usr
/dev/wd0g            1105820    346852    703680    33%    /usr/X11R6
/dev/wd0h            4387772    256560   3911824     6%    /usr/local
/dev/wd0j            2137436         4   2030564     0%    /usr/obj
/dev/wd0i            2137436         4   2030564     0%    /usr/src
/dev/wd0e             498940     18676    455320     4%    /var
amd:26660                  0         0         0   100%    /net
kerberos:/exports  103212280  66319088  31650312    68%    /mnt

Как я уже отмечал, OpenBSD сначала монтируется через версию 3, поэтому я не знаю, почему под amd он не монтировался через версию 3 (tcp), а вместо этого монтировался через версию 2 с помощью udp.

РЕДАКТИРОВАТЬ: Как было предложено, я попытался выполнить следующие настройки:

defaults type:=nfs;fs:=${autodir}
  # autodir = -a parameter of amd call = amd_mnt in rc.conf = /tmp_mnt
  # Be careful with 'umount' and 'unmount' in the following.
remote type:=program;fs:=/mnt;\
        mount:="/sbin/mount_nfs kerberos.monzell.com:/exports/";\
        unmount:="/sbin/umount /mnt"

Это вернулось

# cd /net/remote                                                                                                                                                                                 
usage:  [-23bcdilsTU] [-a maxreadahead] [-g maxgroups]
        [-I readdirsize] [-o options] [-R retrycnt] [-r readsize]
        [-t timeout] [-w writesize] [-x retrans] rhost:path node
ksh: cd: /net/remote - Operation not permitted

Тогда это:

defaults type:=nfs;fs:=${autodir}
  # autodir = -a parameter of amd call = amd_mnt in rc.conf = /tmp_mnt
  # Be careful with 'umount' and 'unmount' in the following.
remote type:=program;fs:=/mnt;\
        mount:="/sbin/mount nfs kerberos.monzell.com:/exports/";\
        unmount:="/sbin/umount /mnt"

Что вернуло это:

# cd /net/remote                                                                                                                                                                                 
nfs: realpath kerberos.monzell.com:/exports/: No such file or directory
ksh: cd: /net/remote - Operation not permitted

Пока ничего.

Что касается команд монтирования / размонтирования type: = program, в информационном документе для amd в OpenBSD упоминается, что первый элемент в аргументе - это программа, которую нужно выполнить, а второй аргумент - это то, что передается как $ 0.

так что, если бы я сделал

mount: = "/ sbin / mount_nfs -x10 -3 -dt600 -r32768 -w32768 -o rw, tcp.intr host: / path / $ {key} / local / $ {key}"

я получил:

использование: -x10 [-23bcdilsTU] [-a maxreadahead] [-g maxgroups] [-I readdirsize] [-o options] [-R retrycnt] [-r readsize] [-t timeout] [-w writeize] [- x retrans] rhost: узел пути

размещение 'mount_nfs' там перед -x10 (и аналогичное для программы размонтирования) решило для меня синтаксическую ошибку, однако я обнаружил, что вся вещь «монтировать на -a mount_point, а затем делать символические ссылки» не обрабатывалась автоматически в этом кейс. Я подумывал о написании сценария-оболочки, но вместо этого пришел к следующему:

/ тип по умолчанию: = nfs; jspiegel rhost: = NFS_HOST; rfs: = NFS_EXPORT_PATH / $ {ключ}; opts: = "rw, tcp, intr"

в моем случае я получаю auto.home через NIS, и синтаксис в нем специфичен для linux nfs mount, поэтому я делаю cronjob, который выполняет yppoll на auto.home, и если на сервере есть более новый, Я вытаскиваю его и в основном запускаю через sed (1) много и выплевываю файл auto.home.fixed, который я прочитал amd. не идеально, но рассматриваемая машина является просто клиентом YP, а не подчиненным устройством, поэтому ничего в файле yp / Makefile мне не поможет.

Наконец "разобрался". Я скопировал существующий файл карты FreeBSD в /etc/amd/amd.net следующим образом:

/defaults       type:=host;fs:=${autodir}/${rhost}/host;rhost:=${key}
*               opts:=rw,grpid,resvport,vers=3,proto=tcp,nosuid,nodev

{autodir} установлен в каталог по умолчанию, используемый amd (который, очевидно, / tmp_mnt, а $ {rhost} - это удаленный хост, указанный ключом (который ищет имя хоста либо в DNS, либо в файле / etc / hosts :

192.168.15.250          qnap    qnap.monzell.com

Сверху находится каталог хоста.

Затем я создал в корне каталог как:

/ etc / amd / master:

/host amd.net

Затем я создаю каталог хоста под корнем. После этого все работает как положено.

$ df
Filesystem   512-blocks      Used     Avail Capacity  Mounted on
/dev/wd0a        290396     89088    186792    32%    /
/dev/wd0k       3240316   1858968   1219336    60%    /home
/dev/wd0d        448956        12    426500     0%    /tmp
/dev/wd0f       1943196    903596    942444    49%    /usr
/dev/wd0g       1105820    346852    703680    33%    /usr/X11R6
/dev/wd0h       4387772    256560   3911824     6%    /usr/local
/dev/wd0j       2137436         4   2030564     0%    /usr/obj
/dev/wd0i       2137436         4   2030564     0%    /usr/src
/dev/wd0e        498940     18656    455340     4%    /var
amd:9747              0         0         0   100%    /host
qnap:/Public 1916713232 642213152 1274500080    34%    /tmp_mnt/qnap/host/Public
qnap:/pub    1916713232 642213152 1274500080    34%    /tmp_mnt/qnap/host/pub
qnap:/users  1916713232 642213152 1274500080    34%    /tmp_mnt/qnap/host/users

Похоже, что большая часть связи NFS должна осуществляться через хост, который обеспечивает удаленное монтирование через NFSv3 / TCP. Любые попытки монтировать удаленно через amd напрямую будут по умолчанию на udp версии 2.

Все еще не совсем понимаю amd, но у меня он работает, а это значит, что я в основном там. :)

Вероятно, вам не нужен amd. Я автоматически монтирую множество каталогов NFS, у меня никогда не было необходимости в amd. С OpenBSD вы не обращаетесь к Google, вы обращаетесь к страницам руководства. См. Справочную страницу fstab (5), где есть этот пример:

server:/export/ports /usr/ports nfs rw,nodev,nosuid,soft,intr 0 0

Насколько я понимаю, amd и fstab не должны рассматриваться как альтернативы, amd следует поместить поверх конфигурации fstab после того, как fstab будет работать правильно. На этой странице объясняется, как автоматическое монтирование дисководов компакт-дисков и гибких дисков с помощью amd. Он относится к более старой версии OpenBSD, но, надеюсь, все еще актуален.

Я не полностью понимаю вашу конфигурацию и не настраивал NFS на OpenBSD, но вы, похоже, пытаетесь поместить конфигурацию, которую лучше всего поместить в fstab, в amd. Сначала заставьте все это работать в fstab, затем настройте amd для использования того, что вы сделали в fstab.

Надеюсь, это поможет.

Думаю, ваша команда монтирования в последних правках неверна. Не очень много знаю о BSD, но давайте попробуем.

defaults type:=nfs;fs:=${autodir}
 # autodir = -a parameter of amd call = amd_mnt in rc.conf = /tmp_mnt
 # Be careful with 'umount' and 'unmount' in the following.
remote type:=program;fs:=/mnt;\
       mount:="/sbin/mount_nfs kerberos.monzell.com:/exports/";\
       unmount:="/sbin/umount /mnt"

Это вернулось

# cd /net/remote                                                                                                                                                                                 
usage:  [-23bcdilsTU] [-a maxreadahead] [-g maxgroups]
        [-I readdirsize] [-o options] [-R retrycnt] [-r readsize]
        [-t timeout] [-w writesize] [-x retrans] rhost:path node
ksh: cd: /net/remote - Operation not permitted

Поскольку он дает вам результат использования, параметры неверны. В этом случае целевой каталог отсутствует.

Тогда это: defaults type: = nfs; fs: = $ {autodir} # autodir = -a параметр amd call = amd_mnt в rc.conf = / tmp_mnt # Будьте осторожны с 'umount' и 'unmount' в следующих случаях. удаленный тип: = программа; fs: = / mnt; \ mount: = "/ sbin / mount nfs kerberos.monzell.com:/exports /"; \ unmount: = "/ sbin / umount / mnt" Что вернуло это:

# cd /net/remote                                                                                                                                                                                 
nfs: realpath kerberos.monzell.com:/exports/: No such file or directory
ksh: cd: /net/remote - Operation not permitted

Вы пропустили -t в /sbin/mount -t nfs kerberos.monzell.com:/exports/.

Я думаю, он должен работать без программного параметра, т.е. без прямого использования команды mount. Но я не сейчас и ...

Еще раз: с OpenBSD вы не обращаетесь к Google, вы обращаетесь к страницам руководства.

Итак, читайте справочную страницу, как мастер Дзен.

Или, как указано на странице руководства amd, используйте: 'info amd'

На странице руководства упоминается ведение журнала, дайте нам знать, если вы получите какие-либо сообщения, связанные с amd или nfs, и не бойтесь делиться ими с нами.

Также проверьте / tmp_mnt и / a

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