많은 사람들처럼 나 역시 NFSv3 서버를 사용할 수 없을 때(다운될 때) 시스템이 정지되는 현상을 경험했습니다. 소프트/하드, intr, bg 등 다양한 제안이 설정되는 걸 봤는데... 별 일 아닌 것 같아서 다시 처음으로 돌아갔습니다. /etc/auto.net은 자동으로 설치할 수 있는 항목을 결정하기 위해 실행되는 스크립트입니다. 스크립트를 보면 실행하는 것이 매우 안전해 보이며 문자열만 출력합니다. CNAME이 "nas"인 NAS가 있습니다(원래 이름을 알고 있습니다).
graeme@real:/etc$ MOUNT_NFS_DEFAULT_PROTOCOL=4 ./auto.net nas
-fstype=nfs4,hard,intr,nodev,nosuid,async nas:/
graeme@real:/etc$ MOUNT_NFS_DEFAULT_PROTOCOL=3 ./auto.net nas
\
/Download nas:/Download \
/InternalAdmin nas:/InternalAdmin \
/Multimedia nas:/Multimedia \
/Public nas:/Public \
/Recordings nas:/Recordings \
/USBUploads nas:/USBUploads \
/Web nas:/Web \
/git nas:/git \
/homes nas:/homes \
/svn nas:/svn
보시다시피 NFSv4의 경우 마운트 옵션을 인쇄한 다음 NFSv4 내보내기를 인쇄합니다. NFSv3의 경우 스크립트를 보면 내보내기만 나열된다는 것을 알 수 있습니다(옵션 없음).
SHOWMOUNT="$SMNT --no-headers -e $key"
$SHOWMOUNT | LC_ALL=C cut -d' ' -f1 | LC_ALL=C sort -u | \
awk -v key="$key" -v opts="$opts" -- '
BEGIN { ORS=""; first=1 }
{ if (first) { print opts; first=0 }; print " \\\n\t" $1, key ":" $1 }
END { if (!first) print "\n"; else exit 1 }
' | sed 's/#/\\#/g'
opts="-fstype=nfs,hard,intr,nodev,nosuid"
else
# NFSv4
opts="-fstype=nfs4,hard,intr,nodev,nosuid,async"
echo "$opts $key:/"
fi
else 앞의 비트는 NFSv3이고, else 앞의 비트는 NFSv4입니다. 보시다시피 NFSv4는 opts를 설정한 다음 $opts와 $key를 에코하는 반면 NFSv3은 opts를 동일한 방식으로 설정합니다.하지만 그러면 사용하지 마세요.
이제 opt가 더 일찍, 바람직하게는 다음 형식으로 할당되도록 의도되었는지 궁금합니다.
: ${opts:="-fstype=nfs,hard,intr,nodev,nosuid"}
이렇게 하면 다음과 같은 결과를 얻습니다.
graeme@real:/etc$ MOUNT_NFS_DEFAULT_PROTOCOL=3 /tmp/auto.net nas
-fstype=nfs,hard,intr,nodev,nosuid \
/Download nas:/Download \
/InternalAdmin nas:/InternalAdmin \
/Multimedia nas:/Multimedia \
/Public nas:/Public \
/Recordings nas:/Recordings \
/USBUploads nas:/USBUploads \
/Web nas:/Web \
/git nas:/git \
/homes nas:/homes \
/svn nas:/svn