Gih's Blog

只言片语

创建以内存为介质的文件系统

2011-07-13 by gihnius, tagged as linux, unix

有时要测试一些程序的IO等性能, 需要摆脱磁盘IO的影响. 也为了使某些程序运行得更快, 提供一个临时的文件系统给程序使用. UNIX系统都提供了类似的功能: ram disk(memory disk) and ramfs(memory filesystem).

FreeBSD:在FreeBSD上建立内存文件系统,有几种可选的方法. 使用mdconfig 或 mdmfs. 两者都是使用 md 驱动实现 (memory disk driver).在FreeBSD上推荐使用 mdmfs.下面命令创建一个 100m 的内存文件系统:

# mdmfs -s 100m md1 /mnt/mfs
这样, 就创建了基于md1的md设备的文件系统.如果你需要的是设备而不是文件系统,可以使用 mdconfig:
# mdconfig -a -t swap -s 100m -u 1 
-u 1是新创建的设备号, 不能与已有的冲突,
ls /dev/md* 
看看已经建立了哪些md设备.这里使用mdconfig创建了设备 md1, 如果需要文件系统, 可以对md1进行创建文件系统然后挂载等操作.
# newfs -U md1
在md1上创建 ufs文件系统. 然后挂载:
# mount /dev/md1 /mnt/mfs
使用mdconfig时,上面指定了使用-t swap, 其实还可以使用 malloc, 但是手册里不推荐这么做.说是容易导致系统 panic!FreeBSD系统中的 tmpmfs 就是使用 md设备 (mdmfs) 来建立的.注意, 上面指的是 tmpmfs, 不是tmpfs. 前者来自 FreeBSD5, 后者到FreeBSD7才出现.tmpfs是另外一种 memory disk, 它基于VM(虚拟内存,以swap为后端存储, 使用系统空闲的物理内存和空闲的swap). 现在好像还在测试阶段.当不再使用内存文件系统时, 使用 mdconfig释放 md设备占用的资源:
# mdconfig -d -u (md设备号)
AIX:AIX中类似的家伙叫做 ramdisk. 使用 mkramdisk 创建.mkramdisk 命令作为 bos.rte.filesystems 的一部分提供,它允许用户创建一个 RAM 盘。与FreeBSD的mdconfig类似, mkramdisk 也在/dev创建一个设备特殊文件 /dev/ramdiskX X是设备号.要设置一个大小为 100 MB 的 RAM 磁盘并在其上创建一个 JFS 文件系统,请输入以下命令:
# mkramdisk 100M
# ls -l /dev | grep ram
# mkfs -V jfs /dev/ramdiskx
# mkdir /ramdisk0
# mount -V jfs -o nointegrity /dev/ramdiskx /ramdiskx 
Linux:Linux上的操作比以上两个都简单:
# mount -t ramfs -o size=100m ramfs /mnt/mfs 
Linux上的ramfs是可以动态增长的, tmpfs不能. 


tmpfs 一般都是基于 VM 的.ramfs 严格意义上只使用物理内存.