%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20NFS%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%EB%A7%88%EC%9A%B4%ED%8A%B8%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..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
재부팅하면 마운트가 표시되지만 이상하게도 호스트 이름 대신 다음이 표시됩니다.
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 명령을 직접 사용하지 않고도 작동해야 한다고 생각합니다. 하지만 지금은 그렇지 않아요...