중단된 복사 프로세스 재개

중단된 복사 프로세스 재개

$A파일을 백업 위치에 복사하는 데 사용되었거나 완료된 프로세스를 안전하게 복원하는 방법은 무엇입니까 ?$Bpv "$A" > "$B"cat "$A" > "$B"

$A( LVM2 스냅샷 파일처럼 파일 용량이 크다고 가정 )

그것은 달성될 수 있는가 dd?

선호: bash 또는 python(바람직하게는 python3) 솔루션.

예제 시나리오: pv "$A" > "$B"90% 후에 복사가 중단됩니다. 전체 작업을 다시 반복하지 않고 복사 프로세스가 완료되도록 복원하려면 어떻게 해야 합니까?

답변1

예, dd를 사용하여 블록을 건너뛸 수 있습니다.

A="file1"
B="file2"

BLOCKSIZE=512  # default bs for dd

size_b=$(stat -c "%s" "$B")
skip_blocks=$((size_b / BLOCKSIZE))

dd if="$A" of="$B" skip=$skip_blocks seek=$skip_blocks bs=$BLOCKSIZE

여기서 중요한 매개변수는 skip다음과 같습니다 seek.

  • skip: 블록 건너뛰기IBS 크기시작 시 차단입력하다
  • seek: 블록 건너뛰기obs 크기시작 시 차단산출

답변2

당신이 원하는 rsync:

rsync -a --append "$A" "$B"

답변3

dd skipB의 실제 파일 크기(파티션 블록 크기와 무관)의 오프셋을 사용해 보셨나요 ?

그러면 누락된 부분을 얻을 수 있습니다. 이 시점에서 cat이를 새 파일에 직접 넣을 수 있습니다 cat "$B" "$A2" >> "$C"; #mv "$C" "$B"( $C물론 충분한 공간이 있는 경로에 누락된 부분이 있음).

cat또한 간단한 스크립트 병합을 위한 여러 파일 헤더가 없는 바이너리 파일을 연결하는 데에도 적합합니다. 끝 부분이 손상되었을 가능성이 있지만 $B, 이 경우 길이를 줄이고 $A초기 dd 단계에서 더 많은 내용을 다시 읽을 수 있습니다.

관련 정보