日期:2014-05-16  浏览次数:20707 次

基于tmpfs或ramfs把linux把目录映射为内存

在linux系统中,我们可以通过挂载tmpfs或ramfs文件系统实现对内存的访问使用。
对于一些关键业务来说,可以考虑将主要的读写进程通过Tmpfs或Ramfs文件系统放入内存中执行。

1.挂载

tmpfs

mkdir  ~/tmp
sudo mount -t tmpfs -o size=1024m tmpfs ~/tmp

rams

mkdir -p  ~/tmp
sudo mount -t ramfs -o size=1024m ramfs ~/tmp

?

?2. 查看挂载情况

yunpeng@yunpeng-duitang:~$ df -h
文件系统            容量  已用  可用 已用%% 挂载点
/dev/sda1             111G   38G   67G  36% /
udev                  2.9G  4.0K  2.9G   1% /dev
tmpfs                 1.2G  908K  1.2G   1% /run
none                  5.0M     0  5.0M   0% /run/lock
none                  2.9G  3.7M  2.9G   1% /run/shm
/dev/sda5              92G   76G   12G  87% /duitang
/dev/sda6              83G   34G   45G  44% /work
tmpfs                 1.0G  1.0G     0 100% /home/yunpeng/tmp

?3. 测试写入速度

yunpeng@yunpeng-duitang:~$ dd if=/dev/zero of=/home/yunpeng/tmp/test2 bs=1M count=400 
记录了400+0 的读入
记录了400+0 的写出
419430400字节(419 MB)已复制,0.282811 秒,1.5 GB/秒

?4.查看挂载结果

yunpeng@yunpeng-duitang:~$ mount -l
/dev/sda1 on / type ext4 (rw,errors=remount-ro,commit=0)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/sda5 on /duitang type ext4 (rw,commit=0)
/dev/sda6 on /work type ext4 (rw,commit=0)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
gvfs-fuse-daemon on /home/yunpeng/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=yunpeng)
tmpfs on /home/yunpeng/tmp type tmpfs (rw,size=1024m)

通过以上输出最后一行,可以查看当前挂载/mnt/ram的相关情况

通过配置/etc/fstab文件,可以实现开机挂载tmpfs或ramfs文件系统分区

?

5.ramfs和tmpfs的区别

  • ramfs可以动态进行容量扩展,只要不大于系统内的可用物理内存大小即可。

  • tmpfs无法进行动态扩展,只能使用挂载时指定的分区大小。

  • tmpfs使用swap或物理内存作为存储空间。

  • ramfs不能使用swap空间,只能使用物理内存空间。

6.一些注意点

tmpfs不具备持久性,重启后数据不保留,请务必注意!!!
/dev/shm/是一个设备文件,它使用就是tmpfs文件系统(注意:在Centos和Redhat下,/dev/shm目录是一个链接,指向/run/shm目录,在Ubuntu系统下tmpfs文件系统对应的是/run/shm目录,可以使用df命令查看),因为 /dev/shm/这个目录不在硬盘上,而是在内存里,它就所谓的tmpfs。在Redhat/CentOS等linux发行版中默认大小为物理内存的一半。

?

参考:

http://www.weittor.com/overview-of-ramfs-and-tmpfs-on-linux-cn.html

http://blog.csdn.net/chen3888015/article/details/7515706

http://luobeng.blogbus.com/logs/128410724.html