2012-06-13 2 views
3

My Perl 스크립트는 File :: Copy의 이동 기능을 사용하여 NFS 마운트 파일 시스템으로 파일을 이동합니다. 최근에 파일 중 일부가 오류를 반환하여 내 스크립트가 "move returned 0, 경로 또는 파일 이름의 디렉토리가 없습니다"라는 메시지를 인쇄합니다. (이동이 성공하면 1을 반환하고, 오류가 발생하면 0을 반환하고, 오류 메시지는 $!를 사용합니다.)File :: Copy가 NFS 기록시 잘못된 오류를보고합니까?

정말 이상한 일은 파일을 처리하는 시스템이 실패한 파일을 성공적으로 처리했다는 것입니다. 나는 성공적으로 쓰기 전에 오류 메시지를 본 적이 없으므로 NFS와 관련이 있는지 궁금해. 나는 28 파일이 옮겨진 실행에서 첫 24가 실패하고 마지막 4가 성공한 것이 이상하다고 생각했다. 이 스크립트는 몇 달 동안 아무런 오류없이 실행되었으며 2 주 만에이 문제가 두 번 나타났습니다.

호스트가 AIX에서 실행되고 있지만 차이는 있습니다.

+1

시도 [파일 :: 복사 :: 신뢰성 (https://metacpan.org/module/File::Copy::Reliable). – stevenl

답변

0

나는 이것이 NFS 문제이며 Perl이 아니라고 생각한다. 어떤 경우에는 NFS가 정말로 이상 할 수 있습니다.

기록 된 파일을 통계/읽기해야하며보고 된 오류에 의존하지 않아야합니다.

File :: Copy :: Reliable 모듈은 동일한 오류 처리를 사용하여 동일한 오류로 실패합니다.

양식 소스 :

copy($source, $destination) 
    || croak("copy_reliable($source, $destination) failed: $!"); 

간단히 평가 후면 블록에 복사본을 넣어 읽기/대상에서 파일을 찍으하려고합니다.

두 파일 모두에서 md5/sha1 해시를 사용하면 동일한 지 확인할 수 있습니다. 때문에 네트워크를 통해 작업의 추가 불안정

감사합니다, 사용

+0

나는 NFS에 대해 당신이 맞다고 생각합니다. File :: Copy에서 move 함수의 코드를 살펴 봤다. 특히 "이름 바꾸기가 성공 했더라도 이름을 변경 했습니까?"라는 메시지가 나타났습니다. $ to가 원격 NFS 파일 시스템에 있고 NFS가 서버의 ack를 잃어 버렸기 때문입니다. 이제 코드가 성공을 돌려주지 않는 이유를 알아 내야합니다. – dmearns

+0

데이터가 손실되지 않았 음을 증명할 수 있었기 때문에 시스템을 면밀히 주시 할 것입니다. 다시 일어난다면 아마도 File :: Copy :: move를 내 자신의 함수로 바꾸고 말도 안되는 양의 오류 검사와 로깅을하게 될 것이다. 모두에게 감사드립니다. – dmearns