tmpfs总结
什么是tmpfs
tmpfs是Linux/Unix系统上的一种基于内存的文件系统。tmpfs可以使用您的内存或swap分区来存储文件。
实现原理:基于VM子系统
tmpfs是基于Linux的虚拟内存管理子系统,面向普通用户的,根据用户需要随时可以创建此类型目录,以方便快捷地获得飞一样的读写速度。
当用户创建了此类型的目录后,剩下的工作就交给MMU来完成,不论是最终是在物理内存中还是在SWAP中,都尽可能地满足用户的需求。
linux内核中的VM子系统负责在后台管理虚拟内存资源Virtual Memory,即RAM和swap资源,透明地将RAM页移动到交换分区或从交换分区到RAM页,tmpfs文件系统需要VM子系统的页面来存储文件。tmpfs自己并不知道这些页面是在交换分区还是在RAM中;做这种决定是VM子系统的工作。tmpfs文件系统所知道的就是它正在使用某种形式的虚拟内存。
内核支持
编译内核时,启用“Virtual memory file system support”就可以使用tmpfs,linux kernel从2.4以后都开始支持tmpfs。目前主流的linux系统默认已启用tmpfs,如Redhat。
关于tmpfs和VM:
大家已经知道linux的虚拟内存(VM),包括ram和swap两部分,ram就是你的物理内存,swap就是在装系统的时候划分的swap分区(在win下叫做页面文件,默认位于C:\pagefiles.sys),VM也是程序所能使用的最大内存上限,tmpfs本质上也是VM,前者划出后者的部分页面作为一个文件系统.
关于tmpfs和ramdisk:
linux下的ramdisk是由内核提供的,要使用之,mount命令挂载即可,不需要第三方工具:)
但因为它会被视为块设备,所以仍然需要格式化该文件系统:使用mkfs命令格式化,
而tmpfs不需要ramdisk一旦创建就会占用固定大小的物理内存,tmpfs则是动态分配
tmpfs的优点:
一句话概括:像使用磁盘一样简单,获得飞一样的速度
- 使用方便:因为tmpfs是建立在VM上的,而不是物理磁盘上,所以不需要格式化就可以使用,所以不用尝试mkfs.tmpfs了:没有这条命令
- 动态调节大小:tmpfs的大小是动态的,用多少才分配多少,删除文件则会释放相应的VM空间,=.=这一点非常令人激动
- 扩展性好:当您的物理内存不足以支撑分配为tmpfs的大小时,它会自动使用swap的页面
- 快:tmpfs大部分时间是驻留在物理内存中,这使得其读写速度超快=.=
tmpfs的缺点:
- 不可持久保存:tmpfs的先天优势变成了他的先天劣势:内存的特性导致位于tmpfs上的数据断电会丢失
- 成本高:相比较硬盘的价格来说,内存无疑还是很昂贵的,所以用tmpfs的目录不要放太大的东西
tmpfs的应用:
应用场景
天生就是为临时目录而生的。
例如:作为程序运行产生的临时文件目录,特别是针对服务器上某些Web服务更是前途无量,比如squid,网站,那将如虎添翼,飞一般的感觉啦。Linux系统中的应用
magc@magc-pc:~$ df 文件系统 1K-块 已用 可用 已用% 挂载点 udev 4033116 0 4033116 0% /dev tmpfs 810744 9452 801292 2% /run /dev/sda5 39253420 31068724 6167680 84% / tmpfs 4053708 94236 3959472 3% /dev/shm tmpfs 5120 4 5116 1% /run/lock tmpfs 4053708 0 4053708 0% /sys/fs/cgroup tmpfs 810744 24 810720 1% /run/user/1000
可见,在Linux系统中tmpfs的用武之地还是很多的。
调整tmpfs大小大致有以下三种方法:
1.直接挂载到需要的目录--比如系统的临时目录-可以根据实际需要挂载某个程序的临时文件的目录
[root@bys3 ~]# mount -t tmpfs -o size=20m tmpfs /tmp[root@bys3 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 16G 10G 4.7G 69% /
/dev/sda1 99M 21M 74M 22% /boot
tmpfs 502M 0 502M 0% /dev/shm
tmpfs 20M 0 20M 0% /tmp
由于没有挂载之前/tmp目录下的文件也许正在被使用,因此挂载之后系统也许有的程序不能正常工作。可以写入/etc/fstab,这样重启后也有效。
2./etc/fstab文件来修改/dev/shm的容量(增加size=100M选项即可),修改后,重新挂载即可:
[root@bys3 ~]# cat /etc/fstabLABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults,size=600M 0 0
tmpfs /tmp tmpfs defaults,size=25M 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-sda3 swap swap defaults 0 0
/dev/sda5 swap swap defaults 0 0
[root@bys3 ~]# mount -a --测试/etc/fstab无错误,重启OS系统
[oracle@bys3 ~]$ df -h --重启后的信息如下,tmpfs文件系统的对应条目已经改变为配置的
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 16G 10G 4.7G 69% /
/dev/sda1 99M 21M 74M 22% /boot
tmpfs 600M 0 600M 0% /dev/shm
tmpfs 25M 0 25M 0% /tmp
3./dev/shm建一个tmp目前,并与/tmp绑定。 --这方法有点烦琐,不如方法1方便快捷。
[root@bys3 ~]# mkdir /dev/shm/tmp[root@bys3 ~]# chmod 1777 /dev/shm/tmp
[root@bys3 ~]# mount --bind /dev/shm/tmp /tmp -注意mount --bind 这里bind前是两个-
[root@bys3 ~]# ls -ld /tmp
drwxrwxrwt 2 root root 40 Dec 8 12:15 /tmp
[root@bys3 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 16G 10G 4.7G 69% /
/dev/sda1 99M 21M 74M 22% /boot
tmpfs 600M 0 600M 0% /dev/shm
tmpfs 600M 0 600M 0% /tmp ----可以看到 /tmp 使用到了 /dev/shm 的空间。
更多推荐
所有评论(0)