1. 배경
Linux, Windows 장비가 혼재된 환경에서 rsync를 백업용으로 사용한 것은 5년 이상 되었지만, 항상 한글 처리가 가장 큰 이슈였다.
이 문제때문에 항상 백업될 파일/폴더 이름에 ASCII가 아닌 다른 문자를 사용하고 있는지 확인하는 것이 첫번째 작업이었다. 그래서, 개발자/DBA 등 파일 데이터를 생성하는 사용자들에게 매번 협조를 구해야만 했다. workaround로 tar와 같은 압축 프로그램을 이용해서 미리 파일/폴더명을 ASCII 로 정리해두는 꽁수(?)를 사용하기도 했지만 어쨌든 깔끔한 방법은 아니었다.
2. 원인
원인은 UNIX emulation layer를 제공하는 cygwin DLL이 UTF-8을 제대로 지원하지 못하기 때문이다. 이것 때문에 별도로 패치된 cygwin DLL 파일을 구하는 경우도 있었지만, 어쨌든 권장할 만한 방법은 아니었다. rsync 뿐만 아니라 cygwin 에 의존하는 다른 오픈소스 프로그램들도 비슷한 문제를 안고 있다고 보면 된다.
3. 한글이 정상적으로 처리되지 않을 때
구 버전의 cygwin DLL 파일과 함께 rsync를 실행해서 한글 파일, 폴더를 복사 시도했다.
- 클라이언트쪽 메시지
- rsync 서버쪽 로그 (서버는 정상적으로 보내주는 것을 알 수 있다)
4. 해결책
rsync 패키지에 함께 제공되는 cygwin DLL 파일을 최신버전 (1.7.9)로 덮어쓴다.
cygwin 최신 버전을 구하려면...
- Cygwin 공식 사이트에서 setup.exe 실행 파일을 다운로드 받고 설치한다. 그 다음에 cygwin DLL 파일만 추출한다. 또는
- 이 포스팅 작성자가 미리 정리한 cygwin-1.7.9-1.zip 파일을 여기에서 다운로드한다.
다운로드 받은 cygwin-1.7.9-1.zip 파일에 포함된 cygwin1.dll 파일 정보
03/29/2011 05:11 PM 2,666,500 cygwin1.dll
1 File(s) 2,666,500 bytes
MD5SUM: a47a6b26c566f364e71a83b789a56226 *cygwin1.dll
5. 정상적으로 진행될 때의 스크린샷 (#1)
1.7 최신 버전의 cygwin DLL 파일과 함께 rsync를 실행해서 한글 파일, 폴더를 복사 시도했다.
- 클라이언트쪽 메시지
- rsync 서버쪽 로그
에러메시지가 좀 있지만, 한글 이름으로 된 파일/폴더 들이 잘 전송되는 것을 볼 수 있다.
chown 파일/폴더 failed: Invalid argument (22) 에러 메시지의 경우, 대충 짐작되지만 구글링해보면 좀 더 많은 자료를 찾을 수 있다. 간단히 정리하면 rsync 옵션 –a (archive) 때문이다. –a 옵션은 –rlptgoD 와 동일한 옵션이며, 그 중 –p (preserve permission), –o(preserve owner), –g (preserve group) 가 문제의 에러 메시지를 발생시킨 것이다.
즉, rsync 서버로부터 Windows machine으로 파일을 전송하고 나서 Permission, Owner, Group 정보를 원본 그대로 설정하려고 시도하다가 발생한 것이다.이는 Linux 와 환경이 근본적으로 다르기 때문이므로 옵션을 다르게 사용할 필요가 있다.
- rsync의 옵션 목록 (문제의 옵션들을 볼 수 있다)
6. 정상적으로 진행될 때의 스크린샷 (#2)
마지막으로 rsync 옵션을 변경해서 한글 파일, 폴더를 복사 시도했다.
- 클라이언트쪽 메시지 (에러 메시지들이 사라졌다)
앞서 사용한 –a 옵션이 아닌 –rltD 라는 다소 복잡한 옵션을 지정했다. (-vz 옵션은 그대로 사용)
깔끔하게 출력되는 모습이 보기 좋다. 성공!!!
7. 참고자료
- rsync on windows chown failed: Invalid argument (22)
http://www.kuplen.at/2010/07/rsync-on-windows-chown-failed-invalid-argument-22/ - cwrsync 4.0.4 : permission question
http://www.itefix.no/i2/node/12340 - Chapter 2. Setting Up Cygwin – Internationalization
http://cygwin.com/cygwin-ug-net/setup-locale.html - 새로운 Cygwin 1.7 한글 문제 해결
- cwRsync
http://www.itefix.no/i2/node/10650 - ubuntu linux와 windows 사이에 rsync 설정
http://computing.lbird.net/2631023 - DeltaCopy Download
http://www.aboutmyip.com/AboutMyXApp/DeltaCopyDownloadRaw.jsp - DeltaCopy – rsync for Windows
http://www.snowfrog.net/2009/11/12/deltacopy-rsync-for-windows/