적은 메모리 미니-하우투

지음: Todd Burgess, tburgess@uoguelph.ca

버전 0.1, 날짜미상

번역: 형천욱, skyhook@kitel.co.kr

버전 0.1h, 1998년 4월 29일

개요

이 미니 하우투의 목적은 적은 양의 메모리를 가진 시스템 상에서 어떻게 리눅스를 돌리는 가를 기술하는 것이다. 메모리를 더 늘린다면야 문제가 되지 않겠지만, 여러분이 리눅스에서 메모리를 꽉꽉(충분히) 사용할 수 있는 방법이 많이 있다.

메모리의 관점으로 보았을 때 대다수의 리눅스 배포판은 꽤 덩치가 크다. 이들 배포판은 우리들 중 대부분이 앞으로 필요치 않은 많은 서비스와 기능을 돌려대고 제공한다. 이들 많은 서비스들을 제거함으로써 여러분은 실제 메모리의 몇 메가 바이트라도 절약할 수 있다.

필자의 개인 시스템은 12MB의 메모리와 12MB의 스왑공간을 가지고 있는 486 DX2-66이다. 3년동안 아주 행복하게 리눅스를 돌려왔고 앞으로도 몇 년간 더 돌릴 생각이다. :)

리눅스 커널

배포판과 함께 기본적으로 제공되는 커널은 꽤 덩치가 크다. 그리고 우리들 중 앞으로 사용하지 않을 또는 필요하지 않을 많은 기능들을 포함하고 있다. 만약 여러분의 커널이 다시 컴파일 되지 않았다면 반드시 커널을 다시 컴파일하라고 강추천하는 바이다. 커널을 다시 컴파일 하는 방법은 이 문서의 범위를 벗어나는 것이지만 특별히 많은 리눅스 관련 책과 가이드에서 자세히 다루고 있다.

만약 여러분이 커널을 다시 컴파일 한다면 여러분에게 필요하지 않은 기능은 커널에 담지 말아야 하는것을 기억하라. 예를 들어, 여러분들 중 얼마만이 PLIP 지원을 커널에 포함시키겠는가? 그 기능을 포함한 사람들 중 얼마만이 그 기능을 사용하겠는가? 커널이 작을수록 로드하는데 시간이 덜 걸리고 메모리를 덜 사용하며 CPU 사이클도 덜 사용하는 것이다.

또다른 것은 모듈이다. 필자는 개인적으로 모듈을 좋아하지 않는다. 거추장 스럽기 때문이다. 만일 여러분이 모듈을 사용하고 모듈을 선호한다면 커널이 비대해지는 것을 구제할 수 있다.

가상콘솔

가상콘솔은 메모리를 절약할 수 있는 아주 좋은 방법이다. 대다수의 리눅스 배포판은 여섯 개의 가상콘솔을 돌린다. 평균적으로 6개의 가상콘솔은 4MB의 메모리를 필요로 한다. 두서너개의 가상콘솔을 제거한다면 그만큼의 메모리를 절약할 수 있다.

대부분의 사용자들은 단지 3 또는 4개의 가상콘솔만 사용한다. 가상콘솔을 몇개를 없애는 가에 대한 선택은 여러분의 몫이다. 단 가상콘솔을 적게 사용할 수록 그만큼의 메모리를 더 벌게 되고 여러분의 다른 어플리케이션 들도 돌아간다는 것을 기억하라.

얼마나 많은 가상콘솔이 로딩되는 가를 나타내는 파일은 /etc/inittab이다. 가상콘솔을 제거하기 위해:

  1. 텍스트 에디터로 /etc/inittab을 로드한다.
  2. c1:12345:respawn:/sbin/getty tty1 38400 linux과 같은 라인을 찾아라. (c1으로 시작되는 라인이 될 것이다.) 높은 숫자로 시작하는(즉, c6)곳의 첫 번째에 '#'을 넣어 주석처리한다. 필요한 만큼 이 과정을 반복하라. 여러분이 주석처리한 모든 라인만큼 가상콘솔이 적게 돌아간다는 것을 기억하라.
  3. 여러분이 변경한 것이 효과를 나타내도록 시스템을 재부팅한다.

데몬

대부분의 리눅스 배포판은 우리들 중 대부분이 결코 사용하지 않을 많은 데몬들을 돌린다. 이들 데몬 중 대부분은 스크립트에 의해 로드된다. 이들 스크립드가 어디에 있는 가는 여러분이 가지고 있는 리눅스 배포판에 의존한다. 슬랙웨어의 셋업 스크립트는 /etc/rc.d/rc.*에 있다.

앞으로의 진행에 앞서 유닉스 쉘 스크립트 프로그래밍에 대한 지식이 결정적인 이점이 될 것이다. 그러나 만약 여러분이 유닉스 쉘 스크립트를 짜는 것에 대한 경험이 없다면 다음의 내용이 쉘 스크립트 프로그래밍에 대한 빠른 소개가 될 것이다.

다음 쉘 스크립트를 따라해보자.

#!/bin/sh echo "hello world" #echo "good bye cruel world"

실행해보면 "hello world"이라는 스트링을 출력할 것이다. 쉘 스크립트는 반드시 첫 줄에 "#!/bin/sh"이라는 라인을 포함해야 한다. 그 후 모든 라인은 여러분이 키보드에서 타이프했던 것처럼 실행된다.

'#'으로 시작하는 라인은 쉘에서 실행되지 않기 때문에 주석처리 되었다고 한다. 대부분의 스타트업 스크립트가 데몬을 로드하는 것은 다음과 같다:

if somecondition do something fi 여러분이 원하는 것은 if 문으로 시작되는 모든 라인과 fi 문으로 끝나는 모든 라인을 주석처리하는 것이다.

만약 데몬이 어디서 로드되는 지 찾고자 한다면 데몬 이름에 대한 스타트업 스크립트를 찾는 것이다. 만약 필자가 슬랙웨어에서 inet 데몬이 어디서 로드되는 지 찾고 싶다면 다음과 같이 할 것이다.

1 cd /etc/rc.d 2 grep -n inetd rc.*

inetd

inetd는 사람들로 하여금 telnet, ftp, 그리고 여러분의 시스템에 토크 리퀘스트를 보내는 것과 같은 것을 할 수 있게 한다. 만약 여러분이 시스템을 결코 서버로 사용하지 않을 거라면 또는 이들 서비스들 중 어느것도 원격으로 억세스할 필요가 없다면 inetd를 제거할 수 있다.

lpd

lpd는 lpr 명령을 사용하여 프린터에서 파일을 프린트하기 위해 사용된다. 만약 여러분의 리눅스박스에서 프린트를 하지 않을거라면 lpd를 제거할 수 있다. 그러나 HP 데스크젯 프린터를 가지고 있고, 프린트를 하고자 한다면 필자는 ftp://sunsite.unc.edu/pub/Linux/system/Printing/dj-printcap.tar.gz 에서 구할 수 있는 dj-printcap이라는 패키지를 강추천한다.

nfsd와 mountd

이들 두 데몬은 NFS 서버를 돌리기 위해 사용된다. 만약 여러분의 리눅스 시스템을 NFS 서버로 사용하지 않을 거라면 이들 두 데몬을 제거할 수 있 다.

포트맵

포트맵 데몬은 RPC 서비스를 다루기 위해 사용된다. 만약 NFS 서버나 다 른 RPC 프로그램을 돌리지 않는다면 포트맵을 제거할 수 있다.

센드메일

센드메일은 꽤 많은 메모리를 필요로 하는 또 다른 데몬이다. 만약 여러분 의 리눅스박스를 결코 전자우편 전송을 위한 중계기로서 사용하지 않을거라면 또는 여러분의 리눅스박스에서 전자우편을 받지 않을 거라면 여러분은 센드메일을 제거할 수 있다. 만약 여러분의 리눅스박스에서 전자우편을 보낼거라면 대부분의 전자우편 클라이언트가 다른 메일 서버로부터 전자우편을 보내도록 셋업될 수 있어야 한다.

기타

시스템이 시작될 때 여러분에게 필요치 않는 여타 다른 데몬들이 있다. 제거하고 싶으면 제거하라. 반드시 돌려야 하는 데몬은 syslogd와 klogd 이다.

결론

다음은 필자의 리눅스박스 상에서 메모리를 꽉꽉(충분히) 사용하였던 과정을 나타낸다. 여러분의 리눅스박스와 함께 메모리를 아낄 수 있는 몇 가지 통찰력을 제공하고 싶은 생각이다.

행운을 빈다. 그리고 행복한 해킹을!
Todd Burgess
tburgess@uoguelph.ca
http://eddie.cis.uoguelph.ca/~tburgess