Linux下創建和使用RamDisk的技巧

轉載原文:http://www.yesky.com/498/2498.shtml

本文以RedHat6.0爲例,講述Linux下使用RamDisk的方法和技巧。其它Linux發行套件的使用方法與之類似。  

  先介紹一下什麼是RamDisk。RamDisk實際是從內存中劃出一部分作爲一個分區使用,換句話說,就是把內存一部分當做硬盤使用,你可以向裏邊存文件。那麼爲什麼要用RamDisk呢?假設有幾個文件要頻繁的使用,你如果將它們加到內存當中,程序運行速度會大副提高,因爲內存的讀寫速度遠高於硬盤。況且內存價格低廉,一臺PC有128M或256M已不是什麼新鮮事。劃出部分內存提高整體性能不亞於更換新的CPU。何樂而不爲呢?象WEB服務器這樣的計算機,需要大量的讀取和交換特定的文件,因此,在WEB服務器上建立RamDisk會大大提高網絡讀取速度。

創建和使用RamDisk的方法。

使用RamDisk非常方便,缺省安裝的RedHat6.0就支持RamDisk。你所要作的就是格式化RamDisk並把它裝載到一個目錄下。要想查看RamDisk的數目,用命令"ls   -al /dev/ram*",它會給出所有當前情況下可用的RamDisk。這些RamDisk只有使用的時候才佔用內存。下面是使用RamDisk的幾個命令:

#創建裝載點

mkdir /tmp/ramdisk0

# 創建一個文件系統

mke2fs /dev/ram0

#裝載ramdisk:

mount /dev/ram0 /tmp/ramdisk0

  這三個命令將會爲RamDisk創建一個目錄、格式化RamDisk(創建文件系統)並把RamDisk裝載到目錄"/tmp/ramdisk0"中。現在,你就可以把它作爲一個磁盤分區使用了。

  如果格式化RamDisk失敗,可能是因爲你沒有把對RamDisk的支持編譯進內核中去。內核中對RamDisk的配置選項是   CONFIG_BLK_DEV_RAM。

  缺省的RamDisk爲4M。使用mke2fs命令可以查知你所獲RamDisk的大小。命令mke2fs /dev/ram0會產生以下信息:

mke2fs 1.14, 9-Jan-1999 for EXT2 FS 0.5b, 95/08/09

Linux ext2 filesystem format

Filesystem label=

1024 inodes, 4096 blocks

204 blocks (4.98%) reserved for the super user

First data block=1

Block size=1024 (log=0)

Fragment size=1024 (log=0)

1 block group

8192 blocks per group, 8192 fragments per group

1024 inodes per group

使用命令df    /dev/ram0可以查到你實際能用的RamDisk的大小(文件系統也佔用一定空間):

>df -k /dev/ram0

Filesystem 1k-blocks Used Available Use% Mounted on

/dev/ram0 3963 13 3746 0% /tmp/ramdisk0

不過要記住,RamDisk中的數據會在機器重新啓動後消失,因此應把其中有用的數據及時備份到硬盤中。

改變RamDisk大小的技巧?

  爲使用RamDisk,你或者要將對RamDisk的支持編譯到內核中去,或者把它編譯爲一個可裝載模塊。編譯爲一個可裝載模塊有一個好處,就是可以在裝載時任意指定RamDisk的大小。

  把下面這一行加到你的lilo.conf 文件中去:

ramdisk_size=10000 (或對老內核寫作ramdisk=10000)

  這樣你鍵入LILO命令並重新啓動後,缺省的RamDisk的大小將爲10M,下面是我的/etc/lilo.conf文件:

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

prompt

timeout=50

image=/boot/vmlinuz

label=linux

root=/dev/hda2

read-only

ramdisk_size=10000

實際上,我只獲得了9M多一點的RamDisk,其餘被文件系統佔用。

  當你編譯爲一個可裝載模塊後,你可以在模塊裝載時決定RamDisk的大小,這可以通過 /etc/conf中的選項設置來設定。或者通過作爲ismod命令行參數來實現。

options rd rd_size=10000

insmod rd rd_size=10000

下面是使用模塊的例子:

卸載下上一章裝載的RamDisk, umount /tmp/ramdisk0.

卸載模塊rmmod rd。

裝載RamDisk模塊並設置大小爲20M,insmod rd rd_size=20000。

創建文件系統,mke2fs /dev/ram0。

裝載RamDisk ,mke2fs /dev/ram0。

在WEB服務器上使用RamDisk的實例?

  本例介紹在WEB服務器上使用3個RamDisk的方法。所用的WEB服務器是RedHat 6.0 自帶的Apache。

  首先,把WEB根目錄中所有文件移到其它目錄中,然後創建RamDisk的裝載點:

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/init.d/httpd.init文件中去:

### 創建3個RamDisk

/sbin/mkfs -t ext2 /dev/ram0

/sbin/mkfs -t ext2 /dev/ram1

/sbin/mkfs -t ext2 /dev/ram2

### 加載RamDisk到開始創建的目錄中

mount /dev/ram0 /home/httpd/cgi-bin

mount /dev/ram1 /home/httpd/icons

mount /dev/ram2 /home/httpd/html

### 拷貝真正的目錄中的所用文件到RamDisk 中

tar -C /home/httpd_real -c . | tar -C /home/httpd -x

  最後,重新啓動WEB服務器即可生效,試一下速度是否有所改變。

後語:1. 一定要記住保存RamDisk中有用的東西,否則,重新啓動後將化爲烏有。你可以用cron設定一個計劃,每隔10分鐘掃描一下RamDisk中的文件是否發生變化,如有,拷貝到硬盤中,這會比較安全。

2.最酷的應用是如果你有1G的內存,劃出256M來作爲暫存區/tmp,如果很多程序用到/tmp,那麼你的系統性能會大大提高,而且重新啓動後垃圾消失,真是一舉兩得。

發佈了22 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章