오류 발생시 mv는 무엇을합니까? 아니며 아마도

방금 큰 트리를 한 디스크에서 다른 디스크로 옮기려고했는데 너무 작습니다. 이제는 실제로 이해할 수없는 부분이 남아 있습니다. 일부 파일은 실제로 소스 트리에서 다른 곳으로 복사 된 것처럼 보입니다. 이것은 아마도 사실이 아니며 아마도 대상 디스크의 빈 공간을 확인할 때와 같이 무언가를 간과하고 있습니다. :디

이 명령은 단순히 mv source-dir destination-dir두 디렉토리가 서로 다른 디스크에 상주하는 것입니다. 을 사용하고 mv (GNU coreutils) 7.4있습니다. 매뉴얼 페이지에는 다음 질문에 대한 답변이 없습니다.

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


답변

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

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

데이터가 보존되므로 복구는 문제가되지 않습니다. 나는 그것이 얼마나 원자 적인지 ( mkdir예를 들어, 소스 검사가 필요하다) 또는 도메인에 있는지 (커널 대) 알지 못하지만 이미 삭제 할 때 중단이 발생하면 손상이 발생할 수 있습니다 출처. 이 시점에서 이미 대상 디렉토리에 좋은 사본이 있으므로 간단한 바이트 크기 확인으로 트릭을 수행 할 수 있습니다.

편집 :로 만든 거대한 파일 (몇 G)로 테스트 dd했지만 결정적인 결과는 없었습니다. 소스를 몇 개만 복사 할 수 없었습니다. 전체 작업을 취소했거나 (너무 빠름) 디스크 캐싱 및 파일 시스템 설계로 인해 기회가 전혀 없었습니다. (^^ C는 이동 후 성공했습니다. ).


답변

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

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

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

답변