Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
[Photo of the Author]
글쓴이: Mark Nielsen

글쓴이 소개:

글쓴이(홈페이지)는 The Computer Underground, Inc.에서 파일담당자로 800linux.com에서 전문컨설턴트로 일하고 있습니다. 여가시간에는 리눅스가젯이나 linux.com에 실릴 글을 적습니다. 이 문서는 Nedit와 ispell로 작성되었습니다.

Content:

리눅스에서 ramdisk 사용하기

[Illustration]

요약:

이 글은 램을 가상 하드디스크처럼 사용하는 방법에 대해 설명하고 있습니다. 만약 글 내용에 변경된 점이 있다면 아래 주소를 통해 보실 수 있습니다.: http://www.tcu-inc.com/mark/articles/Ramdisk.html



 

원래 글을 출판한 다음에 변경된 사항

이 글을 http://www.linuxgazette.com/issue44/nielsen.html에 처음으로 소개되었습니다.
그 이후 몇가지 변경사항과 추가사항이 들어있습니다.
  1. Roland Smith씨가 이렇게 질문했습니다.
    "내가아는한 리눅스는 프로그램에 의해 사용되지 않는 모든 메모리를
    통일된 버퍼캐쉬로 사용한다. 그렇기 때문에 만약 충분한 램을 가지고 있다면
    매우 자주 사용되는 파일들은 램에 캐쉬되어 사용되어질 것이다.
    
    그럼 왜 램디스크를 사용해야하는가? 정말 속도향상이 이루어질 수 있는가?"
    

    이 질문에 대하여 나는 아마도 그렇다. 그렇게 작동한다고 말했을 것입니다. 만약 여러분이 어떤 파일을 늘 사용한다면 그렇습니다. 제가 800linux.com에서 일할때 램디스크를 사용한 결과 속도가 매우 향상되었습니다. 그가 의문을 가지는부분에 대한 대답이라면 아마 램디스크에 있는 어떤 파일의 우선순위를 최고로 해주기 때문일 것입니다. 물론 재부팅될때마다 그 데이터가 사라져버리는 "/tmp"디렉토리를 램디스크로 사용하는 방법등은 좋은 방법이라 생각됩니다!
 

RamDisk란?

안녕하세요! 이 글은 레드햇 6.0 시스템에서 RAMDISK를 어떻게 설정하는지에 대한 간략한 기사입니다. 아마 다른 배포판에서도 비슷한 방법으로 될 것입니다.

먼저 RamDisk가 무엇인지 알아야겠지요? RamDisk란 메모리의 일부분을 여러분이 사용하고자 하는 파티션으로 설정하는 것입니다. 다른말로 하자면 여러분의 메모리를 하드디스크드라이브인것처럼 해서 메모리에 파일을 저장할 수 있다는 것을 의미합니다. 왜 RamDisk를 사용하느냐구요? 음...여러분이 어떤 파일을 계속해서 사용하고 싶을 경우 그 파일을 메모리상에 두고 사용하는 것이 컴퓨터의 성능을 향상시킵니다. 하드디스크보다 메모리의 속도가 빠르기 때문이죠. 많은 자료를 처리하는 웹서버와 같은 경우 이러한 방법으로 속도를 향상시킵니다. 또는 여러분이 제정신이 아니라서 1기가의 메모리와 500메가의 하드디스크가 장착된 PII 500Mhz시스템을 가지고 있다면 여러분은 이 방법을 사용해서 하드드라이브의 공간을 절약할 수도 있습니다. 만약 이렇다면 디스크드라이브가 없는 컴퓨터를 원하는 것이나 별반 차이가 없기 때문에 완전히 제정신이 아니라고 할 수는 없겠지요.

아래 자료들을 읽어보면 많은 도움이 될 것입니다.

  1. http://metalab.unc.edu/LDP/HOWTO/Kernel-HOWTO.html
  2. http://metalab.unc.edu/LDP/HOWTO/mini/LILO.html
  3. /usr/src/linux/Documentation/ramdisk.txt
 

RamDisk 사용법

음, ramdisk를 사용하는 방법은 매우 쉽습니다. 일단 레드햇 6.0 배포판은 기본적으로 램디스크를 지원하도록 설치됩니다. 여러분이 해주어야 할 일은 단지 램디스크를 포맷하고 디렉토리로 마운트 시켜주면 됩니다. 사용하고 있는 램디스크를 모두 알아내고자 한다면 "ls -al /dev/ram*" 명령을 실행해 보시기 바랍니다. 이 명령은 여러분이 연결하여 사용할 수 있도록 미리 설정된 정보를 알려줍니다. 이러한 램디스크는 실제로 몇가지작업(예를 들어 포맷해 준다든지)을 해주지 않으면 실제 메모리 공간을 차지하고 있지 않습니다. 램디스크를 어떻게 사용하는지 매우 간단한 예를 살펴보겠습니다.
mkdir -p /tmp/ramdisk0
mkfs -t ext2 /dev/ram0
mount /dev/ram0 /tmp/ramdisk0
이 세줄의 명령은 램디스크를 다룰 디렉토리를 생성하고 램디스크를 포맷한 다음(기본적으로 4메가로) 그리고 램 디스크를 "/tmp/ramdisk0"디렉토리로 마운트시키는 것입니다. 이제 여러분은 마치 한 파티션에 있는 디렉토리처럼 사용하시면 됩니다! 다른 디렉토리나 파티션처럼 동작시켜보시기 바랍니다.

감잡았습니까? 여러분의 컴퓨터가 재부팅되면 모든 것이 사라집니다. 따라서 중요한 데이터라든지 다른곳에 복사되어 있지 않은 데이터를 램디스크에 두지 마시기 바랍니다. 만약 디렉토리에 변화가 생겼는데 그 변화를 저장하고 싶다면 반드시 백업을 해 두시기 바랍니다.  

램디스크의 크기 바꾸기

음..램디스크의 크기를 어떻게 바꿀까요? 개인적으로 알아낸 방법인데 두가지방법이 있습니다. 컴퓨터를 부팅한 다음 어떤 방법을 사용하든지간에 램디스크의 크기를 바꿀 수 없습니다.

힘든 방법부터 살펴보죠. 먼저 아래 파일을 살펴보세요:
   /usr/src/linux/drivers/block/rd.c
then edit it, change this line
   int rd_size = 4096; /* 램디스크의 크기 */
이 숫자에 여러분이 원하는 램디스크의 크기를 킬로바이트단위로 적어주세요. 그 다음 커널을 다시 컴파일하고, 커널을 설치한 다음 이 커널을 설치하고 다시 컴퓨터를 켜주시면 됩니다.

음 쉬운 방법은 lilo.conf파일에 다음 줄을 추가하는 것입니다.:
   ramdisk=10000
이렇게 추가한 다음 "lilo"명령을 실행시키고 다시 컴퓨터를 껐다켜면 기본적으로 10메가의 램디스크가 만들어집니다. 아래는 제가 쓰고 있는 /etc/lilo.conf파일의 예입니다.

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.2.5-15
	label=linux
	root=/dev/hda2
	read-only
	ramdisk=10000
실제로 적용해본 결과 저는 약 9메가 조금 넘는 램디스크를 이용할 수 있었습니다.  

웹서버를 위한 램디스크 사용법 예제

그럼 이제 램디스크를 이용하여 웹서버를 이용하는 방법을 예로 설명하겠습니다. 먼저 레드햇 6.0배포판에 들어 있는 아파치웹서버가 설치되어 있다고 가정을 하겠습니다. 이 아파치웹서버는 cgi스크립트, HTML문서, 아이콘등으로 구성되어 있는데 전체크기는 9메가가 안됩니다.
먼저 웹서버의 홈디렉토리를 다른 곳으로 복사를 합니다. 그 다음 램디스크를 웹서버의 홈디렉토리로 마운트 시킵니다.
mv /home/httpd/ /home/httpd_real
mkdir /home/httpd
mkdir /home/httpd/cgi-bin
mkdir /home/httpd/html
mkdir /home/httpd/icons
그 다음 /etc/rc.d/rc.local파일에 아래 명령들을 추가합니다.

### 램디스크의 파티션을 만듭니다.
/sbin/mkfs -t ext2 /dev/ram0
/sbin/mkfs -t ext2 /dev/ram1
/sbin/mkfs -t ext2 /dev/ram2

### 적절한 디렉토리로 램디스크를 마운트 시킵니다.

mount /dev/ram0 /home/httpd/cgi-bin
mount /dev/ram1 /home/httpd/icons
mount /dev/ram2 /home/httpd/html

### 실제 디렉토리에 있는 내용을 램디스크로 복사합니다.
tar -C /home/httpd_real -c . | tar -C /home/httpd -x

#### 웹서버를 다시 시작합니다.
/etc/rc.d/init.d/httpd restart	

rc.local을 다시 실행시키면 바로 작동하겠지만 저는 컴퓨터를 새로 껐다켰습니다.:
/etc/rc.d/rc.local
 

몇마디 더

  1. 반드시 한가지사항은 잊어버리지 맙시다. 만약 데이터가 변경되었거나 필요할 경우 반드시!반드시 백업하셔야 합니다. 컴퓨터가 재부팅되면 모든 데이터의 변화는 사라져버립니다. cron을 이용하면 그런 일을 할 수 있겠지요. 항상 데이터의 변화를 기록하고 싶다면 매 5분마다 파일이 변경되었는지를 확인한 다음 백업을 하면 되겠지요. 또 한가지 방법은 램디스크가 아니라 하드디스크상의 실제 디렉토리로 복사를 해버리면 됩니다. 두번쨰 방법이 더 안전하긴 하지요.
  2. 또 한가지 알아두어야 할 점은 몇몇 IBM 호환시스템의 메인보드는 256메가 이하의 케시메모리만을 허용할 수도 있습니다.(어떤 경우는 128메가인 경우도 있죠.) 혹시 여러분이 램을 쌓아두고 계시다면 :) 이 점을 유의하세요.
  3. 램디스크 사용법중 유용한 한가지는 약 1기가의 메모리를 가진 컴퓨터에서 "/tmp"디렉토리용으로 램디스크를 약 256메가 정도 사용하는 것입니다. "/tmp"디렉토리를 이용하는 경우라면 아마 속도가 향상될 경우입니다. 또한 /tmp디렉토리는 대부분 재부팅되면 쓸모가 없어지기때문에 아주 유용하게 쓸수 있는 경우입니다.
  4. 먼저 저는 램디스크의 크기를 변경하고자 lilo.conf를 사용했습니다. 그런데 제대로 되지 않더군요. Rob Funk씨께서 왜 램디스크의 크기를 바꾸기 위해 커널을 다시 컴파일하는 등의 힘든 작업이 필요하냐고 물어오셨을때 다시 한번 해보았는데 제대로 되더군요. 맨 처음에 무엇을 잘못한 것인지 모르겠습니다. 여하튼 Rob씨 고마워요!

Webpages maintained by the LinuxFocus Editor team
© Mark Nielsen
LinuxFocus 1999

1999-10-26, generated by lfparser version 0.8