分页: 1 / 1

OpenBSD 系统管理员手册: newfs, mount_mfs

发表于 : 2010-10-13 14:30
leo
NEWFS(8) OpenBSD 系统管理员手册 NEWFS(8)

名称[INDENT]newfs, mount_mfs - 创建一个新的文件系统[/INDENT]语法[INDENT]newfs [-Nq] [-b block-size] [-c fragments-per-cylinder-group] [-e maxbpg]
[-f frag-size] [-g avgfilesize] [-h avgfpdir] [-i bytes]
[-m free-space] [-O filesystem-format] [-o optimization]
[-S sector-size] [-s size] [-T disktype] [-t fstype] special

mount_mfs [-b block-size] [-c fragments-per-cylinder-group] [-e maxbpg]
[-f frag-size] [-i bytes] [-m free-space] [-o options]
[-P file] [-s size] special node[/INDENT]描述[INDENT]在运行newfs或者mount_mfs之前, 磁盘必须已经使用disklab(8)进行了分区。
newfs在一个指定的设备上构建一个新的文件系统, 这基于该设备的在disklabel
分区上的默认信息。尽管用户可以通过newfs的多个选项改写这些默认值,但是在
一般情况下,这些默认值的设置都是有原因的。

这个指定的文件应该是一个裸(raw)设备, 例如 /dev/rsd0a; 如果指定了一个相关
的路径,像sd0a, 则使用相应的裸设备。

mount_mfs 用来在虚拟内存中构建一个文件系统,然后将其挂在到一个指定的节点
(node)。当unmount这个文件系统时,mount_mfs退出、并且这个文件系统的内容会
丢失。如果在系统shutdown过程中发送一个mount_mfs信号, 则其会试图unmount相
应的文件系统。mount_mfs使用的参数和newfs相同。这个特定文件只用来读取这个
disk label,这个disk label提供了一组基于内存的文件系统的相关配置参数。该
文件一般来说是基本的swap区域, 因为当可用内存过低或支持文件系统的内存必须
分页存储时,这个swap区域将被用来做备份。如果这里用关键字 ``swap'' 代替一
个指定的文件名称, 将使用默认的配置参数。 (当在没有磁盘的计算机里使用
mount_mfs时,这个选项就可以发挥作用了。)

无论是newfs还是mount_mfs目前都已经内置了fsirand(8)功能, 所以除非你想让文
件系统re-randomize(或者列出inode产生的inode数),否则无需手动运行fsirand(8)。[/INDENT]下面列出了newfs的可用选项:

-b block-size[INDENT]这里所指的文件系统的block size以字节计算。如果存在一个可用的
disklabel, 系统会默认地读取它。否则默认是16KB,或数字8的成倍
大小的fragment size, 这两者都小一些。[/INDENT]-c fragments-per-cylinder-group[INDENT]在一个文件系统中每个柱面组的碎片数。默认是通过其它参数计算所
允许的最大值。这个值依赖于其它的一系列参数, 特别是block size
和每个inode的字节数。[/INDENT]-e maxbpg[INDENT] 这个参数指定了单个文件能从一个柱面组分配到的最大的block数量,
超过这个数量它被强制开始从另一个柱面组分配到block。默认值是
在一个柱面组内block总量的1/4。请参阅tunefs(8)以了解怎样设置
这个参数。[/INDENT]-f frag-size[INDENT]文件系统的碎片大小,以字节计算。如果一个disklabel分区可用, 默
认情况下是从其读取,否则默认值是2048。[/INDENT]-g avgfilesize[INDENT]预计的文件系统平均文件大小,以字节计算。[/INDENT]-h avgfpdir[INDENT]预计的文件系统内每个目录里的文件数量。[/INDENT]-i bytes[INDENT] 指定文件系统中inode的密度。默认值是为数据空间的每8192字节产生
一个节点。如果希望减少节点数量, 则需要使用大一些的数值; 相反,
如果想创建更多的inodes,这个值应该设置的小一些。[/INDENT]-m free-space[INDENT]为普通用户预留空间所占的百分比; 也就是最小的剩余空间。默认值
是5%,请参阅tunefs(8)以便了解怎样设定这个参数。[/INDENT]-N[INDENT]并不真正建立文件系统,而只是将将文件系统参数打印出来。[/INDENT]-O filesystem-format[INDENT]选择文件系统格式:[/INDENT][INDENT]0 4.3BSD 格式的文件系统。这个选项主要用于构建root文件系统,
因为老的boot ROMS可以识别此文件系统。
1 快速文件系统(FFS), 小于1TB的文件系统的默认设置。
2 增强的快速文件系统(FFS2), 大于1TB的文件系统的默认设置。[/INDENT]-o optimization[INDENT]空间或时间。文件系统既可被规划为在分配blocks时尽量占用最少的时间, 也
可以被规划为最小化磁盘上的碎片空间。除非指定了一个优化方案, 如果上面
的-m free-space参数值小于5%, 默认设置为为空间提供优化;如果这个值大于
5%, 则默认的优化是为时间考虑的。请参阅tunefs(8)以便了解怎样设置这个
参数。[/INDENT]-q[INDENT]以安静模式操作。如果应用了此选项,newfs将不会打印出无关的信息,例如, superblock backups.[/INDENT]-S sector-size[INDENT]以字节计算的扇区大小 (几乎总是512)。一个扇区是一个物理设备的最小可寻址
单元。只有在newfs在一个不同类型的磁盘上写入raw镜像时这个选项才有用处。
(例如在一张一次性磁盘上)。注意:如果修改了系统的默认设定值,则会导致
在标准的superblock丢失的情况下,fsck(8)无法找到替代的superblocks.[/INDENT]-s size[INDENT]扇区内的文件系统大小。这个值可以是512字节的倍数, 默认值内核使用的是
每扇区512字节。FFS文件系统的最大值是2,147,483,647 (2^31 - 1) 个512字节
blocks, 很显然,小于1 TB。而FFS2文件系统可以达到64PB。
注意: 对于mount_mfs命令来说,它的限制在于login.conf(5)文件里的datasize,
以及最终要看per-arch MAXDSIZ的限制。[/INDENT]-T disktype[INDENT] 从disktab(5)获取的某个磁盘的信息,而不是从disklabel(5)获取。[/INDENT]-t fstype[INDENT]设置要建立的文件系统类型。newfs会智能地选择相应的newfs_XXX程序才进行。
mount_mfs的选项和上面描述的newfs的选项很类似, 除了 -o 和 -P 选项。[/INDENT]这些选项的含义如下:

-o options[INDENT]-o 参数可指定的多个选项,选项之间用一个逗号分割。请参阅mount(8)手册以了解可以使用的选项以及其含义。[/INDENT]-P file[INDENT]如果这个file是一个目录, 则用该目录的内容填充建立的mfs文件系统。如果这里的file
是一个块设备, 则用这个设备上包含的FFS文件系统填充建立的mfs文件系统[/INDENT]。

如果没有使用 -P file 选项, 则建立的mfs文件系统的owner和mode将和挂载点的一致。

环境[INDENT]可以通过mount_mfs -P指定一个TMPDIR目录,它可以创建一个临时使用的挂载点,以取代默认的 /tmp 目录。[/INDENT]也请参阅[INDENT]disktab(5), fs(5), disklabel(8), dumpfs(8), fsck(8), fsirand(8),
growfs(8), mount(8), tunefs(8)

M. McKusick, W. Joy, S. Leffler, and R. Fabry, A Fast File System for
UNIX, ACM Transactions on Computer Systems 2, 3, pp 181-197, August 1984,
(reprinted in the BSD System Manager's Manual).

M. McKusick, M. Karels, and K. Bostic, A Pageable Memory Based
Filesystem, USENIX Summer Conference Proceedings, 1990.[/INDENT]历史[INDENT]The newfs command appeared in 4.2BSD.[/INDENT]OpenBSD 4.8 March 21, 2010 OpenBSD 4.8

发表于 : 2010-10-14 22:48
wkx9dragon
它的限制在于login.conf(5)文件里的datasize,以及最终要看per-arch MAXDSIZ的限制。
看手册,不仔细,多走了不少弯路呀。
1)login.conf :
43: :datasize-max=8G:\
44: :datasize-cur=8G:\
61: :datasize=infinity:\
72: :datasize-cur=512M:\
73: :datasize-max=infinity:\

2)/usr/src/sys/arch/amd64/include/vmparam.h:#define MAXDSIZ ((paddr_t)8*1024*1024*1024) /* max data size */

结论:
挂接 mfs 文件系统,特别是512m以上的,要先走以上两步。一,修改login.conf, 二,看看系统限制。
哥们,翻译的太好了,高人呀,我要是英文有那么好,多好呀。

发表于 : 2010-10-15 6:26
leo
感谢wkx9dragon兄共享的方法,这样后面的朋友就可以少走弯路了。
此外wkx9dragon兄太客气了,翻译是瞎来的,因为以前没有用内存虚拟过分区,有错误在所难免,而且手册上这里说的也是不明不白的,最后通过英文手册的链接直接看了mount的用户手册才知道具体的做法。
不过说实话,感觉手册里说的并不完全准确,因为我并未调整login.conf文件,而且设置的内存虚拟分区只有128M也一样可以虚拟4G以上的内存空间,而且分区表可能会根据你的设置而调整,也就是说系统多少有点“自愈”的功能,这里还真不好形容。

你的思路和做法可能是对的——分1、2两个步骤进行设置,也是一般推荐的做法;但是我觉得不这样做也并非不行,我现在的做法是另开一个swap分区作为虚拟内存分区的挂载点,这样不破坏原来的交换分区swap。—— 也就是,根本无需修改login.conf和源代码,也一样成功建立和挂载了虚拟分区,并经实测拷贝了一个大文件。只不过尚未经过长时间的测试和校验,现在还不好说肯定没有问题。