/etc/auto.net이 맞나요? 오타인 것 같아요

/etc/auto.net이 맞나요? 오타인 것 같아요

많은 사람들처럼 나 역시 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

관련 정보