티스토리 뷰

Application/Linux

솔라리스에서 램디스크 사용

알 수 없는 사용자 2008. 4. 23. 15:05

출처 : http://sdnkorea.com/blog/549

 

이 글에서는 솔라리스에서의 /tmp 디렉토리와 램 디스크 에 대해 알아보도록 하겠습니다.

솔라리스에서 /tmp 디렉토리는 기본적으로 메모리 기반 파일 시스템으로 swap 에 마운트 되어 있습니다.

# df -k /tmp
Filesystem kbytes used avail capacity Mounted on
swap 1961928 504 1961424 1% /tmp

이러한 접근은 몇가지 장점이 있습니다.


  • /tmp 에 대한 접근이 빠름
  • 솔라리스가 디스크를 read/write 모드로 마운트 할 수 없거나 읽기전용 NFS 에 의해부팅 되었을때에도 언제나 쓰기 가능한 디렉토리가 존재 함으로써 매우 유용함  
  • 재부팅 전 혹은 후에 /tmp 디렉토리를 정리할 필요가 없음
  • /tmp 를 위한 파일시스템을 생성할 필요가 없이 - 그냥 마운트 하고 사용하면 됨

이와는 반대로 /tmp 사용시에 주의해야할 사항들도 있습니다.
왜냐하면 /tmp 는 swap 에 마운트 되므로 재부팅 후에도 유지해야 하는 파일을 위해서는 사용하면 안됩니다. - 임시 파일들은
디스크 기반 디렉토리 혹은 /var/tmp 디렉토리를 사용하시기 바랍니다.

가장 중요한 한가지는
모든 유저는 /tmp 에 파일을 쓸 수 있다는 것입니다. 그리고 기본으로 /tmp 는 사이즈 제한이 없이 마운트 됩니다. 즉 모든 유저가 머신의 전체 가상 메모리를(물리 메모리와 스왑) 단지 /tmp 를 쓰레기 값으로 채움으로써 사용할 수 있다는 것입니다.

이러한 상황을 방지하기 위해 여러분은 /tmp 를 상위 사이즈 제한을 지정해서 사용해야 합니다. 예를 들어 아래와 같은 /etc/vfstab 라인을

swap    -       /tmp    tmpfs   -       yes     -

아래와 같이 변경합니다

swap    -       /tmp    tmpfs   -       yes     size=1g

(1g 는 여러분에 머신에 맞게 조절하시기 바랍니다)
한가지 기억해야할 것은 솔라리스가 운용중일때에는 /tmp 사이즈를 바꿀 수 없다는 것입니다.

# lockfs /tmp
/tmp: Inappropriate ioctl for device

# mount -o remount,size=512m swap /tmp
mount: Operation not supported

그러므로 변경사항을 적용하기 위해서는 반드시 머신을 재부팅 해야 합니다.

tmpfs 는 "일반적인" 솔라리스에서 일반적인 파일시스템이기 때문에 여러분은 항상 메모리 기반 파일 시스템을 추가할 수 있습니다. 예를 들어 새로운 tmpfs 를 즉석에서 생성하려면

[Mon Mar 17 21:53:19 root@sol9 /]
# mkdir /mytmp

[Mon Mar 17 22:05:44 root@sol9 /]
# mount -o size=100m -F tmpfs swap /mytmp

[Mon Mar 17 22:06:04 root@sol9 /]
# df -k /mytmp
Filesystem kbytes used avail capacity Mounted on
swap 102400 0 102400 0% /mytmp

이 새로운 파일시스템을 시스템이 부팅될때 마다 생성해 주려면 단순히 /etc/vfstab 에 새로운 라인을 추가해주면 됩니다.

swap    -       /mytmp    tmpfs   -       yes     size=1g

tmpfs 파일시스템에는 몇가지 제약사항이 있습니다.


  • 실질적으로 /dev/dsk/c#t#d#s# 같은 파일 기반의 메모리 디바이스 혹은 lofi 마운트를 위한 /dev/lofi/# 같은 디바이스는 존재하지 않습니다. 특히 메모리 기반 파일 시스템은 raw 디바이스가 존재하지 않습니다.
  • tmpfs 에는 몇가지 제약사항이 존재합니다.(tmpfs(7FS) 를 참고하시기 바랍니다)
  • 그리고 tmpfs 파일시스템은 오직 메모리 기반 파일 시스템에서만 사용 가능합니다. 예를 들어 ufs 혹은 vxfs 같은 종류의 파일 시스템으로는 사용할 수 없습니다.

그러나 솔라리스는 진짜 운영체제 이기 때문에 이러한 문제에 대한 솔루션도 존재 합니다.

메모리 기반 파일 시스템을 위해 tmpfs 를 사용하는 대신 ramdiskadm 을 사용합니다. ramdiskadm 는 솔라리스 9 버전 부터 솔라리스에 포함되어져 있습니다. ramdiskadm 는 SUNWcsu 패키지의 일부이고 그러므로 모든 솔라리스 머신에 (x86 과 SPARC 모두) 설치되어 있을 것입니다.

ramdiskadm 는 다른 디스크 디바이스를 만들때 사용되는 유틸리티 처럼 진짜 램디스크 디바이스를 만들때 사용 됩니다.
예를 들어

# create the ramdisk
#
[Mon Mar 17 22:15:03 root@sol9 /]
# ramdiskadm -a mydisk 40m
/dev/ramdisk/mydisk

# check the result
#
[Mon Mar 17 22:15:21 root@sol9 /]
# ls -l /dev/ramdisk/mydisk
lrwxrwxrwx 1 root root 40 Mar 17 22:15 /dev/ramdisk/mydisk -> ../../devices/pseudo/ramdisk@1024:mydisk

[Mon Mar 17 22:16:04 root@sol9 /]
# ls -l /dev/rramdisk/mydisk
lrwxrwxrwx 1 root root 44 Mar 17 22:15 /dev/rramdisk/mydisk -> ../../devices/pseudo/ramdisk@1024:mydisk,raw

# check the fstype
#
[Mon Mar 17 22:16:07 root@sol9 /]
# fstyp /dev/rramdisk/mydisk
unknown_fstyp (no matches)

# create a filesystem on the ramdisk
#
[Mon Mar 17 22:16:22 root@sol9 /]
# newfs /dev/rramdisk/mydisk
/dev/rramdisk/mydisk: Unable to find Media type. Proceeding with system determined parameters.
newfs: construct a new file system /dev/rramdisk/mydisk: (y/n)? y
/dev/rramdisk/mydisk: 81872 sectors in 136 cylinders of 1 tracks, 602 sectors
40.0MB in 9 cyl groups (16 c/g, 4.70MB/g, 2240 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
32, 9664, 19296, 28928, 38560, 48192, 57824, 67456, 77088,

# mount the ramdisk
#
[Mon Mar 17 22:16:44 root@sol9 /]
# mkdir /myramdisk

[Mon Mar 17 22:16:51 root@sol9 /]
# mount /dev/ramdisk/mydisk /myramdisk

[Mon Mar 17 22:17:01 root@sol9 /]
# df -k /myramdisk
Filesystem kbytes used avail capacity Mounted on
/dev/ramdisk/mydisk 38255 1041 33389 4% /myramdisk

[Mon Mar 17 22:17:06 root@sol9 /]

이러한 램디스크들은 재부팅 후에는 사라짐을 기억하시기 바랍니다. 만약 계속해서 유지하고자 한다면 여러분은 init 스크립트나 SMF 서비스를 이용해서 머신이 재부팅 될때마다 새로 생성해야 합니다.

ramdiskadm 에 대한 좀 더 자세한 정보는 ramdiskadm(1m) 혹은 ramdisk(7d) 의 멘페이지를 참고하시기 바랍니다; ramdiskadm 의 멘페이지에는 루트가 아닌 사용자들이 램디스크를 생성하고 삭제할 수 있도록 하는 방법을 제공하고 ramdisk 의 멘페이지는 램디스크에서 얼마 만큼의 메모리를 사용할 수 있는지 설명해 줍니다.

그리고 여러분은 SVM 미러 용도로 ramdiskadm 으로 만든 램디스크를 사용할 수 있습니다. 이것은 어플리케이션이 주로 디스크에서 읽기 작업을 할 경우에 매우 유용합니다; 이러한 경우 여러분은 미러의 읽기 정책을 램디스크에서 먼저 읽어 오는 걸로 변경해줘야 합니다.

이와 관련된 설명은 다른 문서에서 설명합니다.
이 글의 영문 원본은
Talking about RAM disks in the Solaris OS
에서 보실 수 있습니다.