FreeBSD下的内存文件系统( 三 )





使用vn伪设备


MFS是通过一个独立的文件系统来达到内存文件系统的目的,伪设备VN就是通过另一种方式来达到这个目的,它直接模拟一个虚拟的磁盘设备,那么在这个虚拟磁盘设备中可以应用各种不同的文件系统来保存数据 。VN设备需要内核支持"pseudo-device vn"配置和/dev目录下的设备文件vn0、vn0c等,这通常不是缺省配置,需要用户重新定制内核 。


VN设备主要使用文件作为虚拟磁盘的存储空间,例如将光盘的镜像文件用作虚拟光盘设备,将软盘的镜像文件作为虚拟软盘设备等等 。当然模拟是有一定限度的,主要用来模拟文件系统,例如虚拟光盘设备上就没有音轨数据,无法作为CD播放等等 。


显然使用内存保存虚拟磁盘数据,与使用文件相比甚至更为简单 。因此,VN设备也支持使用内存来模拟一个虚拟磁盘 。VN设备需要使用vnconfig程序来控制虚拟磁盘设备,那么为指定虚拟磁盘磁盘申请内存,并配置该虚拟磁盘的操作为:

# vnconfig -s 131072 /dev/vn0c


这里使用-s参数指明申请内存空间的大小,而vn0c为空闲的虚拟磁盘设备 。配置好了虚拟磁盘之后,就可以使用标准的磁盘操作命令对磁盘进行操作,包括文件系统的初始化 。对于虚拟磁盘设备来讲,一般不需要分区操作,而是直接进行文件系统操作,事实上虚拟磁盘通常也没有分区的概念,fdisk命令也不识别虚拟磁盘,可以将虚拟磁盘设备当作一个完整的分区设备 。这是因为在Unix下本来是没有磁盘分区的概念的,这个概念是Dos/PC概念,因此FreeBSD对磁盘分区的支持限于可能存在其他系统的物理磁盘,对于只用于Unix的虚拟磁盘,就不需要这个概念了 。


# disklabel -r -w /dev/vn0c auto

# newfs /dev/vn0c

# mount /dev/vn0c /tmp


由于使用VN设备比起MFS来讲要多一个创建虚拟磁盘设备的过程,因此使用vnconfig就与使用mount_mfs不同,要略微麻烦一些,除了需要经历vnconfig配置虚拟磁盘之外,还需要初始化磁盘设备、创建文件系统等步骤 。


显然,由于创建了虚拟磁盘设备,在这里就不再是裸的MFS系统,而是一个更为完善的虚拟磁盘系统 。显然,这里就不需要MFS的帮助,而在newfs和mount时直接使用UFS文件系统 。理论上可以使用各种不同的文件类型格式,并不限于是UFS 。



内存磁盘设备md


使用MFS系统,就可以最方便快捷的建立内存文件系统,使用vn设备,就可以建立内存文件系统相关的虚拟磁盘设备,基本上,这两个内存文件系统将满足绝大多数应用系统的需要 。然而,一个非常重要的问题仍然存在,就是这些内存文件系统都是在系统启动之后,通过相应的配置命令进行配置的,而在一些情况下,需要在系统启动或启动之前,就配置好内存文件系统 。


这种在系统启动之前要求配置好内存文件系统的例子之一就是系统安装程序,因为安装系统通常都是使用光盘或软盘启动,光盘或软盘作为系统的根文件系统当然是可行的,但总存在种种限制,例如软盘的访问速度和可靠性限制,光盘的只读限制等等 。因此,目前的FreeBSD的系统安装程序,是使用内存文件系统作为安装系统的根文件系统,而不是试图将软盘或光盘作为安装系统的根文件系统 。在这种情况下,通常使用一个独立的系统镜像文件,在启动之前载入内存,作为内存文件系统的初始数据来配置内存文件系统 。


为了达到这个目的,就需要使用系统中的伪设备md,这需要相应的内核支持"pseudo-device md",这个选项通常需要重新定制内核 。此后,还需要在/dev目录下创建相应的设备文件md0和md0c 。这样使用新内核重新启动之后,就可以用使用普通磁盘一样的方法来使用它了,而不需要任何配置过程 。

推荐阅读