红联Linux门户
Linux帮助

把内存当硬盘用: tmpfs & ramfs & ramdisk

发布时间:2011-03-13 15:34:18来源:红联作者:mgampkay
转我自己的博客: http://mgampkay.blog.163.com/blog/static/1750061122011211111345969/?newFollowBlog
一.tmpfs
某天我学了个“奇巧淫技”:在/etc/fstab 里加上一句none /tmp tmpfs defaults 0 0,重起之后/tmp就在内存里了,因为/tmp放的是临时文件,这样每次关机就清空,又减少硬盘读写,而且读写又快,多好。

tmpfs是相当强大,它的空间能动态调整(但是大小不能超过上限),往里面塞文件它就变大,删文件就会变小。
看我往里面塞个1G的文件:
dd if=/dev/zero of=/tmp/bigfile count=1000000 bs=1024

内存里有1352M的cache(原来是300多M的)。
可以试下复制/dev/urandom而不是/dev/zero,再开个top,就能看cache慢慢增加了,可以看出tmpfs在cache里。
当内存不够用的时侯,就动用交换分区(swap)了,这可是影响性能的。

还有个方法是用mount挂载。
先建个文件夹吧,我在"我家"建了个.tmp_ram
mkdir ~/.tmp_ram
然后就是mount了
sudo mount -t tmpfs -o size=256M tmpfs ~/.tmp_ram
size指定的是能用的内存的上限。
这样,向~/.tmp_ram里写的文件其实都在内存而不是硬盘。

突然想到一个很好的用处,那就是把chrome的cache放内存了。
sudo mount -t tmpfs -o size=384M tmpfs ~/.cache/google-chrome
去掉sudo然后加到/etc/rc.local,那样每次开机就自动挂载。
(其实这样没次都清空cache也有点影响上网的体验的,不过我还是喜欢保护硬盘,节省空间...)

二.ramfs
ramfs能实现类似的功能:
sudo mount -t ramfs -o size=256m ramfs ~/.tmp_ram
如果你往里面塞超过mount时设置的上限的文件,它不会提示空间不足,相反它突破你设的上限,动态增大了。而且ramfs不会用swap。

三. ramdisk
有没发现在/dev里面有ram0、ram1等等ramN设备文件,这就是ramdisk。
ramdisk和ramfs的差别之一是ramdisk的大小是固定的(通常只有10几M的大小,编译内核时设定的),可以在系统启动的时候用命令行参数调整。
要用ramdisk要先在/dev/ramN里建文件系统:(我这里用ext2)
sudo mke2fs -m 0 /dev/ram0
然后是挂载:
sudo mount /dev/ram0 ~/.tmp_ram

四.参考
linux kernel的文档:
tmpfs : http://lxr.linux.no/linux+v2.6.37.3/Documentation/filesystems/tmpfs.txt
ramfs : http://lxr.linux.no/linux+v2.6.37.3/Documentation/filesystems/ramfs-rootfs-initramfs.txt
ramdisk: http://lxr.linux.no/linux+v2.6.37.3/Documentation/blockdev/ramdisk.txt
文章评论

共有 30 条评论

  1. wq413732076 于 2011-08-04 21:25:55发表:

    感谢楼主分享!我要学linux

  2. erlengzhi2 于 2011-08-01 22:40:15发表:

    有道理,有事实。有证据,有技术,支持LZ,学习了

  3. zndx2006 于 2011-08-01 20:57:23发表:

    好东西,顶。。。。。。。。。。。。。。。。。。。。。。。。

  4. sniperone 于 2011-07-20 11:25:39发表:

    楼主辛苦~

  5. sniperone 于 2011-07-20 11:25:22发表:

    顶~

  6. sniperone 于 2011-07-20 11:25:16发表:

    好贴~

  7. clh920202 于 2011-07-06 13:11:02发表:

    很强大 学习了:0)1

  8. sunfree 于 2011-07-05 23:00:48发表:

    初次来,看看,搞的挺不错的

  9. yehg01 于 2011-07-05 22:54:00发表:

    好贴啊!很实用的一个应用

  10. cliier 于 2011-07-05 18:13:52发表:

    嘿嘿! 藏黄片 是个不错的位置!

  11. lixupeng 于 2011-07-02 13:53:23发表:

    学习试试:0w5ty(1

  12. AiLeaf 于 2011-06-27 14:46:51发表:

    嗯嗯嗯,哎哟,不错噢

  13. 200881438 于 2011-06-25 23:55:28发表:

    强烈支持楼主

  14. xindi_66 于 2011-06-07 22:23:47发表:

    学习下

  15. yiyelin 于 2011-04-08 14:19:56发表:

    新手任务,得回帖,谢谢LZ分享?????????????灌水莫怪?????????????有机会一定登门拜谢????????????

  16. okzokz123 于 2011-03-15 14:37:46发表:

    适合超大内存者使用 凡人勿入

  17. xindi_66 于 2011-03-14 23:05:01发表:

    学习下

  18. MichaelDong 于 2011-03-14 20:07:16发表:

    不太懂,那为什么CHrome不自己这么做呢?

  19. 5644 于 2011-03-14 18:04:13发表:

    呵呵,强人啊

  20. luxiaopeter 于 2011-03-14 16:01:57发表:

    试用了,不错

  21. clh920202 于 2011-03-14 12:57:13发表:

    很强大 有空去试试 感谢分享

  22. pallana 于 2011-03-14 11:46:50发表:

    进行了上一步后,我忘记了删除/emp/bigfile 。然后开了一个虚拟机,立即就发现事情不妙了,系统变的非常慢。我给虚拟机分配了512m的内存空间,于是整个Virtualbox大约需要600+M的内存。超过了我的物理内存。
    发觉不妙,抓紧时间开终端,把/tmp/bigfile删除了,一切又恢复了正常。

  23. pallana 于 2011-03-14 11:04:02发表:

    昨天 在/etc/fstab 里加上一句none /tmp tmpfs defaults 0 0
    今天开机没什么特殊反应,然后[code]@localhost ~$ free -m
    total used free shared buffers cached
    Mem: 2012 641 1370 0 41 309
    -/+ buffers/cache: 290 1721
    Swap: 999 0 999[/code]然后进行了一个测验[code]@localhost ~$ dd if=/dev/zero of=/tmp/bigfile count=1000000 bs=1024
    记录了1000000+0 的读入
    记录了1000000+0 的写出
    1024000000字节(1.0 GB)已复制,3.09693 秒,331 MB/秒[/code]接着发现[code]@localhost ~$ free -m
    total used free shared buffers cached
    Mem: 2012 1618 394 0 41 1286
    -/+ buffers/cache: 290 1722
    Swap: 999 0 999[/code]cache真的大了耶。
    tmp确实移动到了内存中。
    这种帖子要记录下来

  24. Growth兆 于 2011-03-14 10:27:29发表:

    感谢mgampkay的分享,本贴加入到论坛顶置的Linux应用索引贴中

  25. tiany524 于 2011-03-14 09:27:28发表:

    学习了

  26. hui8952930 于 2011-03-14 09:26:06发表:

    好东西

  27. serops 于 2011-03-13 21:01:24发表:

    强文支持

  28. pallana 于 2011-03-13 20:52:38发表:

    不错,拜读了

  29. mgampkay 于 2011-03-13 19:06:02发表:

    2# 相思爱文
    我还真的忘了这点

  30. 相思爱文 于 2011-03-13 17:11:31发表:

    很好,收藏

    引用:
    突然想到一个很好的用处,那就是把chrome的cache放内存了。
    sudo mount -t tmpfs -o size=384M tmpfs ~/.cache/google-chrome
    去掉sudo然后加到/etc/rc.local,那样每次开机就自动挂载。


    放在/etc/rc.local中,要用绝对路径