- Books, IT, and Life

[삽질]Samba 포팅

| 2008년 1월 24일 목요일
저는 모 회사에서 멀티미디어 제품(?)을 개발하는 일을 하고 있습니다.
주로 하는 업무가 제품에 리눅스 운영체제도 올리고 여러가지 프로그램도 만들어 넣고, 포팅도 하는 등등의 일입니다.

최근 이슈로는 Samba 포팅인데요, 꽤 스트레스를 받고 있지요.
벌써 끝났어야 하는 일인데, 대충 포팅해놓고 재대로 테스트 하지 않은게 첫 번째 잘못이었습니다.

문제는 시스템에서 Samba 서버가 실행되는 상황에서 PC -> 제품으로 파일 복사는 문제가 없는데, 반대로 PC로의 복사가 자꾸 실패하는 겁니다. 그리고 다음과 같은 에러 메시지가 출력되었습니다.

"[파일명] 항목을 복사할 수 없습니다. 사용할 수 있는 메모리가 부족합니다. 하나 이상의 프로그램을 닫고 다시 시도하십시오"

우선은 로그 파일을 분석하고 소스를 보라는 디버깅의 기본 중의 기본부터 시작했지만, 하루 이틀 사이에 Samba 소스를 분석해서 포팅한 상황에서 왜 저런 문제가 발생하는지 원인을 찾는 일은 참 어려운 작업이었습니다.

하지만 문제는 해결해야 하기에, 언제나 그렇지만, 날림+ 통박으로 제일 먼저 의심이 가는 부분을 찾아보니 source/include/config.h 였습니다.

왜냐고요?

처음에 포팅할 때 Large file(4GB 이상의 파일) 복사가 안되서 이런 저런 소스를 살펴보던 중에 교차 환경으로 configure를 실행되면서 Large file 관련 옵션을 적용했음에도 불구하고, 교차 개발 환경의 특성상 configure가 재대로 실행되지 않았기 때문에 이 과정에서 생성된 config.h 에는 4GB이상 파일을 다루기 위한 옵션이 모두 disable 상태로 남아 있었는 걸 수정한 적이 있었습니다. 그래서 이 문제 역시 config.h만 잘 살펴보면 문제가 해결되리란 막연한 기대감이 있었다.

역시 그 예상은 맞았습니다.
아래 config.h 소스를 보면 MMAP과 관련된 부분이 있습니다.


바로 이 부분이 주석으로 막혀 있었던게 문제의 원인입니다.

물론 왜 이게 정의되어 있지 않으면 문제가 생기는지 자세히 분석하지는 않았습니다. ^^;

자, 이 옵션을 설정하고 빌드 후 시스템에 올려서 실행하고, 윈도우에서 접속한 후, 떨리는 마음으로 시스템에 있는 약 4.5GB 의 파일을 PC로 복사합니다.

이 정도 크기의 파일은 복사하는데 약 20~30분 정도가 걸립니다. 이전에는 복사하자마자 에러를 출력하고 복사에 실패했는데, 이제 복사가 되기 시작하네요?

해결???

하지만, 완전히 끝나야 한 숨 돌릴텐데, 왠걸? 절반 정도 복사 되다가 이제는 다음과 같은 에러를 출력하고 또 실패했습니다.

"[파일명] 항목을 복사할 수 없습니다. 지정된 네트워크 이름을 더 이상 사용할 수 없습니다."

제길~ 다시 혹시나 해서 테스트했습니다. 이번에는 약 700MB 정도의 파일을 복사하는데, "이것 봐라?" 이 놈은 잘 복사되는군요? 그래서 조심스레 좀 더 큰 파일(약 1.3GB)을 복사했더니 이 녀석도 절반 정도 복사 되다가 다시 같은 에러가 나고 실패했습니다.

왜일까요? 1.3GB면 Large file도 아닌데...

원인은 기가비트 네트워크에 있었습니다.

결론은 100Mbps 망에서는 아주 잘 동작합니다. 이후 여러차례 테스트 결과 시스템이 기가비트 네트워크에서 살짝 불안했던 거였죠.

원인 분석 과정을 좀 더 자세히 얘기해보죠.

에러 메시지를 그대로 긁어서 구글링했더니 MS의 기술 지원 페이지를 찾아주는데, 주로 네트워크 드라이브 연결이 끊길 경우 저러한 메시지가 나올 수 있다고 하는 말에 힌트를 얻게 되었고, 얼마전 부터 계속 속을 썩이고 있는 기가비트 이더넷에 의심이 가길래, 바로 100Mbps 망으로 전환해서 문제를 찾을 수 있었다는... ^_^*

/*******************************************************************************/

* 추가로 여기에 Linux Large File 지원과 관련된 내용들이 정리되어 있습니다(대부분의 PC 배포판에서는 신경 쓸 필요 없는 내용들이고, 임베디드 시스템용 개발 환경에서도 이러한 이슈들은 이제 거의 해결되었습니다.)

* 이후 다시 vista와 잘 안붙는 문제로 또 얼마간 삽질을 했었습니다. 결국 nmbd와 위에서 설명한 config.h를 적절히 수정해서 해결~

0 개의 댓글: