RamDisk简介 这是一个关于在RedHat 系统上如何建立一个RamDisk的文章对于其他的发行版本这个过程也应该是相识的 什么是RamDisk? 一个A RamDisk 是你用作一个硬盘分区的一部分内存空间或者换句话说你是把内存假设为一个硬盘驱动器并且你在它的上面存储文件为什么我们要使用 RamDisk? 好的如果你知道通常将要使用的文件是被调入内存以提高计算机的性能因为内存的存储速度要快于硬盘 这样类似于web服务器上的数据就可以用这个方法提高访问速度或是有点愚蠢的假如你有一台PII计算机并且有G的内存空间和M的硬盘你也可以用这种方法来增加你的你的硬盘空间 或者你也可以做一个无盘的机器没有比这个更为疯狂的了 以下是一些可以得到帮助的资源 /usr/src/linux/Documentation/ramdisktxt 如何使用RamDisk OK使用ramdisk是一件很简单的事首先RedHat的默认安装就支持ramdisk你所需要做的就是格式化一个ramdisk并且把他家在到一个目录上列出所有可用的ramdisk用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创建一个目录格式化ramdisk(创建文件系统)并且加载这个ramdisk到/tmp/ramdisk 现在你可以将这个目录看成一个虚拟的分区使用它就象使用其它的目录一样 如果对ramdisk的格式化失败那就是你的内核不支持ramdisk其内核配置选项是 CONFIG_BLK_DEV_RAM ramdisk的默认大小是 Mb= blocks 在你进行mkefs的时候你可以看到你的ramdisk的大小mkefs /dev/ram 将产生类适于以下的信息 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 你实际用了多少空间 >df k /dev/ram Filesystem kblocks Used Available Use% Mounted on /dev/ram % /tmp/ramdisk 那么麻烦是什么呢?在系统重新启动的时候将刷新这个区域不要将任何没有拷贝的数据放在这个区域如果你对这个目录进行了修改并且需要保留这些修改采取一些办法进行备份 改变 ramdisks 的大小 要想使用ramdisk你必须或是得到内核的支持或是以模块的形式将他加载到系统中其中内核的配置选项是 CONFIG_BLK_DEV_RAM 把ramdisk编译成一个可加载的模块的好处是你可以在加载是重新确定ramdisk的大小 Okay 第一个办法在nf文件中加入这一行 ramdisk_size= (or ramdisk= for old kernels) 这样在你使用lilo命令和重新启动计算机之后ramdisk的默认大小将会是M这是一个/etc/nf文件的例子 boot=/dev/hda map=/boot/map install=/boot/bootb prompt timeout= image=/boot/vmlinuz label=linux root=/dev/hda readonly ramdisk_size= 确切的说我只是使用了M多的空间文件系统也将占用一定空间 当你以模块的形式编译ramdisk时你可以在加载的时候决定ramdisk的大小这也可以通过修改/etc/confmodules 的选项设置来做到 options rd rd_size= 或是在命令行中指定参数给ismod insmod rd rd_size= 以下是介绍如何使用这样的模块的例子 卸载ramdiskumount /tmp/ramdisk 卸载模块(再上一节所提到的过程中自动加载) rmmod rd 加载ramdisk模块并且把它的大校设为Minsmod rd rd_size= 创建一个文件系统 mkefs /dev/ram 加载ramdisk mount /dev/ram /tmp/ramdisk 使用 RamDisk 做 webserver例子 Okay 这是一个用个ramdisk做webserver的例子让我们设想你在 RedHat 上默认安装的 Apache 的cgiscripts html 和 icons都不超过M这就是如何实现这一点 首先利用命令将webserver的跟目录移到另外一个地方并且加载ramdisk mv /home/httpd/ /home/httpd_real mkdir /home/httpd mkdir /home/httpd/cgibin mkdir /home/httpd/html mkdir /home/httpd/icons 接下来将这些命令加到启动进程中/etc/rcd/initd/(或者是系统启动httpd的地方): ### 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 注释 请记住一件事如果你改变了数据备份你的数据在系统重新启动时所有的变化将失去 应该设置一个cron进程使它每十分钟时检查一下文件是否有变动并且备份这些改动另一种可能是你对真实的目录进行了改动所以要拷贝这些变动到ramdisk这样做也许更安全 一个非常酷的做法是用一个有G内存的计算机并且将其中的M作为/tmp 如果你有很多的进程使用/tmp这样做会提高你的系统速度同时/tmp目录中的东西将在系统重新启动的时候被删除这可是一件好事 Linux使用所有没有被程序使用的内存作为一个缓存但我的经历告诉我ramdisk将会更多的提高速度 |