Forum Dictionary / PC / Linux 討論版 /

Linux 下創建和使用 RamDisk 的技巧

New Subject
Random
Previous
Next
|
Linux 下創建和使用 RamDisk 的技巧

Linux下創建和使用RamDisk的技巧

先介紹一下什麼是RamDisk。RamDisk實際是從記憶體中劃出一部分作為一個分區使用,換句話說,就是把記憶體一部分當做硬碟使用,你可以向裏邊存文件。

那麼為什麼要用RamDisk呢?假設有幾個文件要頻繁的使用,你如果將它們加到記憶體當中,程序運行速度會大副提高,因為記憶體的讀寫速度遠高於硬碟。況且記憶體價格低廉,一台PC有 128M 或 256M 已不是什麼新鮮事。劃出部分記憶體提高整體性能不亞於更換新的 CPU。何樂而不為呢?象 WEB 伺服器這樣的計算機,需要大量的讀取和交換特定的文件,因此,在 WEB 伺服器上建立 RamDisk 會大大提高網絡讀取速度。

1. 創建和使用 RamDisk 的方法。

使用 RamDisk 非常方便,預設安裝的 RedHat 6.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 -k /dev/ram0 可以查到你實際能用的 RamDisk 的大小(文件系統也占用一定空間):
>df -k /dev/ram0
Filesystem 1k-blocks Used Available Use% Mounted on /dev/ram0 3963 13 3746 0% /tmp/ramdisk0

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

2. 改變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

下面是使用模塊的例子:

  1. 卸載下上一章裝載的RamDisk, umount /tmp/ramdisk0.
  2. 卸載模塊rmmod rd。
  3. 裝載RamDisk模塊並設置大小為20M,insmod rd rd_size=20000。
  4. 創建文件系統,mke2fs /dev/ram0。
  5. 裝載RamDisk ,mke2fs /dev/ram0。

3. 在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,那麼你的系統性能會大大提高,而且重新啟動後垃圾消失,真是一舉兩得。

來源:Linux發現網

  • Keywords : RamDisk, httpd, 使用, mke2fs, 大小, ramdisk0, mkdir, 10000, 命令, 創建, mount, group, blocks, 格式化, 文件, 下面, rd_size, 預設, 重新啟動後, 記憶體
0 0
2009-01-10T15:34:25+0000
2009-01-10T18:37:30+0000


  • Now, you can post comments by Facebook Account when your Yampiz account was logout or unvariable. whatever, we suggest to post comment by Yampiz Account to get more bounds to join new events of Heyxu
Comment
 
Verify