Ramdisk는 주로 Embedded system에서 사용되기도 하고, 다음 부팅때까지 반드시 저장할 필요 없는 데이터를 저장하는데 사용하여 시스템의 성능을 높일때 사용하기도 한다. (/tmp 디렉토리 같은 경우)
FreeBSD같은 경우는 mdconfig라는 시스템 유틸리티를 사용하여 Ramdisk를 생성한다. 여기에 들어가는 옵션은 여러가지가 있고, 가상의 메모리 디바이스에 대해 상당히 구체적으로 설정이 가능하다. (이를테면 섹터의 크기, 트랙당 섹터의 갯수, 헤더와 실린더의 갯수 등등.)
기본적으로 FreeBSD는 /var 나 /tmp의 하위에 디렉토리 생성이 되지 않는 경우 /var 나 /tmp에 자동으로 Memory Device를 생성하여 mount 하는 기능(Ramdisk 로써)을 가지고 있다. 이것을 잠깐 살펴보자면, 기본적으로 FreeBSD 6.2의 /etc/defaults/rc.conf 는 이런 설정을 기본적으로 가지고 있다.
/etc/defaults/rc.conf: line 615 tmpmfs="AUTO" # Set to YES to always create an mfs /tmp, NO to never tmpsize="20m" # Size of mfs /tmp if created tmpmfs_flags="-S -M" # Extra mdmfs options for the mfs /tmp varmfs="AUTO" # Set to YES to always create an mfs /var, NO to never varsize="32m" # Size of mfs /var if created varmfs_flags="-S -M" # Extra mount options for the mfs /var
여기에 보면 tmpfms varmfs 뒤의 옵션에 의해 Memory Device를 사용할지 사용하지 않을지에 대한 결정을 하게 되고, 실제로 /etc/rc.d/var 나 tmp 의 스크립트 상에서 Memory Device의 mount가 구현된다. 여기를 잠깐 살펴보자면,
/etc/rc.d/tmp: line 45 mount_md ${tmpsize} /tmp "${tmpmfs_flags}"
스크립트 함수인 mount_md를 호출하게 되고, 이 함수는 /etc/rc.subr 스크립트에 정의되어 있다.
/etc/rc.subr: line 1325 # Provide a function for normalizing the mounting of memory # filesystems. This should allow the rest of the code here to remain # as close as possible between 5-current and 4-stable. # $1 = size # $2 = mount point # $3 = (optional) extra mdmfs flags mount_md() { if [ -n "$3" ]; then flags="$3" fi /sbin/mdmfs $flags -s $1 md $2 }
그러니까 mdmfs라는 시스템 유틸리티를 사용하여 memory device를 생성하고 mount 하게 되는데, 이는 실제로는 mdconfig를 사용하여 memory device를 생성하고, newfs로 File System을 초기화 한 후에, mount를 사용하여 mount를 한 것과 동일한 동작이 된다.
이런식으로 입력된다. ramdisk_size 다음에는 1024 byte 블럭 단위로 숫자를 입력하면 되는데, 위의 예제와 같이 입력된다면 16 MB 사이즈의 램디스크를 정의한 것이 된다. 이후의 동작은 다른 디스크의 사용방법과 동일하다. Ramdisk를 포멧하고 이를 mount 하게 되면 디스크처럼 사용할 수 있다.