电脑技术学习

Ramdisk:在linux下如何使用 RAM 作为虚拟硬盘?

dn001
RamDisk简介
--------------------------------------------------------------------------------

这是一个关于在RedHat;6.0系统上如何建立一个RamDisk的文章。对于其他的发行版本这个过程也应该是相识的。;

什么是RamDisk?;一个A;RamDisk;是你用作一个硬盘分区的一部分内存空间。或者换句话说,你是把内存假设为一个硬盘驱动器,并且你在它的上面存储文件。为什么我们要使用;RamDisk?;好的,如果你知道通常将要使用的文件是被调入内存以提高计算机的性能,因为内存的存储速度要快于硬盘。;这样类似于web服务器上的数据就可以用这个方法提高访问速度。或是有点愚蠢的,假如你有一台PII550计算机并且有1G的内存空间和500M的硬盘,你也可以用这种方法来增加你的你的硬盘空间。;或者,你也可以做一个无盘的机器,,没有比这个更为疯狂的了。;

以下是一些可以得到帮助的资源。;

http://metalab.unc.edu/LDP/HOWTO/Kernel-HOWTO.html;
http://metalab.unc.edu/LDP/HOWTO/mini/LILO.html;
--------------------------------------------------------------------------------
如何使用RamDisk
--------------------------------------------------------------------------------

OK,使用ramdisk是一件很简单的事。首先,RedHat6.0的默认安装就支持ramdisk。你所需要做的就是格式化一个ramdisk并且把他家在到一个目录上。列出所有可用的ramdisk用“ls;-al;/dev/ram*”。这就会列出你现有可用的ramdisk。这些ramdisk并不抢夺内存,除非进行格式化的一类操作。这里有一个使用ramdisk的例子。

#;create;a;mount;point:
mkdir;/tmp/ramdisk0
#;create;a;filesystem:
mke2fs;/dev/ram0
#;mount;the;ramdisk:
mount;/dev/ram0;/tmp/ramdisk0

这三个命令将为ramdisk创建一个目录,格式化ramdisk(创建文件系统),并且加载这个ramdisk到"/tmp/ramdisk0".;现在你可以将这个目录看成一个虚拟的分区。使用它就象使用其它的目录一样。
如果对ramdisk的格式化失败,那就是你的内核不支持ramdisk。其内核配置选项是;CONFIG_BLK_DEV_RAM;.;

ramdisk的默认大小是;4Mb=4096;blocks.;在你进行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;你实际用了多少空间:


>df;-k;/dev/ram0
Filesystem;;1k-blocks;;Used;Available;Use%;Mounted;on
/dev/ram03963;;;;13;;;;;;3746;;;0%;/tmp/ramdisk0

那么麻烦是什么呢?在系统重新启动的时候,将刷新这个区域。不要将任何没有拷贝的数据放在这个区域。如果你对这个目录进行了修改,并且需要保留这些修改,采取一些办法进行备份。

--------------------------------------------------------------------------------
改变;ramdisks;的大小
--------------------------------------------------------------------------------

要想使用ramdisk你必须或是得到内核的支持或是以模块的形式将他加载到系统中。其中内核的配置选项是;CONFIG_BLK_DEV_RAM;.;把ramdisk编译成一个可加载的模块的好处是你可以在加载是重新确定ramdisk的大小。


Okay,;第一个办法。在lilo.conf文件中加入这一行:
ramdisk_size=10000;(or;ramdisk=10000;for;old;kernels);
这样在你使用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.modules;的选项设置来做到。;

options;rd;rd_size=10000

或是在命令行中指定参数给ismod:

insmod;rd;rd_size=10000

以下是介绍如何使用这样的模块的例子:;

卸载ramdisk,umount;/tmp/ramdisk0;.;
卸载模块(再上一节所提到的过程中自动加载),;rmmod;rd;
加载ramdisk模块并且把它的大校设为20M,insmod;rd;rd_size=20000;
创建一个文件系统,;mke2fs;/dev/ram0;
加载ramdisk,;mount;/dev/ram0;/tmp/ramdisk0;

--------------------------------------------------------------------------------
使用;RamDisk;做;webserver例子.
--------------------------------------------------------------------------------

Okay,;这是一个用3个ramdisk做webserver的例子。让我们设想你在;RedHat;6.0;上默认安装的;Apache;的cgi-scripts,;html,;和;icons都不超过9M。这就是如何实现这一点。
首先,利用命令将webserver的跟目录移到另外一个地方。并且加载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;(或者是系统启动httpd的地方):;


###;Make;the;ramdisk;partitions
/sbin/mkfs;-t;ext2;/dev/ram0
/sbin/mkfs;-t;ext2;/dev/ram1
/sbin/mkfs;-t;ext2;/dev/ram2

###;Mount;the;ramdisks;to;their;appropriate;places

mount;/dev/ram0;/home/httpd/cgi-bin
mount;/dev/ram1;/home/httpd/icons
mount;/dev/ram2;/home/httpd/html

###;Copying;real;directory;to;ramdisks;(the
###;data;on;the;ramdisks;is;lost;after;a;reboot)
tar;-C;/home/httpd_real;-c;.;|;tar;-C;/home/httpd;-x

###;After;this;you;can;start;the;web-server.

--------------------------------------------------------------------------------
注释
--------------------------------------------------------------------------------
请记住一件事如果你改变了数据备份你的数据。在系统重新启动时,所有的变化将失去。
应该设置一个cron进程。使它每十分钟时检查一下文件是否有变动,并且备份这些改动。另一种可能是你对真实的目录进行了改动,所以要拷贝这些变动到ramdisk。这样做也许更安全。;
一个非常酷的做法是用一个有1G内存的计算机并且将其中的256M作为"/tmp".;如果你有很多的进程使用"/tmp",这样做会提高你的系统速度。同时,/tmp目录中的东西将在系统重新启动的时候被删除,这可是一件好事。;
Linux使用所有没有被程序使用的内存作为一个缓存,但我的经历告诉我ramdisk将会更多的提高速度。;

--------------------------------------------------------------------------------

标签: linux