2017-01-10 17 views
-1

은 내가 다음을 수행 할 기본 스크립트가 :두 클라이언트의 NFS - mv 명령에서 파일이 손상 되었습니까?

  1. 새/file.txt를 지금
  2. MV 새/file.txt를 현재/file.txt를

을있는 경우 - 2 대의 서버가 똑같은 시간 (동일한 NFS 파일 공유에 액세스 할 수 있음)에서 동일한 스크립트를 실행하는 경우 :

  • 서버 1 - 단계 1. 파일이 존재하는지 확인합니다. True
  • 서버 2 - 1 단계. 파일이 있는지 확인합니다. True
  • 서버 1 - 2 단계는 "mv"명령을 수행하기 시작합니다.
  • 서버 2 - 2 단계. 오류가 바로 서버 2에 의해 던져지는 것처럼 온라인으로 찾을 수있는에서

, 그것은 보이는 -하지만 파일 손상 또는 아무것도 관심 없어야합니다 : 이 http://nfs.sourceforge.net/

파일 핸들을 말한다 삭제 된 파일 파일이 서버에서 삭제 된 후 클라이언트는 이전 LOOKUP에서 캐시 한 파일 핸들 에 액세스하려고 시도 할 때까지 클라이언트를 찾지 못합니다. 다른 클라이언트에서 사용 중일 때 rsync 또는 mv를 사용하여 파일을 대체하는 경우은일반적인 시나리오이므로 ESTALE 오류가 발생합니다. -

내가 확인하기 위해 시뮬레이션을 시도했지만 그렇게 성공적으로 할 수 없었던 그래서이 전략을 구현하기 전에 여기를 확인하고 싶었 :

질문 : 내 이해가 정확 - 또는 file.txt가 손상되지 않도록 다른 전략을 사용해야합니까?

추가 세부 사항 : Amazon Linux OS. 장착 된 드라이브는 nsf4입니다. 파일 크기가 100MB 일 수 있습니다.

+0

다운 투표하려면 이유를 제공하여 문제를 적절하게 조정할 수 있습니까? – Phas1c

답변

2

파일이있는 경우 일반적인 TOCTTOU 문제입니다.

간단한 수정은 하지 확인하는 것입니다, 그리고 mv-을 시도합니다. 이동할 파일이 없으면 mv이 실패하고 아무것도 수행하지 않습니다.

+0

좋습니다. 서버 1이 'mv'수행을 시작하고 서버 2가 서버 1 완료 전에 'mv'를 시도 할 가능성이 있습니까? 즉, 파일이 여전히 소스 디렉토리에 표시되는 것으로 추측 할 수 있습니까? 또는 파일 시스템 레벨에서 뮤텍스/잠금을 통해 제어됩니까? – Phas1c