OpenBSD 구성: 클라이언트가 Berkeley Automounter(amd)를 사용하여 NFS를 통해 마운트할 수 없습니다.

OpenBSD 구성: 클라이언트가 Berkeley Automounter(amd)를 사용하여 NFS를 통해 마운트할 수 없습니다.

내가 하려는 것은 내 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 검색은 별로 도움이 되지 않습니다. OpenBSD를 사용하여 NFS를 자동 마운트하는 것은 일반적으로 수행되는 작업이 아닌 것 같습니다. 이것 말고도이것, 정보가 상당히 부족합니다.

물론 항상 마운트는 영구적으로 할 수 있지만 관습에 따라 약간 후퇴하는 경향이 있으므로 지금은 그렇지 않습니다. :)

어떤 방향은 감사할 것입니다.

(아, 혹시 궁금하시다면 FreeBSD에서 amd를 사용하는 방식을 시도해 보았으나 효과가 없었습니다. 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는 udp를 통해 NFS 버전 2만 기본적으로 사용하는 것으로 보입니다.

# 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으로 시작하는지 모르겠습니다. 자동 마운트에 전달할 올바른 옵션은 무엇입니까?

편집: 내가 지적했듯이 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)을 통해 마운트되지 않고 대신 udp를 사용하여 버전 2를 통해 마운트되는지 모르겠습니다.

편집: 제안한 대로 다음 구성을 시도했습니다.

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/마스터:

/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,version 2로 설정됩니다.

여전히 amd를 잘 이해하지 못하지만 작동하게 했으니 대부분 거기에 있다는 의미입니다. :)

답변2

type:=program 마운트/마운트 해제 명령과 관련하여 OpenBSD의 amd에 대한 정보 문서에서는 인수의 첫 번째 요소가 실행할 프로그램이고 두 번째 인수가 $0으로 전달되는 것이라고 언급합니다.

그럼 어휴, 내가 그랬다면

마운트:="/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 옵션] [-R retrycnt] [-r readsize] [-t timeout] [-w writesize] [- x retrans] rhost:경로 노드

-x10(그리고 unmount prog와 유사) 앞에 'mount_nfs'를 넣으면 구문 오류가 해결되었지만 "-a mount_point에 마운트한 다음 심볼릭 링크 만들기" 전체가 자동으로 처리되지 않는 것을 발견했습니다. 사례. 나는 래퍼 스크립트 작성에 대해 토론했지만 대신 다음과 같이 진행했습니다.

/기본값 유형:=nfs; jspiegel rhost:=NFS_HOST;rfs:=NFS_EXPORT_PATH/${key};opts:="rw,tcp,intr"

내 경우에는 NIS를 통해 auto.home을 얻고 있으며 그 구문은 Linux의 nfs 마운트에만 적용되므로 auto.home에서 yppoll을 수행하는 cronjob을 수행하고 있으며 서버에 최신 버전이 있는 경우 나는 그것을 끌어내리고 기본적으로 sed(1)를 통해 많이 실행하고 내가 읽은 auto.home.fixed 파일을 뱉어냅니다. 완벽하지는 않지만 문제의 컴퓨터는 슬레이브가 아닌 YP 클라이언트이므로 yp/Makefile의 어떤 것도 나에게 도움이 되지 않습니다.

답변3

아마도 amd가 필요하지 않을 것입니다. 나는 많은 NFS 디렉토리를 자동 마운트하지만 amd가 필요한 적은 없었습니다. OpenBSD를 사용하면 Google을 사용하지 않고 매뉴얼 페이지를 사용하게 됩니다. 다음 예가 있는 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 in rc.conf = /tmp_mnt # 다음에서 'umount' 및 'unmount'에 주의하세요. 원격 유형:=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 명령을 직접 사용하지 않고도 작동해야 한다고 생각합니다. 하지만 지금은 그렇지 않아요...

관련 정보