foo.txt
내 백업 드라이브에 (30GiB) 파일이 있습니다 .
내 일반 드라이브에 파일이 있습니다 foo.txt
(60GiB, 처음 30GiB는 정확히 동일함).
전체 파일을 다시 복사하지 않고 누락된 부분만 추가하려면 어떻게 해야 하나요?
어쩌면 뭔가가 dd
효과가 있을까요?
답변1
파일을 동기화하려면 "더 짧은 파일에 데이터를 추가"하는 옵션이 rsync
있습니다 .--append
rsync --append /path/to/foo.txt /path/to/foo.txt
# ^- original ^- copy
예시 실행
steeldriver의 답변에서 명백히 복사된 테스트 시나리오 - 자세한 출력을 위해 -P
및 옵션을 추가했습니다 .-v
$ dd if=/dev/urandom bs=1M iflag=fullblock count=60 of=origfile
60+0 records in
60+0 records out
62914560 bytes (63 MB, 60 MiB) copied, 0.328983 s, 191 MB/s
$ dd if=origfile bs=1M iflag=fullblock count=30 of=newfile
30+0 records in
30+0 records out
31457280 bytes (31 MB, 30 MiB) copied, 0.0292976 s, 1.1 GB/s
$ cmp origfile newfile
cmp: EOF on newfile
$ rsync -Pv --append origfile newfile
origfile
62,914,560 100% 365.47MB/s 0:00:00 (xfr#1, to-chk=0/1)
sent 31,465,039 bytes received 35 bytes 20,976,716.00 bytes/sec
total size is 62,914,560 speedup is 2.00
$ cmp origfile newfile
$
답변2
예, 사용할 수 있습니다 dd
. 요령은 bs
x skip
와 obs
x를 seek
모두 선택하는 것입니다.정확한필수 오프셋
전.
먼저 테스트 파일을 생성해 보겠습니다. 설명을 위해 60GiB 대신 60MiB를 선택했습니다.
$ dd if=/dev/urandom bs=1M iflag=fullblock count=60 of=origfile
60+0 records in
60+0 records out
62914560 bytes (63 MB, 60 MiB) copied, 0.376846 s, 167 MB/s
이제 정확히 첫 번째 절반을 복사해 보겠습니다. 다시 사용하여 dd
(필수는 아니지만)
$ dd if=origfile bs=1M iflag=fullblock count=30 of=newfile
30+0 records in
30+0 records out
31457280 bytes (31 MB, 30 MiB) copied, 0.063891 s, 492 MB/s
서로 다른지 확인합니다.
$ cmp origfile newfile
cmp: EOF on newfile after byte 31457280, in line 122106
이제 두 파일의 첫 번째 x 블록을 건너뛰고 from 에서 origfile
로 복사해 보겠습니다 .newfile
30
1M
$ dd if=origfile bs=1M iflag=fullblock skip=30 count=30 of=newfile seek=30
30+0 records in
30+0 records out
31457280 bytes (31 MB, 30 MiB) copied, 0.0632964 s, 497 MB/s
마지막으로 파일이 이제 동일한지 확인합니다.
$ cmp origfile newfile
$
답변3
이는 거대한 파일이지만 크기를 처리할 수 있다면 split
명령을 사용하여 60GB 파일을 file1
및 file2
. 그런 다음 cat
원하는 부품을 다시 결합하는 데 사용합니다 .
예:
split -n2 60Gfile
cat xab >> 30Gfile
split -n2
파일을 반으로 나누고 2개의 파일을 xaa
만들고xab
원하는 대로 작동하지 않으면 명령에 다른 옵션이 있으므로 분할 설명서를 읽어보세요.