按照手册上的描述,tmpfs是一个高效的内存文件系统,在运行的速度是有绝对的优势,本文最后附上复制文件的速度。而用的最多的情形,则是用在各种live环境,这时不能向硬盘中写东西,但是/tmp和/var却是需要写的,如果只读则会出现很多问题,甚至导致系统停止响应,所以大多数的live系统,都使用了tmpfs――当然要是FreeBSD7.0以后的版本,因为tmpfs正到7.0才正式支持,在以前的版本中,一直都是用md。
tmpfs有点恐怖的地方,在于它默认使用了全部的vm,包括硬件内存和交换分区在内的所有空间,一定要注意它包括了交换分区,所以在使用的时候最好加上大小限制,否则一旦在使用时把交换分区也填满了,那系统可能要停止响应了。
tmpfs还有一个特点要注意,就是如果用了多个tmpfs,那么默认情况下,这些tmpfs之间共享内存,也就是说,如果一个tmpfs把内存用光了,那么其他的tmpfs也不可能再写入文件了,剩余的空间也就为零了。
当然这是极限场合,平时使用时,所有的tmpfs剩余空间是一致的,因为他们是共享的内存空间。这一点可以在使用时用df来查看。
要使用tmpfs,首先必须让内核支持tmpfs,方法按常规有两种:编译进内核或者用loader.conf加载。
要自已编译内核的话,就在配置文件中添加下面一行,然后按常规的方法运行就可以了:
options TMPFS
loader.conf支持也比较简单,在/boot/loader.conf中添加一行:
tmpfs_load="YES"
使用tmpfs很简单,有两种方法,写进fstab,或者直接用mount命令,前者适合用在开机就创建内存盘的场合,后者一般用脚本或临时使用。
第一种,使用/etc/fstab:
在fstab文件中添加下面一行,注意这里有个size参数,这是限制/tmp的大小,防止超量使用内存:
tmpfs /tmp tmpfs rw,size=1g,mode=1777 0 0
在启动之后,/tmp就会使用tmpfs了,其实典型的应用,是把一些需要高速存取的小文件,比如socket文件,放到tmpfs里,这样会明显提高速度。
第二种,手动启动:
mount -o size=1g -t tmpfs tmpfs /mnt
同样,用size来限制内存盘的大小,tmpfs还支持其他的几个参数,最常用的还有一个maxfilesize,可以用来限制该系统中单个文件的大小。
这个命令可以由shell或rc脚本启动,使用的时候非常灵活。
来看一下当前系统文件:
root@10:/tmp # df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ada0p2 9.2G 882M 7.6G 10% /
devfs 1.0K 1.0K 0B 100% /dev
tmpfs 1.0G 653M 371M 64% /tmp
tmpfs 1.0G 653M 371M 64% /mnt
来复制一个光盘映像文件试试,顺便对比一下dd 的bs参数,你会发现飞一样的速度,跟硬盘根本就不是一个级别的东东:
root@10:/tmp # dd if=o.iso of=/mnt/o.iso bs=2m
326+1 records in
326+1 records out
684429312 bytes transferred in 0.956879 secs (715272655 bytes/sec)
root@10:/tmp # dd if=o.iso of=/mnt/o.iso bs=1m
652+1 records in
652+1 records out
684429312 bytes transferred in 0.819927 secs (834744229 bytes/sec)
root@10:/tmp # dd if=o.iso of=/mnt/o.iso
1336776+0 records in
1336776+0 records out
684429312 bytes transferred in 3.489204 secs (196156294 bytes/sec)
该贴由hui.chen转至本版2014-11-28 15:27:11