RamDisk简介
本文首先介绍了如何在rh系统上创建一个RamDisk然后介绍了如何通过将数据库内容存放到RamDisk中的方法来加速对数据库的访问
什么是RamDisk?一个RamDisk是分配作为一个分区的内存块或者说将内存模拟为硬盘空间从而可以想对待硬盘空间一样在其上保存文件为什么会要使用RamDisk呢?主要是为了提高速度若事先知道特定的文件将被高频率访问通过将文件存放在内存里就可以提高性能例如web服务器就可以采用这种方式来加快访问速度下面是一些可能会对加深对RamDisk的理解的资源链接
/usr/src/linux/Documentation/RamDisktxt
如何使用RamDisk
使用RamDisk是非常简单的首先RH的缺省安装本身就有对RamDisk的支持你所要作的就是格式化一个RamDisk然后加载(mount)其到目录结构下即可通过命令ls al /dev/ram*可以查看系统可以利用的RamDisk的数目这些RamDisk并不起作用除非设置以后下面是一个非常简单的使用RamDisk的例子
# create a mount point:
mkdir /tmp/RamDisk
# create a filesystem:
mkefs /dev/ram
# mount the RamDisk:
mount /dev/ram /tmp/RamDisk
这三个命令分别为RamDisk创建一个目录格式化它(创建文件系统)最后加载该文件系统到/tmp/RamDisk上下面就可以对待该目录为一个分区使用若格式化失败则说明你的系统内核没有对RamDisk的支持则需要重新编译内核RamDisk支持的内核开关是CONFIG_BLK_DEV_RAM
缺省的RamDisk的大小为 Mb=块在创建randisk文件系统时可以得到RamDisk大小的信息
mkefs Jan for EXT FS b //
Linux ext filesystem format
Filesystem label=
inodes blocks
blocks (%) reserved for the super user
First data block=
Block size= (log=)
Fragment size= (log=)
block group
blocks per group fragments per group
inodes per group
运行命令df k /dev/ram可以查看可以真正使用的RamDisk的空间大小(因为创建文件系统时会占用一些空间)
>df k /dev/ram
Filesystem kblocks Used Available Use% Mounted on
/dev/ram % /tmp/RamDisk
需要注意的是当你的系统重新启动以后RamDisk中的数据会丢失所以如果RamDisk中的数据被修改了必须将其备份到别的目录下
改变RamDisk的大小
为了使用RamDisk可以通过将对RamDisk的支持编译进入内核中或者编译为模块的方式在需要时将其加载编译为模块的方式可以在加载模块时动态决定RamDisk的大小
当RamDisk被编译进入内核改变RamDisk的大小的方法为在nf中田加内容 RamDisk_size= (or RamDisk= for old kernels)然后运行lilo命令重新启动机器这样下次加载RamDisk以后大小就变为M
boot=/dev/hda
map=/boot/map
install=/boot/bootb
prompt
timeout=
image=/boot/vmlinuz
label=linux
root=/dev/hda
readonly
RamDisk_size=
当编译RamDisk支持为模块形式可以在加载时决定RamDisk的大小可以通过杂/etc/confmodule中添
options rd rd_size=
或者在动态加载是通过命令行的形式传入
insmod rd rd_size=
下面是关于如何使用模块的一个例子
卸载前面加载的文件系统umount /tmp/RamDisk
卸载模块rmmod rd
加载RamDisk模块并设置大小为Minsmod rd rd_size=
创建一个文件系统mkefs /dev/ram
加载RamDisk的文件系统mount /dev/ram /tmp/RamDisk
在web服务器中使用RamDisk的例子
这里举一个在web服务器中使用三个RamDisk的例子这里要确保web服务器的所有内容不超过M(包括CGI的内容)
首先对web服务器的root目录下的内容备份到其他地方然后重新创建www的根目录
mv /home/httpd/ /home/httpd_real
mkdir /home/httpd
mkdir /home/httpd/cgibin
mkdir /home/httpd/html
mkdir /home/httpd/icons
然后在/etc/rcd/initd/中添加如下启动执行信息
### Make the RamDisk partitions
/sbin/mkfs t ext /dev/ram
/sbin/mkfs t ext /dev/ram
/sbin/mkfs t ext /dev/ram
### Mount the RamDisks to their appropriate places
mount /dev/ram /home/httpd/cgibin
mount /dev/ram /home/httpd/icons
mount /dev/ram /home/httpd/html
### Copying real directory to RamDisks (the
### data on the RamDisks is lost after a reboot)
tar C /home/| tar C /home/httpd x
### After this you can start the webserver
注
切记若RamDisk中的数据被修改并且做的修改都是有意义的则需要对RamDisk中的数据做备份
你可以启动一个cron任务来完成这个工作如每10分钟检查一次看是否有数据被修改若有则对数据进行备份
RamDisk的一个应用是使用/tmp做为RamDisk若系统中有很多程序使用RamDisk则可以很明显地加快系统速度而且每次系统重新启动这些暂时数据都会丢失
通过RamDisk加速小型数据库的访问速度
如果将将PostgreSQL数据库服务器文件加载到内存中就可以加快数据库访问速度
在/test目录下加载RamDisk
一在/test目录下设置RamDisk
mkdir p /Test
mkfs t ext /dev/ram
mount /dev/ram /Test
这时候你将拥有一个4M大小的RamDisk根据需要你可以更改你的RamDisk的大小
二为PostgreSQL设置RamDisk
理想状态下你将拥有两个数据库服务器一个是可以进行修改的另外一个是存放在RamDisk中的拷贝为了达到这个目的需要使用命令 pg_dump 或 pg_dumpall
注这里假设已经在nf中设置RamDisk的大小使其大于数据库服务器的大小如果你希望了解合适的大小可以使用命令cd /var/lib/pgsql; du
然后
### Stop the current postgresql server
/etc/rcd/initd/postgres stop
### rename the current directory
mv /var/lib/pgsql /var/lib/pgsql_main
#### Create a directory to have our RamDisk on
mkdir p /var/lib/pgsql_memory
#### change the ownership of the new directory to postgres or whatever
#### the actual owner is
chown postgres /var/lib/pgsql_memory
#### Make an alias or link to the original name /var/lib/pgsql
ln s /var/lib/pgsql_memory /var/lib/pgsql
#### Format the RamDisk
mkfs t ext /dev/ram
#### Mount the RamDisk to the postgresql directory
mount /dev/ram /var/lib/pgsql_memory
#### Copy everything from the main directory into the RamDisk
tar C /var/lib/pgsql_main cp | tar C /var/lib/pgsql_memory xp
### Start the current postgresql server
/etc/rcd/initd/postgres start
经过测试发现在RamDisk中的PostgreSQL的性能提升最高达到%左右需要的时候可以将其他的应用放置在RamDisk中以提升效率如ldap服务器等