unison 으로 두 대의 윈도우즈 머신에서 두 개 이상의 드라이브를 동기화하기...
음... 이거 리눅스는 전혀 등장하지 않는 내용입니다만... 예전부터 unison을 사용한 동기화는 여기서 묻고 답했기에...
다음과 같은 상황입니다. (예를 들어서)
집PC 의 C:\Temp 를 연구실PC 의 C:\Temp 와 동기화하고,
집PC 의 D:\Work 를 연구실PC 의 D:\Work 와 동기화하고 싶다.
지금까지 저는 리눅스가 껄린 또 다른 PC (이걸 '서버'라고 부르도록 하죠)를 중간에 넣어서,
집PC-리눅스-연구실PC 사이에 동기화를 시켰습니다.
1)리눅스PC에서 unison 서버를 띄우고
$> unidon -socket 10000
2)집PC에서 명령프롬프트 창을 열어서 윈도우즈용 unison 바이너리를 실행시킴
> unison Temp (Temp 는 프로파일 이름) > unison Work
Temp와 Work는 각각 C:\Temp와 D:\Work를 위한 프로파일이고, 이렇게 두 번 실행하기 귀찮으니 배치 파일을 만들었지요.
3)연구실PC에서도 마찬가지
애초에 리눅스에서 서버를 띄우는 게 편한데다가, 이렇게 하면 동일한 작업본이 세 곳에 남기 때문에 백업의 의미도 있다고 생각하여 좋다고 한 건데, 이 경우 불편한 것은 집에서 아침에 동기화하고 나서면 연구실에 와서 다시 한 번 동기화를 해줘야 반영이 되고, 연구실을 나설 때도 마찬가지란 얘기입니다. CVS를 쓰는 것과 똑같지요. 한 쪽에서 커밋하고 다른 쪽에 와서 업데이트하고... Work가 2GB가까이 되다보니 체크하는 시간이 만만치가 않습니다.
그래서 중간에 리눅스 서버를 거치지 않고 집PC-연구실PC를 직접 동기화하자고 했는데, 이 때 C:와 D:가 서로 다른 드라이브라서 문제가 생겼습니다. unison 에서 Root 항목을 지정해줄 때 드라이브 명을 적어 주는 것이 불가능하더군요.
# C:\Temp 를 동기화하기 위한 프로파일 times = true root = C:\ root = socket://연구실PC주소:10000//C # 이런 식으로 C를 명시해도, 이것은 C:가 아니라 드라이브루트\C 폴더로 간주되어 버림 path = Temp
이리 저리 해 본 결과 윈도우즈에서 unison 서버를 띄울 경우는, unison을 실행시킬 때의 pwd가 있는 드라이브가 Root가 된다는 걸 알았습니다. -_-;;; 즉 명령 프롬프트 창에서
C:\Document 어쩌고> unison -socket 10000 하면 C:가 드라이브루트이고 D:\저쩌고> unison -socket 10000 하면 D:가 드라이브루트가 됨
따라서 프로파일에는 다음과 같이 적어야 했습니다.
# C:\Temp 를 동기화하기 위한 프로파일 times = true root = C:\ root = socket://연구실PC주소:10000// # 아예 드라이브명을 적지 않음. 드라이브명은 서버 쪽에서 결정되니.. path = Temp
결과적으로,
1) C:\Temp 를 동기화하기 위해서, 연구실PC에서는 C:에서 unison 서버를 실행하고, 집PC에서 클라이언트 실행
2) D:\Work 를 동기화하기 위해서, 연구실PC에서는 D:에서 unison 서버를 실행하고, 집PC에서 클라이언트 실행
해야 합니다.
기존에는 서버는 한번만 실행하고 클라이언트만 두 번 이상 실행하면 (그나마도 배치파일로 만들면 한 번) 되었는데, 이제는 서버를 두 번 이상 실행해야 하니 불편하기 짝이 없습니다.
이것도 그나마 방법이 있긴 합니다. 애초에 서버를 한꺼번에 두 개를 띄우는 겁니다. 포트를 서로 다르게 하는 거죠. 테스트해서 성공하기도 했습니다. 하지만 정말 마음에 들지 않습니다. 명령프롬프트 창을 두 개 띄워서 하나는 꼬박꼬박 D:로 옮겨준 후에 서버를 실행해야 하는 것도 그렇고... -_-;
저 프로파일에 뭔가 다르게 적어주면 드라이브명도 지정을 할 수 있지 않을까 싶은데 웹에서 검색을 해 봐도 못 찾겠습니다. 혹시 윈도우즈끼리나, 로컬 리눅스와 원격 윈도우즈 사이에 동기화를 하는 분들 계시면 조언 좀 부탁드리겠습니다.
댓글 달기