LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1333|回复: 10

tmpfs 的疑問

[复制链接]
发表于 2010-3-28 15:13:23 | 显示全部楼层 |阅读模式
Gentoo 始創人 Daniel Robbins 早年曾在 dW 發表過一文關於 tmpfs,http://www.ibm.com/developerworks/library/l-fs3.html

當中提及一個局部 bind-mount 掛載 tmpfs 的 tips,這招不錯,一直沿用:
*************************************************************************
Before X is started, run the following as root:

mkdir /dev/shm/tmp
chmod 1777 /dev/shm/tmp
mount --bind /dev/shm/tmp /tmp

Switch back to normal user and start X.
*************************************************************************
即是說:
  1. root@BlackMesa:/home/d00m3d# mount
  2. /dev/sda6 on / type ext4 (rw,errors=remount-ro)
  3. proc on /proc type proc (rw)
  4. sysfs on /sys type sysfs (rw)
  5. usbfs on /proc/bus/usb type usbfs (rw,devmode=0666)
  6. /dev/sda7 on /boot type ext2 (rw,errors=remount-ro)
  7. /dev/sda2 on /mnt/clfs type ext4 (rw)
  8. /dev/sda5 on /media/sda5 type ext4 (rw,nosuid)
  9. devpts on /dev/pts type devpts (rw,gid=4,mode=620)
  10. shm on /dev/shm type tmpfs (rw)
  11. [color="Red"]root@BlackMesa:/home/d00m3d# mkdir /dev/shm/tmp
  12. root@BlackMesa:/home/d00m3d# chmod 1777 /dev/shm/tmp
  13. root@BlackMesa:/home/d00m3d# mount --bind /dev/shm/tmp /tmp[/color]
  14. root@BlackMesa:/home/d00m3d# mount
  15. /dev/sda6 on / type ext4 (rw,errors=remount-ro)
  16. proc on /proc type proc (rw)
  17. sysfs on /sys type sysfs (rw)
  18. usbfs on /proc/bus/usb type usbfs (rw,devmode=0666)
  19. /dev/sda7 on /boot type ext2 (rw,errors=remount-ro)
  20. /dev/sda2 on /mnt/clfs type ext4 (rw)
  21. /dev/sda5 on /media/sda5 type ext4 (rw,nosuid)
  22. devpts on /dev/pts type devpts (rw,gid=4,mode=620)
  23. shm on /dev/shm type tmpfs (rw)
  24. /dev/shm/tmp on /tmp type none (rw,bind)
  25. root@BlackMesa:/home/d00m3d# df -h
  26. Filesystem            Size  Used Avail Use% Mounted on
  27. /dev/sda6              12G  8.2G  3.1G  74% /
  28. /dev/sda7              46M   12M   33M  26% /boot
  29. /dev/sda2              19G  2.1G   16G  12% /mnt/clfs
  30. /dev/sda5              19G   13G  5.8G  68% /media/sda5
  31. shm                   759M     0  759M   0% /dev/shm
  32. root@BlackMesa:/home/d00m3d#
复制代码

但使用此招數有點麻煩,就是每次開機都要以 root 動手一次,作為懶人的我終於也受不了,於是把掛點改寫到 /etc/fstab 裡好讓系統起動時自動掛載,起動後檢查掛載情況如下:
  1. d00m3d@BlackMesa:~/BLFS-sources$ cat /etc/fstab|grep tmpfs
  2. shm            /dev/shm     tmpfs  defaults        0     0
  3. /dev/shm/tmp   /tmp         tmpfs  mode=1777       0     0
  4. d00m3d@BlackMesa:~/BLFS-sources$
  5. d00m3d@BlackMesa:~/BLFS-sources$ mount
  6. /dev/sda6 on / type ext4 (rw,errors=remount-ro)
  7. proc on /proc type proc (rw)
  8. sysfs on /sys type sysfs (rw)
  9. usbfs on /proc/bus/usb type usbfs (rw,devmode=0666)
  10. /dev/sda7 on /boot type ext2 (rw,errors=remount-ro)
  11. /dev/sda2 on /mnt/clfs type ext4 (rw)
  12. /dev/sda5 on /media/sda5 type ext4 (rw,nosuid)
  13. devpts on /dev/pts type devpts (rw,gid=4,mode=620)
  14. shm on /dev/shm type tmpfs (rw)
  15. /dev/shm/tmp on /tmp type tmpfs (rw,mode=1777)
  16. d00m3d@BlackMesa:~/BLFS-sources$
  17. [color="Red"]d00m3d@BlackMesa:~/BLFS-sources$ ls /dev/shm[/color]
  18. d00m3d@BlackMesa:~/BLFS-sources$ df -h
  19. Filesystem            Size  Used Avail Use% Mounted on
  20. /dev/sda6              12G  8.2G  3.1G  74% /
  21. /dev/sda7              46M   12M   33M  26% /boot
  22. /dev/sda2              19G  2.1G   16G  12% /mnt/clfs
  23. /dev/sda5              19G   13G  5.8G  68% /media/sda5
  24. shm                   759M     0  759M   0% /dev/shm
  25. [color="Red"]/dev/shm/tmp          759M  351M  409M  47% /tmp[/color]
  26. d00m3d@BlackMesa:~/BLFS-sources$
复制代码

表面上跟實際使用上都未遇到任何問題,但為什麼 /dev/shm 下卻沒有 /dev/shm/tmp 的呀?

何解呢?求教。
发表于 2010-3-28 17:42:26 | 显示全部楼层
fstab不会帮你mkdir的。
你也没必要这样,用ramfs或tmpfs挂载就可以了。
tmpfs是不管你的$DEV的。
你修改成none也可以。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-28 19:41:01 | 显示全部楼层
當然直接把 /tmp 掛到 /dev/shm 下最直接,我也知道 fstab 不會創建掛點,但沒有掛點卻又能掛載這點我就不解了
回复 支持 反对

使用道具 举报

发表于 2010-3-28 21:30:48 | 显示全部楼层
偶有类似做法,放在启动脚本部分,不用 fstab。
挂载完 /,udev 启动后,直接执行相关挂载动作,接着用 fstab 挂载本地或网络文件系统。

用 --bind 好处是可以只使用一个 tmpfs,实现几个 tmpfs 的作用,并且可以用 -o size=xxx,mode=xxx,nodev,noexec 限制大小权限。

tmpfs 直接使用 内存 + swap 建立文件系统,设备文件位置用 none 占位即可,也可用有意义名字起标示作用。
您 fstab 中 /dev/shm/tmp 相当于标示,并不是设备,对应新挂载的 tmpfs。
使用多个 tmpfs 坏处,有可能误操作耗尽内存。

使用 nfs 时,tmpfs 所在目录可导出,ramfs 所在目录不可。
使用 wine 时,tmpfs 所在目录大小可读出,ramfs 所在目录不可。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-28 23:25:42 | 显示全部楼层
對於 tmpfs,其實有另一個疑問:
我比較過 free -m 及 df -h 的輸出結果,即使是手功掛載及多次定義 tmpfs,好像只有一個 tmpfs 真正在運作,似乎並沒有使用多個 tmpfs,但我不能確定,網上又未找到相關資料,謎糊中。。。
回复 支持 反对

使用道具 举报

发表于 2010-3-28 23:34:49 | 显示全部楼层
下面的或许会看的清楚些,tmpfs 默认:
mkdir /tmp/test{0,1,2}
mount -t tmpfs test0 /tmp/test0 -o size=11M
mount -t tmpfs test1 /tmp/test1 -o size=22M
mount -t tmpfs test2 /tmp/test2 -o size=33M

注意下大小和使用空间也比较明显的:
shm                   759M     [color="Red"]0  759M   0% /dev/shm
/dev/shm/tmp          759M  [color="Red"]351M  409M  47% /tmp
回复 支持 反对

使用道具 举报

发表于 2010-3-28 23:36:32 | 显示全部楼层
在 bind 情况下,显示的大小和使用空间是一样的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-28 23:42:08 | 显示全部楼层
那個好像我是在編譯什麼的時候得出來的

唉~~現在機子不在身邊,X 又掛掉了,待我搶修後再研究(雖然跟 X 無關的)
回复 支持 反对

使用道具 举报

发表于 2010-4-3 15:48:59 | 显示全部楼层
为什么要使用tmpfs文件系统,其中作用是什么?
回复 支持 反对

使用道具 举报

发表于 2010-4-6 15:59:17 | 显示全部楼层
由于gentoo的portage大量使用/var/tmp作临时编译目录,特在lfs启动脚本mountfs加入如下语句:

start的最后:
      

  1.         # mount tmp fs.
  2.         boot_mesg "re-mount /tmp..."
  3.         mkdir /dev/shm/tmp
  4.         chmod 1777 /dev/shm/tmp
  5.         mount --bind /dev/shm/tmp /tmp
  6.         evaluate_retval

  7.         boot_mesg "re-mount /var/tmp..."
  8.         mkdir /dev/shm/vartmp
  9.         chmod 1777 /dev/shm/vartmp
  10.         mount --bind /dev/shm/vartmp /var/tmp
  11.         evaluate_retval
复制代码



stop的最前:
umount /var/tmp
        umount /tmp
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表