(EDIT 2009.03.13 windows에서 rsync server를 사용하는 것은 포기했음. 자세한 사정은 이 글 끝의 덧..들을 참고. 아래는 그냥 기록상 남겨둠. 다른 사람에게는 도움이 될 지도 모르니...)


서설

노트북에서 작업을 하다가 갑자기 비교적 대량의 데이터를 백업해야 할 일이 생겼는데 FTP로 옮기고 있자니 짜증이 났다. 뭔가 일이 자동으로 일어났으면 좋겠는데... 그런 생각을 하다가 노트북 데이터의 자동 백업 방법을 생각해 보니 제일 바람직한 것은 rsync를 사용하는 것이었다. 버젼 컨트롤이 필요한 것들은 lab 한 구석에 돌리는 debian 서버에 subversion(옛날 것들)과 git(요즘 것들)을 혼합하여 저장하지만, 특별히 버젼 컨트롤은 필요 없이 단순히 동기화만 필요한 것들에는 굳이 subversion이나 git을 사용할 필요가 없어 보였기 때문이다. 버젼 컨트롤에는 아무래도 이러저러한 추가 정보들이 필요하다 보니 단순히 동기화를 위해서 버젼 컨트롤 소프트웨어를 사용하는 것도 낭비라고 여겨졌다. 그래서 lab에서 사용하는 windows 데스크탑이 HDD도 넉넉하니 단순 무식하게 rsync로 자동으로 동기화가 되도록만 해 놓고 싶었다.

이 글은 linux client(ubuntu 사용)와 windows server(win xp 사용) 사이에 rsync 설정을 한 삽질기이다.


서버

일단 windows가 서버가 되어야 하니 rsync server를 설치해야 하는데 찾아 보니 이런 것들이 있다.

DeltaCopy는 rsync server이긴 한데 이 글을 읽어보면 domain controller하고 얽혀서 별로 좋지가 않다고 한다. 서버가 windows xp인데다가 우리 랩도 windows domain controller하고는 담 쌓고 지낸지가 몇년이 됐으니 DeltaCopy는 나도 패스다.

cwRsync는 특별히 새로 나온 소프트웨어라기보다는 기존에 cygwin과 rsync를 직접 설치하던 것을 cygwin에서 필요한 부분만을 가져오고 rsync를 그 위에 설치해 주고 rsync 서버를 daemon mode로 (그러니까 윈도우즈 서비스로) 설정하는 것까지를 편하게 해 준다. cygwin에서 뭘 가져올지를 시간들여 생각할 필요가 없다. 그러니 나를 위해서도 이것이 좋은 선택이다.

cwRsync는 위 홈페이지에서 링크를 따라가면 sourceforge에서 다운로드할 수 있는데, client는 필요 없으니 서버만 다운로드한다. (cwRsyncServer_3.0.1_Installer.zip) 설치는 간단하다. 특별히 신경 써서 뭘 할 필요도 없다. 단, 설명을 읽어보면 서비스 시작 형태가 수동으로 설정된다고 하는데, 관리도구->서비스 에서 rsync server를 찾아서 자동으로 시작하도록 해 준다. (시작은 좀 있다가 한다.) 그리고 실제의 서버 설정을 하는데, 시작메뉴에서 cwRsync를 찾아서 rsyncd.conf를 누르면 설정파일 내용이 메모장에 뜬다.

rsync는 기본적으로 module 단위로 동작한다. 서버의 설정 파일에 모듈들을 지정하면 외부에서는 서버이름과 그 서버에 있는 모듈들이 보이는 식이다. 서버이름/모듈이름 의 형식으로 접근하게 된다. 설정파일에서 기본적인 것은 그냥 있는 것(test라는 모듈이 이미 하나 정의돼 있을 거다.)을 대충 고쳐서 써도 되는데 중요한 것은 charset을 처리하도록 손을 봐 줘야 한다는 거다. 일단 upload할 모듈의 끄트머리에 charset = utf-8을 적어준다. 한글 파일 이름만을 위해서는 윈도우즈 기본 charset인 cp949나 euc-kr을 써도 되는데 유럽쪽 글자들이 들어 있는 파일 이름을 위해서는 아무래도 유니코드가 좋다. 여기에서 utf-8로 정해줬다고 바로 그대로 동작하는 건 아니다. 이 글이나 이 글을 읽어 보면 cwRsync에 딸려 오는 cygwin이 유니코드를 사용하도록 돼 있지 않다고 한다. 그 글들에서 따라가 보면 어떤 일본어로 된 utf8-cygwin이라는 페이지가 뜨는데 거기에서 cygwin1-dll-20-11-18.tar.bz2을 다운로드한다. 압축파일을 열면 cygwin1.dll이라는 파일이 나오는데 그걸 C:\Program Files\ICW\Bin 아래에 덮어 씌운다.

그럼 그 다음에 rsync 서비스를 시작해 준다. 이 이후에 중간 중간 설정 파일을 바꾸면서 시험해 볼 때는 매번 서비스를 중지하고 다시 시작해야 할 필요는 없다. 설정파일을 바꾸면 바로 적용되는 듯하다.


클라이언트

클라이언트는 뭐 특별히 설명할 것이 없다. 한가지만 언급하자면 rsync 프로그램에 먹일 옵션으로는 -ausx --iconv=utf-8 정도가 좋은 것 같다. 물론 리눅스 클라이언트에서 사용하는 charset이 utf-8일 때 얘기고 옛날 식 euc-kr을 쓴다면 -ausx --iconv=euc-kr로 하면 될 것이다.


자동화

자동화는 클라이언트가 리눅스이니 cron 같은 것을 쓰면 된다. 이것도 여기서 특별히 설명할 것은 없네. 다른 데 더 좋은 설명이 많을 테니까.



어째 용두사미 격의 삽질기네. 뭐, 삽질에 시간이 제일 많이 걸린 부분이 저 위에 utf-8 관련한 정보를 찾는 시간이었으니 오히려 이런 식이 제 격인 것 같기도 하고. ㅋㅋ


그 날 이후

덧. 2009. 03. 12 컴퓨터를 갈아 엎고 나서 위에 기록한 거 대로 다시 설치했는데 이게 제대로 안된다. 문제는 아직 뭔지 모르겠다. cygrunsrv.exe를 실행하면 error 1053을 내고 서비스가 시작되지 않는다.

덧. 2009. 03. 13 cwRsync도 어차피 cygwin과 rsync를 설치하기 쉽게 패키징 한 것이다. 그래서 cygwin을 사용하지 않는 것을 찾아보았는데 Unison이라는 것을 찾았다. 그런데 이것도 문제가 있다. windows에 server로 설치하기 위해서는 socket method와 remote shell method를 선택할 수 있는데 socket method는 보안을 구현하기 거시기하다. 그런데 remote shell method로서 추천하고 있는 것이 결국 cygwin + ssh을 설치하는 것이다. 이래서는 어차피 다시 cygwin으로 돌아온 것이다. 그럴 바에는 그냥 cygwin + ssh + rsync로 가는 것이 훨씬 나을 것 같다. 그런데 다시 cygwin + ssh + rsync로 한다고 해도 앞에 덧. 03.12에서처럼 cwRsync에서의 알 수 없는 문제가 또 생길지도 모르겠다.

덧. 2009. 03. 13 cygwin을 직접 설치하고 rsync를 setup하려고 해도 같은 문제가 생긴다. cygwin 설치와 관련된 것은 아닌 것 같다. 그보다는 win xp에서의 permission setting 같은 것과 관련이 있는 것으로 보인다. 이것을 해결하기 위해서는 cygrunsrv.exe 프로그램에 관계된 자세한 문서를 찾아봐야 할 것 같은데 잘 못찾겠다. 정 안되면 소스를 분석해봐야겠다. 근데 그러려면 일이 커질 확률이 꽤 있다.

또 다른 해결책으로는 windows 머신에 virtualbox 같은 가상 머신을 설치하고 windows 방화벽에서 port forwarding을 할 수 있다. 그런데 이렇게 하는 것은 문제 해결 자체보다 해야 할 것이 많아서(가상 머신 설치와 설정 등) 별로 내키지 않는다. 그래도 이 방법에 대해서는 내가 잘 알고 있기 때문에 cygrunsrv.exe를 분석하는 것 보다는 빨리 해결할 수 있을 것 같다.

덧. 2009. 03. 13 이것 저것 살펴 보고 나서 내가 cygrunsrv.exe의 문제를 해결할 수 없을 것이라고 판단했다. 물론 시간을 들이면 못 하지는 않을 것 같지만 들이는 시간에 비해서 얻는 것이 미약하다. 당분간은 rsync 없이 ftp로 살아야겠다. 어차피 데이터는 한쪽으로만 흐르고 지워지는 데이터는 거의 없고 주로 교내 네트웍에서 자료를 옮기기 때문에 네트웍 대역폭을 신경 쓸 필요가 없고 공용 서버들도 아니고 critical service를 돌리는 컴퓨터들도 아니기 때문에 시스템 load에도 신경 쓸 필요가 없다.

고로... 그냥 ftp만 이용하다가 여름 정도 도면 cygwin과 cygrunsrv.exe에 중요한 변화가 있는지 체크해 보는 것이 좋을 것 같다.

  
트랙백   |  댓글   |
분명 NTP를 사용하도록 해 놨는데 시간 맞추는 주기가 1주일로 돼
있다 보니 컴퓨터 시간이 잘 안 맞는다. 예전에 인터넷에서 글하나를
발견해서 그걸 삽질기에 올려 놓으면서 ntp를 설정했었는데 주기는
맞추지 않았던 것이다(링크). 그래서 좀 편하게 맞추는 방법이 없을까 찾아봤는데
금방 찾아지지가 않아서 결국 스스로 알아봤다.

windwos xp에는 net time 이라는 명령어라든가 w32tm 이라는 것들을
사용해서 ntp를 참조할 수 있는데 명령어 옵션을 찾아봐도 시간 맞추는
주기는 보이지 않는다. registry를 뒤지면 이런 항목이 있다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
\W32Time\TimeProviders\NtpClient (길어서 잘랐음. 원래 한 줄)

여기에 SpecialPollInterval 이라는 항목이 있는데
원래는 604800(10진수)로 정해져 있었다. 이 숫자가 시간 맞추는 주기인 것
같은데, 정확한 의미를 알아봤다. 시스템 트레이에 시계를 더블클릭하면
"날짜 및 시간 등록 정보"라는 창이 뜨고 여기서 "인터넷 시간" 탭을 누른다.
여기를 보면 마지막으로 언제 시간을 맞추었는지와 다음에는 언제 맞출
것인지를 알려주는데 나의 경우 딱 1주일 간격이었다. 그래서 계산해 보니
위의 숫자가 1주일을 초 단위로 계산한 값이다. 24시간에 한번씩 시간을
맞추도록 하기 위해서 SpecialPollInterval 의 값을 86400(10진수)로 변경하고
시간 서비스를 다시 시작한다. 다시 시작하는 방법은 시작메뉴에서
관리도구->서비스를 실행하고 windows time이라는 서비스를 찾아서
오른쪽 클릭한 후에 "다시 시작"을 선택한다.
그리고 나서 "날짜 및 시간 등록 정보"의 "인터넷 시간" 탭을 다시 선택하면
주기가 24시간으로 바뀐 것을 볼 수 있다.

(위의 설정을 registry를 직접 건드리지 않고 net time이나 w32tm 등을
이용해서 설정하는 방법이 있을 것 같긴 한데...)

  
트랙백   |  댓글   |
2005/08/21 22:10에 링크만 덩그러니 걸어 놓은 걸 대충 번역함.
http://www.gudeads.com/english/main-windows-ntp.htm
(사실 본인은 아래 나와 있는 내용을 적용했었는지 아닌지 지금 기억이 가물가물하고,
본인의 경우 지금 확인해 보면 "제어판 - 날짜 및 시간" 에서만 설정을 한 듯 하다.
"인터넷 시간" 탭에서 "인터넷 시간 서버와 자동으로 동기화" 항목을 체크하고,
"서버"에 자신이 알고 있는 ntp 서버 중에서 반응이 좋은 놈의 주소를 써 준다.
"지금 업데이트" 버튼을 누르면 수 초 후에 동기화가 이루어진다. 그런데 이게
생각 외로 자동으로 업데이트가 잘 안되는 것 같다. 그래서 주변의 다른 컴퓨터나
핸드폰 시계와 수 분 이상 차이가 난다 싶으면 화면 오른쪽 아래의 시계를 더블
클릭해서 "날짜 및 시간 등록정보"를 띄운 후에 "인터넷 시간" 탭에서 "지금 업데이트"
버튼을 지긋이 눌러주고 딴일을 한다. 잠시후에 보면 동기화 됐다는 메시지가
뜨고 "날짜 및 시간" 창을 닫고 하던 일을 계속한다. 아마 동기화 주기가 너무
길어서 그런 거 같은데 귀찮아서 그냥 쓰고 있다. 이거 번역할 시간에 주기나
맞추는 건데 -.-;;; 큭.. 자, 이제 아래에 번역한 것.)

Windows를 NTP 클라이언트나 서버로 사용하기


Windows XP/Server 2003

Windows XP/Server 2003은 NTP 서버에 시간을 물어서 자신의 시간을 맞출 수가 있다. 별도의 소프트웨어가 필요하지는 않다. 설정은 "제어판 - 날짜 및 시간"에서 한다. Windows XP/Server 2003을 NTP 서버로 사용하기 위해서는 다음의 레지스트리 항목을 수정해야 한다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time:

이름데이터설명
Parameters\TypeNTP
Config\AnnounceFlags5이 서버는 안정적인 시간 정보를 제공한다는 의미
TimeProviders\NtpServer\Enabled1
Parameters\NtpServer이 서버가 별도의 시간정보를 어디선가 받아서 (역자주: 예를들면 GPS 정보 등) 자신의 시간을 맞출 수 있다면 이 항목은 비워둔다. 그렇지 않은 경우라면, IP 주소나 DNS 이름을 블랭크(역자주: 아마도 스페이스나 탭)로 구분하여 적는다.

(역자주: 본인도 해보지는 않았음)
위의 항목들을 변경한 후에는 해당 서비스를 재시작해야 한다.
Microsoft에서 다음의 추가적인 설명을 얻을 수 있다:
XP
Server 2003

Windows 2000

Windows 2000에서는 "w32time.exe"라는 통합 서비스를 통해서 NTP 서버나 클라이언트로 동작할 수 있다. 이 서비스를 활성화 하기 위해서는, 몇가지 항목들을 레지스트리에 추가한 후에 "time service"라는 서비시를 재시작해야 한다. "관리도구 - 서비스 - Windows Time"항목에서 "time service"를 발견할 수 있을 것이다. 서비스를 찾았으면 시작유형을 자동으로 설정한다. (명령행 (역자주: 윈도우즈버튼 - 실행 - cmd.exe) 에서 "net start w32time"이라고 입력하면 time 서비스를 시작할 수 있고, "net stop w32time"이라고 입력하면 중지할 수도 있다.) 이 서비스를 위한 레지스트리 항목은 다음의 위치에 있다:
HKEY_LOCAL_MACHINE\
SYSTEM\CurrentControlSet\Services\W32Time\Parameters
(역자주: 줄이 길어서 짤랐음. 원래는 한 줄)
각 항목의 자세한 의미에 대해서는 Microsoft에서 정보를 얻을 수 있다.

Windows 2000을 NTP 클라이언트로 동작시키기 위해서는, 시간 서버 (역자주: NTP 서버를 말함)의 IP 주소가 필요하다. ("ntpserver"라는 항목에 입력하거나 명령행에서 "net time /setsntp[:NTP-Serverliste]" 라고 입력하면 된다. (역자주: NTP-Serverlist가 맞는 거 같음) 동기화 주기는 8시간으로 맞추는 것이 표준이다. ("Period"라는 항목의 값을 "SpecialSkew"라고 설정한다.) 이 주기는 다른 값으로 변경하는 것도 물론 가능하다: 예를 들면 하루에 24번 동기화를 수행하려면 "Period"라는 항목의 종류가 "REG_DWORD"가 되도록 하고 값은 숫자 24가 되도록 한다.

Windows 2000은 NTP 서버로 동작하게 할 수도 있다: "LocalNTP"라는 레지스트리 항목을 "0"에서 "1"로 수정한다. time service를 재시작하면, 다른 NTP, 혹은 SNTP 클라이언트들이 이 서버에 시작을 물어볼 수 있게 된다. time service가 어떻게 돌아가고 있는지 확인해보려면 time service를 중지한 상태에서 "w32tm.exe"라는 명령어를 실행하면 된다. "w32tm.exe /?"라고 명령행에서 입력하면 설명이 나온다. 그 설명을 참조한다.

Windows NT

이러한 시간 서비스가 Windows NT에서도 제공되는데, NT resource kit에 들어 있는 옛날 방식의 시간 서비스인 Timeserv를 대체하는 녀석이다. Microsoft의 here (FTP)에서 다운로드 받을 수 있다.


[Home] [News] [Products] [Updates] [About us] [Ordering] [AGB] [Contact]

ⓒ 2004 Gude Analog- und Digitalsysteme GmbH

last update: 2005-05-20


  
트랙백   |  댓글   |
windows와 linux는 default charset encoding이 다르다.
그래서 그냥은 한글 파일 이름들이 호환이 안된다.
/etc/samba/smb.conf 에 다음과 같은 한줄을 [global] 어디엔가에 추가한다.

unix charset = euc-kr
  
트랙백   |  댓글   |
 이전  1   다음 

최근댓글
fotowall :: ncloud RSS Feeds today :    yesterday :
total :