mv
간단하게 구현됩니다rename()
가능할 때마다 이름을 바꿔도 작동하지 않을 때마다 복사한 다음 삭제하는 방법으로 돌아가십시오. 실제로(하지만 이론적으로는 그렇지 않다.), 두 경우 모두 소스와 대상이 각각 동일하거나 다른 파일 시스템에 있는 경우입니다.
내 질문:POSIX 표준에 정의되고 GNU coreutils의 일부로 구현된 것처럼 mv
후자의 경우(예: 이름 바꾸기, 복사로 대체한 후 삭제가 불가능함) 파일 시스템 캐시가 어떤 의미에서 플러시된다는 것이 보장됩니까?sync
) 적절한 시간에 대상 파일 시스템 연결을 끊어도 데이터 손실이 발생하지 않도록 복사 및 삭제 작업 사이에 있습니까?
지금까지 내가 찾은 것 :이것POSIX 사양mv
설명하다
언제든지 종료하면 source_file 또는 대상 경로가 완료되어야 합니다.
이는 "예"를 의미하지만 파일 시스템 연결을 끊는 것이 단순한 "종료"로 분류되는지, 그러한 명령문이 일반적으로 "표면" 파일 시스템 상태에만 적용되는지 여부 등은 확실하지 않습니다.
하나 있다해커 뉴스 검토출처를 밝히지 않고 "아니요"라고 대답했습니다.
어쩌면 질문이 실제로 불분명할 수도 있습니다.POSIXsync()
보장도 안됨마치다새로 고침은 이를 트리거할 뿐이므로 파일 시스템 전체에서 "완전히 안전한" 복사 및 삭제를 달성할 수 있는 방법이 없습니까?
실제로 어떻게 구현되는지 알아보려고 합니다.GNU coreutils의 mv
소스 코드, 하지만 더 이상 시간을 낭비하기 전에 같은 문제를 겪고 있는 다른 사람들에게도 도움이 되도록 여기에도 물어봐야 한다고 생각했습니다.