
서버 A와 서버 B가 있습니다. B는 nfs 서버 역할을 하고 A는 B에서 마운트됩니다.
둘 다 EC2에서 실행됩니다.
때로는 B를 종료하고 새 인스턴스(동일한 인스턴스)를 시작해야 하는 경우도 있습니다. B가 백업된 후 A에 마운트된 디렉터리 내에서 작업(예: ls)을 수행하려고 하면 중단됩니다.
마운트 상태를 확인하고 문제가 있으면 다시 마운트하는 크론을 설정하려고 합니다.
마운트 상태를 확인할 수 있는 방법이 있나요?
답변1
분기하고 하위 항목이 디렉터리에 들어가도록 한 다음 하위 항목을 종료할 수 있습니다. 부모가 시간 초과가 있는 자식 프로세스의 존재를 모니터링하도록 합니다. 오래된 마운트가 있는 경우 자식은 종료할 수 없고 오랫동안 머물게 되므로 부모에서 시간 초과가 발생합니다. 부모에게 자식을 kill -9 하고 마운트 해제를 시도하게 하세요.
그러나 발생할 수 있는 문제는 다른 프로세스가 손상된 마운트에 있는 파일을 사용하고 있는 경우 해당 프로세스를 먼저 종료하지 않으면 해당 파일을 마운트 해제할 수 없다는 것입니다. lsof 또는 퓨저를 사용하면 오래된 마운트에서 사용할 수 없는 리소스를 사용하는 프로세스가 있는지 (종종) 확인할 수 있습니다.
그래도 임의의 프로세스를 자동으로 종료하는 것은 피할 것입니다. 수동으로 자세히 조사하려면 자신에게 알림을 보내세요.
이런 일이 발생할 가능성을 줄이려면 필요할 때까지 볼륨을 마운트하지 않고 서버의 리소스가 요청될 때까지 볼륨을 마운트하지 않고 더 이상 필요하지 않을 때 자동으로 마운트 해제하는 자동 마운트를 조사할 수 있습니다.
-- 그런데 더 쉽게 검색할 수 있도록 stale, steady, nfs 및 mount라는 단어로 태그를 지정하는 것이 좋습니다. 이 현상은 ec2 사용에만 국한되지 않습니다.
답변2
NFS 서버가 재부팅되면 IP가 변경되어 마운트가 작동하지 않는다는 것을 깨달았습니다.
NFS 호스트의 IP가 현재 마운트에 사용되는 IP인지 확인하고, 그렇지 않은 경우 마운트를 해제하고 다시 마운트하는 스크립트를 작성했습니다. 미래에 누군가를 도울 수 있습니다.
#!/bin/bash
NFS_HOST=$(mount | grep nfs | awk '{ print $1 }' | cut -d ":" -f 1)
NFS_HOST_PATH=$(mount | grep nfs | awk '{ print $1 }' | cut -d ":" -f 2)
host $NFS_HOST
if [[ $? -ne 0 ]]; then
echo "NFS host $NFS_HOST doesn't exist!"
exit 2
fi
MOUNT_POINT=$(mount | grep $NFS_HOST | awk '{ print $3 }')
NFS_IP=$(host $NFS_HOST | awk '{ print $4 }')
mount | grep "$NFS_IP"
if [[ $? -ne 0 ]]; then
umount -fl $MOUNT_POINT
mount "$NFS_HOST:$NFS_HOST_PATH" $MOUNT_POINT
fi