$A
파일을 백업 위치에 복사하는 데 사용되었거나 완료된 프로세스를 안전하게 복원하는 방법은 무엇입니까 ?$B
pv "$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 skip
B의 실제 파일 크기(파티션 블록 크기와 무관)의 오프셋을 사용해 보셨나요 ?
그러면 누락된 부분을 얻을 수 있습니다. 이 시점에서 cat
이를 새 파일에 직접 넣을 수 있습니다 cat "$B" "$A2" >> "$C"; #mv "$C" "$B"
( $C
물론 충분한 공간이 있는 경로에 누락된 부분이 있음).
cat
또한 간단한 스크립트 병합을 위한 여러 파일 헤더가 없는 바이너리 파일을 연결하는 데에도 적합합니다. 끝 부분이 손상되었을 가능성이 있지만 $B
, 이 경우 길이를 줄이고 $A
초기 dd 단계에서 더 많은 내용을 다시 읽을 수 있습니다.