이 글에서는 솔라리스에서의 /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
에서 보실 수 있습니다.
"관리자코너" 카테고리의 다른 글
- 메타 데이터베이스 삭제 사고 시 솔라리스 OS의 시스템 복구 (댓글 0개 / 트랙백 0개) 2008/07/10
- 멀티스레드 시스템의 리소스를 최대한 사용하기 위한 기본 예약 클래스 설정 (댓글 0개 / 트랙백 0개) 2008/07/15
- DTrace 를 이용하여 Defunct 프로세스 문제 해결하기 (댓글 0개 / 트랙백 0개) 2008/07/28
- 솔라리스 볼륨 메니저를 이용하여 솔라리스9, 10 에서 루트를 미러링 하는 방법 (댓글 1개 / 트랙백 0개) 2008/09/20
- UFS Dump 의 안전한 관리 방법 (댓글 14개 / 트랙백 1개) 2007/08/20
- 솔라리스9 혹은 그 이상 버전을 운용하는 시스템상의 하드 디스크로 부터 WAN 부트이용하기 (댓글 0개 / 트랙백 0개) 2007/12/14
- rsync 와 sudo 를 이용한 원격 업데이트 (댓글 0개 / 트랙백 0개) 2008/03/11
- 윈도우 혹은 리눅스에서 솔라리스 파티션에 접근하기 (댓글 0개 / 트랙백 0개) 2008/05/19
- 솔라리스 라이브 업그레이드를 이용하여 논-글로벌 존의 솔라리스10을 업그레이드 하는 방법 (댓글 0개 / 트랙백 0개) 2008/01/16
- 썬 디바이스 검출 툴 - 버젼 1.0 (댓글 3개 / 트랙백 0개) 2007/01/23
댓글을 달아 주세요