cp 대신 rsync : 파일 복사 진행 상황을 보고 싶을 때.

며칠 전, cp 명령을 사용해서 파일 복사를 하고 있는데, 이게 진행이 되고 있는건지 아니면 죽은 건지 알 수가 없었다. 다른 창을 띄워 프로세스를 확인해보면 되겠지만, 그건 또 귀찮고.

그러다가, rsync 에는 이런 기능이 있음을 알게 됐고, 잊기 전에 그 내용을 정리해본다.
(cp 로는 이게 불가능하다는 뜻! 굳이 cp 로 하려면, pv 라는 다른 프로그램의 도움을 받아야 한다.)

다음 글들에서 도움을 얻었다.

rsync 에는 놀랄만큼 많은 선택사항이 있는데, ‘진행 상황’을 보기 위해선 다음과 같은 설정이 필요하다.

아래는 파일별 진행 상황이 아닌, 전체 진행상황을 한꺼번에 보려고 할 때 필요한 조건이 되겠다.

rsync -ah --info=progress2 <src> <dest>
          9.24G 100%  207.31MB/s    0:00:42 (xfr#152, to-chk=0/234) 

위에 있는 어떤 글에선 -av 를 사용하기도 한다. 그러나, v 를 쓰면, progress2 가 의미를 잃고, 모든 파일을 하나씩 보여준다. 파일이 많을 경우 화면 스크롤이 주르륵~
만약 v 를 꼭 쓰고 싶다면, 파일명을 인위로 표시하지 않게끔 설정해줘야 한다.

rsync -avh --info=progress2,name0 <src> <dest>

허나, 굳이 이럴 필요가..?

복사할 파일 전체가 아닌, 파일 하나당 정보를 원할 수도 있다.
이걸 원했다면, 즉 파일당 진행 상황을 원한다면 progress1 을 주면 된다.
여기선 v 를 써도 되겠다.

rsync -ah --info=progress1 <src> <dest>

-h 는 Human Readable 로, 파일 크기를 KB/MB/GB 단위로 바꿔서 표시해준다.
-a 는 상당히 복잡한데, -rlptgoD 와 동일한 의미를 갖는다고 한다.
하나씩 살펴보자면,

-r : Recursive (하위 디렉토리 포함)
-l : symlink 는 symlink 로 취급 (원본이 심링크라면 복사본도 심링크)
-p : Preserve Permissions (파일 허가권 동일하게 보존)
-t : Preserve modification Times (파일 수정시간 동일하게 보존)
-g : Preserve Group (그룹명 보존)
-o : Preserve Owner (사용자명 보존)
-D : --devices --specials 와 같은데, 디바이스 파일, 스페셜 파일도 복사하라는 뜻이다.

Owner 와 Group 을 보존하려면, 그럴만한 권한이 있어야 하고, 이건 거의 root 로만 가능한 선택사항이라고 볼 수도 있다.
아무튼 이렇게 복잡한데, 다 필요한 사항들이다. 따라서, 그냥 -a 는 기본으로 쓴다고 생각하는게 맘 편하겠다.

-a 와 살짝 충돌하기도 하지만, 유용한 선택사항으로 –chown 도 있다.
이것을 사용해서, 복사와 소유권 변경을 동시에 해줄 수 있다. (물론 권한이 있어야 한다.)
사용 예는 다음과 같다.

rsync -ah --chown=<username>:<group> --info=progress2 <src> <dest>

chown 이 되면, 당연히 chmod 도 탐이 난다. 역시 가능하다.
u+x 등도 가능하지만, 8진수가 좀더 눈에 잘 들어오고 편하다.
디렉토리 파일 각각 조건을 줄 수 있다.

rsync -ah --chmod=D2775,F664 --info=progress2 <src> <dest>

소유권과 허가권을 열심히 얘기했는데, 만약 FAT류(vfat, exfat 등등)로 복사하려하면, 복사는 되지만 경고도 같이 발생한다.
이를 방지하기 위해선 선택사항을 변경해줘야 한다. -a 에서 -p, -o, -g 를 뺀 상태.

rsync -rltDh --info=progress2 <src> <dest>

마지막으로, –stats 도 있다. 이건 복사 작업이 모두 끝난 뒤, 일련의 과정 속에서 일어난 여러가지 상황을 정리해서 보여준다. (내 입장에선 별 필요는 없다.)
–stats 는 info=stats 와 같다.

$ sudo rsync -ah --info=progress2,stats3 /opt/음악/ ./test-temp/
          9.24G 100%  207.31MB/s    0:00:42 (xfr#152, to-chk=0/234) 

rsync[6444] (sender) heap statistics:
  arena:         610304   (bytes from sbrk)
  ordblks:            2   (chunks not in use)
  smblks:            77
  hblks:              2   (chunks from mmap)
  hblkhd:        401408   (bytes from mmap)
  allmem:       1011712   (bytes from sbrk + mmap)
  usmblks:            0
  fsmblks:         7360
  uordblks:      193280   (bytes used)
  fordblks:      417024   (bytes free)
  keepcost:      394432   (bytes in releasable chunk)

rsync[6446] (server receiver) heap statistics:
  arena:         593920   (bytes from sbrk)
  ordblks:            1   (chunks not in use)
  smblks:            76
  hblks:              2   (chunks from mmap)
  hblkhd:        401408   (bytes from mmap)
  allmem:        995328   (bytes from sbrk + mmap)
  usmblks:            0
  fsmblks:         7296
  uordblks:      453472   (bytes used)
  fordblks:      140448   (bytes free)
  keepcost:      133152   (bytes in releasable chunk)

rsync[6445] (server generator) heap statistics:
  arena:         806912   (bytes from sbrk)
  ordblks:           66   (chunks not in use)
  smblks:             1
  hblks:              2   (chunks from mmap)
  hblkhd:        401408   (bytes from mmap)
  allmem:       1208320   (bytes from sbrk + mmap)
  usmblks:            0
  fsmblks:           96
  uordblks:      158528   (bytes used)
  fordblks:      648384   (bytes free)
  keepcost:      132416   (bytes in releasable chunk)

Number of files: 234 (reg: 152, dir: 82)
Number of created files: 233 (reg: 152, dir: 81)
Number of deleted files: 0
Number of regular files transferred: 152
Total file size: 9.24G bytes
Total transferred file size: 9.24G bytes
Literal data: 9.24G 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: 9.24G
Total bytes received: 3.44K

sent 9.24G bytes  received 3.44K bytes  217.36M bytes/sec
total size is 9.24G  speedup is 1.00

자주 쓸 일이 있다면, alias 를 만들어두는 편이 좋을 듯.
(alias 를 만들었다는 사실 조차 까먹는게 문제지만.)

Author: 아무도안

1 thought on “cp 대신 rsync : 파일 복사 진행 상황을 보고 싶을 때.

안녕하세요. 글 남겨주셔서 고맙습니다.