오류가 발생하면 mv는 무엇을 합니까?

오류가 발생하면 mv는 무엇을 합니까?

방금 큰 나무를 한 디스크에서 다른 디스크로 옮기려고 했는데 너무 작았습니다. 이제 정말 이해할 수 없는 일이 남았습니다. 일부 파일은 실제로 소스 트리에서 이동된 반면 다른 파일은 방금 복사된 것 같습니다. 이는 사실이 아닐 가능성이 높으며 대상 디스크의 여유 공간을 확인할 때 했던 것처럼 뭔가를 간과하고 있을 뿐입니다. :디

명령은 단순히 mv source-dir destination-dir두 디렉토리가 서로 다른 디스크에 있는 경우였습니다. 나는 mv (GNU coreutils) 7.4. 매뉴얼 페이지 어디에서도 다음 질문에 대한 답을 찾을 수 없습니다.

  • 잘린 파일이 생성될 수 있나요?
  • 오류가 발생하면 소스 트리의 모든 항목이 삭제되나요?
  • (쉽고 빠른 방법으로) 복구하는 방법은 무엇입니까?

답변1

mv가 다른 파일 시스템으로 이동하면 먼저 모든 데이터를 새 파일 시스템에 복사합니다. 새 데이터가 복사되면 이전 데이터가 제거됩니다. 이는 이동이 중단되거나 실패하더라도 소스 위치에 여전히 모든 데이터가 포함되어야 함을 의미합니다.

복구하는 경우 대상 데이터만 손상되어야 합니다. mv를 다시 사용하는 대신 rsync를 사용한 다음 수동으로 rm을 사용하십시오.

rsync -av source-dir/ dest-dir/
rm -rf source-dir

답변2

페이지 소개가 info귀하의 모든 질문에 대한 답변이라고 생각합니다.

먼저 `cp -a'에 사용된 것과 동일한 코드 중 일부를 사용하여 요청된 디렉토리와 파일을 복사한 다음 (복사가 성공했다고 가정하고) 원본을 제거합니다. 복사가 실패하면 대상 파티션에 복사된 부분이 제거됩니다. 한 파티션에서 다른 파티션으로 3개의 디렉터리를 복사할 때 첫 번째 디렉터리의 복사는 성공했지만 두 번째 디렉터리는 복사하지 못한 경우 첫 번째 디렉터리는 대상 파티션에 남고 두 번째와 세 번째 디렉터리는 원래 파티션에 남게 됩니다.

데이터가 보존되므로 복구는 문제가 되지 않습니다. 얼마나 노력했는지는 모르겠지만원자( mkdir예를 들어, 소스 검사가 필요함) 또는 해당 도메인에 있는 경우(커널과 비교하여) 이미 소스를 삭제하는 중에 중단이 발생하면 손상이 발생할 수 있습니다. 그 시점에서는 이미 대상 디렉터리에 좋은 복사본이 있으므로 간단한 바이트 크기 확인만으로 문제를 해결할 수 있습니다.

편집: 로 생성된 대용량 파일(몇 G)로 몇 가지 테스트를 수행했지만 dd결정적인 결과는 없었습니다. 소스 중 몇 개만 복사할 수 없었습니다. 전체 작업을 취소했거나(너무 빨랐음) 나중에 디스크 캐싱 및 좋은 파일 시스템 설계로 인해 전혀 기회를 얻지 못했을 수도 있습니다(내 ^C는 항상 이동이 성공한 후에 착륙했습니다) ).

관련 정보