什么是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/fstab 
LABEL=/                 /                       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 的空间。
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐