在移动介质上运行FreeBSD,包括使用FreeBSD的官方光盘映像和U盘映像来安装系统,进入shell查看,都会发现/var和/tmp使用了内存盘,以防止程序需要读写这两个分区。
那么是哪个配置导致FreeBSD会使用内存盘呢?
我基本上查看了所有的启动脚本,都没有发现配置所在的地方。
最后实在没有办法,在/etc/default/rc.conf中逛了一圈,发现在两个配置选项:
tmpmfs和varmfs:
tmpmfs="AUTO" # Set to YES to always create an mfs /tmp, NO to never
tmpsize="20m" # Size of mfs /tmp if created
tmpmfs_flags="-S" # Extra mdmfs options for the mfs /tmp
varmfs="AUTO" # Set to YES to always create an mfs /var, NO to never
varsize="32m" # Size of mfs /var if created
varmfs_flags="-S" # Extra mount options for the mfs /var
这两者默认的配置是AUTO,后面说明,设置为YES,表示将使用内存盘来挂载这两个分区,设置为NO,表示不使用内存盘。
那设置为AUTO呢?这个说明没有解释。
接着看这两个配置的脚本,在中间部分有个描述:
# If we do not have a writable /tmp, create a memory
# filesystem for /tmp. If /tmp is a symlink (e.g. to /var/tmp,
# then it should already be writable).
#
tmp的脚本比较简单一些:
case "${tmpmfs}" in
[Aa][Uu][Tt][Oo])
if _tmpdir=$(mktemp -d -q /tmp/.diskless.XXXXXX); then
rmdir ${_tmpdir}
else
if [ -h /tmp ]; then
echo "*** /tmp is a symlink to a non-writable area!"
echo "dropping into shell, ^D to continue anyway."
/bin/sh
else
mount_tmpmfs
fi
fi
;;
*)
if checkyesno tmpmfs; then
mount_tmpmfs
fi
;;
esac
综合说明,结论是:当类型为auto的时候,只检测到目录只读,就会创建一个md内存盘,并挂载到/tmp去。
/var稍微麻烦一些,但是原理差不多,只不是/var需要做的工作要多一些。
该贴被wulcan编辑于2014-9-28 9:06:44该贴由hui.chen转至本版2014-11-5 17:04:54