Rsync --dry-run에 전송된 올바른 바이트가 표시되지 않습니다.

Rsync --dry-run에 전송된 올바른 바이트가 표시되지 않습니다.

실제 동기화를 위한 충분한 공간이 있는지 확인하기 위해 rsyn해당 옵션을 사용하려고 합니다 . --dry-run테스트 목적으로 디렉토리를 동기화하려고 합니다 Documents. 디렉토리의 크기는

  x@x:~$ du Documents
  ...
  640760    Documents/

동기화하려는 파일 컨테이너의 크기는 다음과 같습니다.

  x@x:~$ df /media/veracrypt2
  Filesystem             1K-blocks  Used Available Use% Mounted on
  /dev/mapper/veracrypt2      9928  1191      8737  12% /media/veracrypt2

그런 다음 다음 명령을 실행합니다 rsync.

x@x:~$ rsync -ar --dry-run --stats Documents/ /media/veracrypt2

Number of files: 665 (reg: 560, dir: 105)
Number of created files: 664 (reg: 560, dir: 104)
Number of deleted files: 0
Number of regular files transferred: 560
Total file size: 649,731,108 bytes
Total transferred file size: 649,731,108 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 19,429
Total bytes received: 2,115

sent 19,429 bytes  received 2,115 bytes  43,088.00 bytes/sec
total size is 649,731,108  speedup is 30,158.33 (DRY RUN)

왜 19,429바이트만 전송되는지 이해가 되지 않습니다. 컨테이너가 비어 있으므로 해당 디렉터리의 모든 파일이 Documents전송되어야 합니다. 이는 649,731,108을 의미합니다! ?

나는 또한 다음과 같은 Scripts크기의 더 작은 디렉토리를 사용해 보았습니다.

 du -h Scripts/
 32K    Scripts/test/Logs
 56K    Scripts/test
 116K   Scripts/Logs
 264K   Scripts/color_schemes
 580K   Scripts/

여기에서 전체 디렉토리를 복사할 수 있어야 합니다. 이 디렉토리를 실행하면 rsync다음과 같은 결과가 나타납니다.

sending incremental file list
./
after_install.sh
install-crafter.sh
install-eclipse.sh
mk_autostart_app.sh
package_backup.sh
pandora.sh
sync_script.sh
trackpoint_speed_sens.sh
wallpaper.sh
Logs/
Logs/LOG_SYNC.log
Logs/LOG_SYNC.log~
Logs/LOG_WALLPAPER.txt
Logs/Log_sync.log
Logs/PANDORA.log
Logs/test
color_schemes/
color_schemes/kile.kateschema
test/
test/sync_script.sh
test/Logs/
test/Logs/Log_sync.log

Number of files: 25 (reg: 20, dir: 5)
Number of created files: 22 (reg: 18, dir: 4)
Number of deleted files: 0
Number of regular files transferred: 18
Total file size: 360,658 bytes
Total transferred file size: 353,166 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 900
Total bytes received: 95

sent 900 bytes  received 95 bytes  1,990.00 bytes/sec
total size is 360,658  speedup is 362.47 (DRY RUN)

그렇다면 여기서 전송되는 데이터는 왜 928바이트에 불과할까요? 이 값은 대상에 복사해야 하는 바이트 수를 나타내면 안 되나요?

답변1

--dry-run모드 에서는 rsync어떤 파일을 전송해야 하는지 결정되지만 해당 데이터는 실제로 전송되지 않습니다. 당연히 그렇게 할 필요가 없기 때문입니다. 이는 데이터 전송 논리의 일부인 증분 일치를 수행하지 않음을 의미합니다.

숫자가 이를 반영하는 이유는...글쎄...코드에 나와 있는 내용입니다.실제통계는 "가능한" 통계가 아닙니다.

소스 트리의 폴더 rsync -avvv --log-file=rsync.log --no-whole-file --stats doc doc2와 일반 동기화 간의 차이점은 다음과 같습니다(타임스탬프 제거, PID 차이 및 힙 통계 포함).docrsync--dry-run

 delta-transmission enabled
 recv_generator(doc,1)
 recv_generator(doc,2)
+set modtime of doc to (1463404939) Mon May 16 16:22:19 2016
 recv_generator(doc/README-SGML,3)
 recv_generator(doc/profile.txt,4)
 recv_generator(doc/rsync.sgml,5)
 send_files(2, doc)
 cd+++++++++ doc/
 send_files(3, doc/README-SGML)
+send_files mapped doc/README-SGML of size 672
+calling match_sums doc/README-SGML
+sending file_sum
+false_alarms=0 hash_hits=0 matches=0
+>f+++++++++ doc/README-SGML
+sender finished doc/README-SGML
 send_files(4, doc/profile.txt)
+send_files mapped doc/profile.txt of size 1935
+calling match_sums doc/profile.txt
+sending file_sum
+false_alarms=0 hash_hits=0 matches=0
+>f+++++++++ doc/profile.txt
+sender finished doc/profile.txt
 send_files(5, doc/rsync.sgml)
+send_files mapped doc/rsync.sgml of size 11843
+calling match_sums doc/rsync.sgml
+sending file_sum
+false_alarms=0 hash_hits=0 matches=0
+>f+++++++++ doc/rsync.sgml
+sender finished doc/rsync.sgml
 recv_files(1) starting
 recv_files(doc)
 recv_files(doc/README-SGML)
+got file_sum
+set modtime of doc/.README-SGML.hkH0u5 to (1463404939) Mon May 16 16:22:19 2016
+renaming doc/.README-SGML.hkH0u5 to doc/README-SGML
 recv_files(doc/profile.txt)
+got file_sum
+set modtime of doc/.profile.txt.Wdf4x9 to (1463404939) Mon May 16 16:22:19 2016
+renaming doc/.profile.txt.Wdf4x9 to doc/profile.txt
 recv_files(doc/rsync.sgml)
+got file_sum
+set modtime of doc/.rsync.sgml.JSte5H to (1463404939) Mon May 16 16:22:19 2016
+renaming doc/.rsync.sgml.JSte5H to doc/rsync.sgml
 generate_files phase=1
+set modtime of doc to (1463404939) Mon May 16 16:22:19 2016
 send_files phase=1
 recv_files phase=1
 generate_files phase=2
 send_files phase=2
 send files finished
-total: matches=0  hash_hits=0  false_alarms=0 data=0
+total: matches=0  hash_hits=0  false_alarms=0 data=14450
 Number of files: 4 (reg: 3, dir: 1)
 Number of created files: 4 (reg: 3, dir: 1)
 Number of deleted files: 0
 Number of regular files transferred: 3
 Total file size: 14,450 bytes
 Total transferred file size: 14,450 bytes
-Literal data: 0 bytes
+Literal data: 14,450 bytes
 Matched data: 0 bytes
 File list size: 0
 File list generation time: 0.001 seconds
 File list transfer time: 0.000 seconds
-Total bytes sent: 153
-Total bytes received: 793
-sent 153 bytes  received 793 bytes  378.40 bytes/sec
-total size is 14,450  speedup is 15.27 (DRY RUN)
-[sender] _exit_cleanup(code=0, file=main.c, line=1196): about to call exit(0) (DRY RUN)
+Total bytes sent: 14,723
+Total bytes received: 1,435
+sent 14,723 bytes  received 1,435 bytes  4,616.57 bytes/sec
+total size is 14,450  speedup is 0.89
+[sender] _exit_cleanup(code=0, file=main.c, line=1196): about to call exit(0)

초기 테스트 실행과 1) 실제 동기화를 수행한 후 2) 파일을 편집한 후 테스트 실행의 차이점은 다음과 같습니다 rsync.sgml. 시험 실행에서는 증분 일치가 수행되지 않음을 보여줍니다.

 received 3 names
 recv_file_list done
 get_local_name count=4 doc2
-created directory doc2
 delta-transmission enabled
 recv_generator(doc,1)
 recv_generator(doc,2)
 recv_generator(doc/README-SGML,3)
+doc/README-SGML is uptodate
 recv_generator(doc/profile.txt,4)
+doc/profile.txt is uptodate
 recv_generator(doc/rsync.sgml,5)
 send_files(2, doc)
<...>
 Number of files: 4 (reg: 3, dir: 1)
-Number of created files: 4 (reg: 3, dir: 1)
+Number of created files: 0
 Number of deleted files: 0
-Number of regular files transferred: 3
-Total file size: 14,450 bytes
-Total transferred file size: 14,450 bytes
+Number of regular files transferred: 1
+Total file size: 14,476 bytes
+Total transferred file size: 11,869 bytes
 Literal data: 0 bytes
 Matched data: 0 bytes
 File list size: 0
-File list generation time: 0.010 seconds
+File list generation time: 0.001 seconds
 File list transfer time: 0.000 seconds
-Total bytes sent: 153
-Total bytes received: 793
-sent 153 bytes  received 793 bytes  1,892.00 bytes/sec
-total size is 14,450  speedup is 15.27 (DRY RUN)
+Total bytes sent: 157
+Total bytes received: 830
+sent 157 bytes  received 830 bytes  658.00 bytes/sec
+total size is 14,476  speedup is 14.67 (DRY RUN)
 [sender] _exit_cleanup(code=0, file=main.c, line=1196): about to call exit(0) (DRY RUN)

이제 작업에 대해 - 대상에 실제 동기화를 위한 충분한 공간이 있는지 확인하십시오.

이라는 차이점을 보면 알 수 있다

  • 서류는 한장씩 복사되었고,
  • 각 파일은 임시 이름으로 기록된 후 원본 파일로 이동됩니다.

따라서 대상에 필요한 공간은 다음과 같습니다.

  • sum( max(existing_size,new_size) for all files to be synced) + max( (new_size) for all files to be synced)

첫 번째 항은 어느 시점의 "최종" 데이터 양에 대한 최악의 시나리오이고 두 번째 항은 임시 복사본을 위한 공간입니다.

각 파일 크기는 낭비되는 공간을 허용하기 위해 저장 장치 크기의 배수로 채워질 수 있습니다(대상 FS에 적합하고 예상 총계가 차이를 만들 만큼 충분히 높은 경우).

관련 정보