오류가 발생하면 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"가 사용하는 동일한 코드 중 일부를 사용하여 요청된 디렉터리와 파일을 복사한 다음(복사가 성공했다고 가정하고) 원본 파일을 삭제합니다. 복사에 실패하면 대상 파티션에 복사된 부분이 삭제됩니다. 세 개의 디렉터리를 한 파티션에서 다른 파티션으로 복사하려는 경우 첫 번째 디렉터리의 복사는 성공했지만 두 번째 디렉터리는 성공하지 못한 경우 첫 번째 디렉터리는 대상 파티션에 남고 두 번째 및 세 번째 디렉터리는 원래 파티션에 남게 됩니다.

데이터가 보존되므로 복구에는 문제가 없습니다. 얼마나 많은 시도를 했는지는 모르겠지만원자( mkdir예: 소스 확인 필요) 또는 완전히 해당 도메인(커널과 관련하여)에 있지만 소스를 이미 제거한 동안 인터럽트가 발생하면 손상이 발생할 수 있습니다. 이 시점에서는 이미 대상 디렉터리에 좋은 복사본이 있으므로 간단한 바이트 크기 확인만으로 문제를 해결할 수 있습니다.

편집: 내가 만든 대용량 파일(여러 G)로 몇 가지 테스트를 실행했지만 dd결론이 나지 않은 결과가 나왔습니다. 일부 소스 코드만 복사하는 데는 성공하지 못했습니다. 전체 작업을 너무 빨리 취소했거나 디스크 캐싱 및 좋은 파일 시스템 설계로 인해 나중에 기회가 없었을 것입니다(내 ^C는 착륙 후 항상 성공적으로 이동했습니다).

관련 정보