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

转我自己的博客: http://mgampkay.blog.163.com/blo ... 5969/?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.3 ... lesystems/tmpfs.txt
ramfs : http://lxr.linux.no/linux+v2.6.3 ... ootfs-initramfs.txt
ramdisk: http://lxr.linux.no/linux+v2.6.3 ... lockdev/ramdisk.txt

作者: mgampkay   发布时间: 2011-03-13

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

作者: 相思爱文   发布时间: 2011-03-13