.png)
Я пытаюсь заставить свой клиент 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
После перезагрузки я вижу mount, но, как ни странно, вместо имени хоста:
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, поэтому я не уверен, почему в amd она запускается с версии 3. Какие правильные параметры следует передать в automount?
EDIT: Как я уже указал, я могу указать через 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.
EDIT: Как и предлагалось, я попробовал следующие конфигурации:
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
Пока ничего.
решение1
Наконец-то "разобрался". Я скопировал существующий файл карты 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
Затем я создаю каталог хоста под root. После этого все работает как и ожидалось.
$ 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,version 2.
Я до сих пор не совсем понимаю AMD, но у меня все заработало, так что я в основном там. :)
решение2
Что касается команд монтирования/размонтирования type:=program, в infodoc для amd в OpenBSD упоминается, что первый элемент в аргументе — это программа для выполнения, а второй аргумент — это то, что передается как $0.
так что ай, если бы я это сделал
mount:="/sbin/mount_nfs -x10 -3 -dt600 -r32768 -w32768 -o rw,tcp.intr хост:/path/${key} /local/${key}"
в итоге я получил:
использование: -x10 [-23bcdilsTU] [-a maxreadahead] [-g maxgroups] [-I readdirsize] [-o options] [-R retrycnt] [-r readsize] [-t timeout] [-w writesize] [-x retrans] rhost:path node
Добавление 'mount_nfs' перед -x10 (и аналогичного параметра для программы unmount) решило для меня синтаксическую ошибку, однако я обнаружил, что вся эта штука с "монтированием в -a mount_point и последующим созданием символических ссылок" не обрабатывается автоматически в этом случае. Я раздумывал над написанием скрипта-обертки, но вместо этого в итоге сделал так:
/defaults type:=nfs; jspiegel rhost:=NFS_HOST;rfs:=NFS_EXPORT_PATH/${key};opts:="rw,tcp,intr"
В моем случае я получаю auto.home через NIS, а его синтаксис специфичен для монтирования nfs в Linux, поэтому я выполняю cronjob, который выполняет yppoll для auto.home, и если на сервере есть более новый, я скачиваю его и, по сути, прогоняю через sed(1) и выдаю файл auto.home.fixed, который я прочитал. Не идеально, но рассматриваемая машина — всего лишь клиент YP, а не подчиненное устройство, поэтому ничего в yp/Makefile мне не поможет.
решение3
Вам, вероятно, не нужен amd. Я автоматически монтирую множество каталогов NFS, у меня никогда не было потребности в amd. С OpenBSD вы не обращаетесь к Google, вы обращаетесь к man-страницам. Посмотрите man-страницу fstab(5), где есть такой пример:
server:/export/ports /usr/ports nfs rw,nodev,nosuid,soft,intr 0 0
решение4
Я думаю, что ваша команда монтирования в последних правках неверна. Не очень разбираюсь в 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' в следующем. 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
Вы пропустили -t
в /sbin/mount -t nfs kerberos.monzell.com:/exports/
.
Я думаю, что это должно работать без параметра программы, т.е. без использования команды mount напрямую. Но я сейчас не amd...