在CentOS上创建RAMDISK(内存磁盘)

一、环境描述

  1. 虚拟机
    CPU:双核
    内存:4 GB
    硬盘:120 GB
    IP:192.168.0.200

  2. 操作系统
    版本:CentOS 6.6 x86_64
    安装方式:Minimal

  3. 虚拟化环境
    VMware Workstation 12.1.0

二、概述

如果你想要在内存中保存一些文件,那么RAMDISK是一个很好的方案。如果将文件保存在内存中,那么在使用这些文件时,你就不需要经常访问硬盘了。你可以将诸如网站镜像或可下载文件等存放在RAMDISK中,这样便能极大地提高读写速度。如果你的Linux内核版本是2.4或更新的,那么就可以使用系统内建的RAMDISK功能。你可以通过以下命令检查RAMDISK的配置:

  1. dmesg | grep RAMDISK

上述命令的输出信息如下所示,表示RAMDISK默认使用地址在0036f7d000至0036f7d000的地址空间,即默认大小为16MB:

dmesg信息

在CentOS和RHEL系统上可以获得上图的输出信息。其它类型的Linux发行版也会有类似的输出信息。如果你想要了解RAMDISK是如何命名的,以及其他的参考信息,那么你可以运行以下命令:

  1. ls -l /dev/ram*

上述命令的输出信息如下所示:

RAMDISK状态

上述命令列出的所有RAMDISK都具有相同的大小。在上面的示例中,这些RAMDISK的大小都是16 MB。我们可以修改RAMDISK的大小,这样便能存储更多的文件。

三、创建RAMDISK

在本文中,我们会创建一个大小为2 GB的RAMDISK,由于配置RAMDISK时的内存空间大小是以1024(1 K)为单位的,所以此处的空间大小应当是
2097152。

  1. 设置RAMDISK大小

在Shell中执行以下命令,将RAMDISK大小设置为2 GB:

  1. sed -i '16s/\broot=\S*\b/& ramdisk_size=2097152/g' /boot/grub/grub.conf
  1. 重启系统
  1. reboot
  1. 建立文件系统

系统重启之后,在Shell中执行以下命令,为RAMDISK建立EXT4文件系统:

  1. mke2fs -t ext4 -m 0 /dev/ram0
  1. 挂载RAMDISK
  1. mkdir -p /home/ramdisk
  2. mount /dev/ram0 /home/ramdisk
  1. 检查是否创建成功

在Shell中执行以下命令,检查RAMDISK是否创建和挂载成功:

  1. df -h

上述命令的输出信息如下图所示:

df命令输出

由上图可知,RAMDISK已经成功挂载至/home/ramdisk目录,文件系统为EXT4,大小为2 GB。

四、性能对比

下面通过dd命令简单对比一下磁盘和RAMDISK的读写性能。

1. RAMDISK读写

在Shell中执行以下命令,通过填充零的方式,在RAMDISK中建立一个大小为1GB的文件,数据块大小为8 KB,共有125000个数据块:

  1. time dd if=/dev/zero of=/home/ramdisk/testram.dbf bs=8k count=125000 conv=fsync

上述命令的输出信息如下图所示:

写入RAMDISK

上述文件创建完成之后,再执行以下命令,将这个文件读取拷贝至另一个文件,数据块大小为8 KB:

  1. time dd if=/home/ramdisk/testram.dbf of=/home/ramdisk/tempram.dbf bs=8k

上述命令的输出信息如下图所示:

读取RAMDISK

2. 磁盘读写

在Shell中执行以下命令,通过填充零的方式,在硬盘中建立一个大小为1GB的文件,数据块大小为8 KB,共有125000个数据块:

  1. time dd if=/dev/zero of=/home/testhd.dbf bs=8k count=125000 conv=fsync

上述命令的输出信息如下图所示:

写入硬盘

上述文件创建完成之后,再执行以下命令,将这个文件读取拷贝至另一个文件,数据块大小为8 KB:

  1. time dd if=/home/testhd.dbf of=/home/temphd.dbf bs=8k

上述命令的输出信息如下图所示:

读取硬盘

3. 性能对比

由上面两个简单的测试可以看出,在本文给定的平台下,RAMDISK的写入性能大约为硬盘的10倍左右,而RAMDISK的读取性能大约为硬盘的1.5倍。此次性能测试比较粗略,以后会使用SysBench等专业的基准测试工具进行性能对比评测。

五、注意事项

由于内存是易失性的存储介质,因此必须采取一些手段防止或减轻由于意外重启或断电造成的数据丢失。将下面的几种方法综合使用,便能达到相应的效果:

  1. 自定义关机和重启脚本

执行该脚本时,会在服务器关机或重启之前,利用诸如rsync这样的增量同步工具,将数据增量备份至磁盘。

  1. 自定义开机启动脚本

服务器启动,进入操作系统时,自动执行该脚本(诸如rc.local)。该脚本会在系统启动时挂载RAMDISK,并且将在磁盘中备份的数据同步至RAMDISK之中。

  1. 定时备份数据

通过CronJob和rsync,将RAMDISK中的数据定时增量备份至磁盘之中,这样在发生意外时,便可以迅速地从上一个备份时间点恢复数据。