分页: 1 / 2

Openbsd下mount_mfs —— 内存虚拟磁盘分区

发表于 : 2010-10-08 22:20
wkx9dragon
网上搜了一圈,没找到好的使用mount——mfs 的例子。
$ sudo mount_mfs -s 2097152 /dev/wd0b /tmp
mount_mfs: mmap: Cannot allocate memory
$ sudo mount_mfs -s 1048576 /dev/wd0b /tmp
mount_mfs: mmap: Cannot allocate memory
$ sudo mount_mfs -s 1048576 /dev/wd1b /tmp
mount_mfs: /dev/wd1b: Device not configured
$ sudo mount_mfs -s 100000 /dev/wd1b /tmp
mount_mfs: /dev/wd1b: Device not configured

# size offset fstype [fsize bsize cpg]
a: 516.7M 2048 4.2BSD 2048 16384 1 # /
b: 517.7M 1060290 swap 不知道是不是跟此有关。
c: 19540.8M 0 unused
d: 4102.5M 2120580 4.2BSD 2048 16384 1 # /usr
e: 3074.9M 10522575 4.2BSD 2048 16384 1 # /var
f: 1557.1M 16820055 4.2BSD 2048 16384 1 # /home
i: 9770.8M 20008960 unknown

发表于 : 2010-10-09 15:34
leo
用户手册上有例子,在OpenBSD的英文主页上查一下mount_mfs或newfs

发表于 : 2010-10-09 16:12
wkx9dragon
我的目标是想获得一个2g 的mfs,可是没成功,网上说的都是老新闻了,因为maxdiz unix限制为一g,也就是说每个进程最多可以分配1g 内存(32位),我查了我的openbsd amd64的源码,他可是限制为8g哦,所以说问题不是他。想把编译内核放在内存里,还是不行呀。netbsd 有 tmpfs 文件系统,大大提速我的编译时间,还干净。

发表于 : 2010-10-14 13:51
leo
wkx9dragon 写了:我的目标是想获得一个2g 的mfs,可是没成功,网上说的都是老新闻了,因为maxdiz unix限制为一g,也就是说每个进程最多可以分配1g 内存(32位),我查了我的openbsd amd64的源码,他可是限制为8g哦,所以说问题不是他。想把编译内核放在内存里,还是不行呀。netbsd 有 tmpfs 文件系统,大大提速我的编译时间,还干净。
按照你“野战军”式的作风不应该搞不定这个的,要充分发挥我军敢打敢拼的精神,;)
我知道你是8G内存,即使开了X(抑或是gnome)也占用不了多少,估计还有个7.xG的剩余吧, 假设用其中的5G来做虚拟分区,我们将这个虚拟分区挂在到 /testmfs , 这样试试吧:

代码: 全选

# cd /
# mkdir testmfs
# mount -t mfs -o rw,nodev,nosuid,-s=10240000 /dev/sd0b /testmfs
刚虚拟完时系统空闲内存还没有变化,也不需要格式化这个分区,你直接往里面拷贝一些文件看看,我是拷贝了一个4.4G的高清ts文件,硬盘灯基本上不亮。你可以拷贝完成后再top一下,看看系统空闲内存是多少?然后还可以再试试,将这个虚拟分区的文件拷贝到真实的分区(例如,我这里是往/home下拷贝),这时硬盘灯狂闪,说明是真实的文件系统读写操作。:(
没有做编译内核和用户岛的测试,你喜欢就请尝试一下,并请将结果反馈上来,看看速度到底快了多少?—— 实际上我关心的倒是系统是否还会使用磁盘缓存?:confused:,因为如果要使用磁盘缓存的话,在编译内核和用户岛时这样做的意义似乎也不太大了,但是如果系统不使用或我们可以禁用磁盘缓存,这样做还是很有意思的。—— 最起码的CVS时,可以提高磁盘寿命,此外如果内存足够大,甚至还可以当作web的专用目录(小系统,拷贝不费时间,还可以从安全性以及文件权限上做一些文章。)

发表于 : 2010-10-14 17:28
wkx9dragon
好的,晚上试试,看看效果如何,今天用hd tune 看了看老硬盘,就是现在bsd所在硬盘,已经三四黄了,希望能挺到年底买个新硬盘。现在一直在犹豫,是买个固态硬盘尝尝鲜(太贵了),小点的企业级硬盘(几百元的) 还是买个大点家庭硬盘。现在的硬盘质量都不眨地,特别是家用级别的。

发表于 : 2010-10-14 19:43
wkx9dragon
我实验了,不行,好像被/dev/wd0b 的大小限制了,我的wd0b是512m,所以怎么都不成功,只有小于512m才可以,你的sd0b是多大呀,我试着挂接别的分区,他说不可以。在试试。

发表于 : 2010-10-14 20:19
leo
我也觉得有点古怪,这次我也是“野战”的方法。:confused:

发表于 : 2010-10-14 20:48
wkx9dragon
好了,搞定,我新分了一个交换分区(8g 呀),挂上了

mfs -s 838860 /dev/sd0b /home/wkx/temp/ <
mount_mfs: reduced number of fragments per cylinder group from 52424 to 52216 to enlarge last cylinder group
$ mount
/dev/wd0a on / type ffs (local)
/dev/wd0f on /home type ffs (local, nodev, nosuid, softdep)
/dev/wd0d on /usr type ffs (local, nodev, softdep)
/dev/wd0e on /var type ffs (local, nodev, nosuid, softdep)
mfs:20361 on /home/wkx/temp type mfs (asynchronous, local, size=838860 512-blocks)
具体性能怎样,试试看。

发表于 : 2010-10-14 21:03
wkx9dragon
我都要疯了,看看是不是log.conf有限制

mount_mfs -s 838860 swap /test_temp/
# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 507M 64.9M 416M 13% /
/dev/wd0f 1.5G 635M 820M 44% /home
/dev/wd0d 3.9G 2.4G 1.4G 64% /usr
/dev/wd0e 3.0G 27.2M 2.8G 1% /var
mfs:26963 395M 1.0K 376M 0% /test_temp

发表于 : 2010-10-14 21:05
leo
wkx9dragon 写了:好了,搞定,我新分了一个交换分区(8g 呀),挂上了

mfs -s 838860 /dev/sd0b /home/wkx/temp/ <
mount_mfs: reduced number of fragments per cylinder group from 52424 to 52216 to enlarge last cylinder group
$ mount
/dev/wd0a on / type ffs (local)
/dev/wd0f on /home type ffs (local, nodev, nosuid, softdep)
/dev/wd0d on /usr type ffs (local, nodev, softdep)
/dev/wd0e on /var type ffs (local, nodev, nosuid, softdep)
mfs:20361 on /home/wkx/temp type mfs (asynchronous, local, size=838860 512-blocks)
具体性能怎样,试试看。
这也是我奇怪的地方,我当初的swap可能也就128M(最大充其量也就应该1G,不好意思,时间长了,记不得了),但是现在查看居然没有了。—— 难道是当初没有分配swap? 又感觉不太可能,系统会自动地将第二个disklabel分区设置为swap的。所以要么这里确实没有swap大小的限制,要么就是我已经将交换分区和/tmp的数据全抹了。:o
昨天晚上用大文件(一个4.4G的ts文件)做了测试,而且也尝试了在虚拟磁盘上更新cvs源代码,都没有问题,编译内核的速度是快了不少,还没有来得及尝试编译用户岛——手册上说/usr/obj是强制性的,也没有尝试编译X,并且由于太晚了,没有时间认真测定,就等着你的测试结果了。:p

此外你原来说不行时的系统提示是什么?

发表于 : 2010-10-14 21:14
wkx9dragon
这是我的默认/etc/login.conf 一部分
#
# The default values
# To alter the default authentication types change the line:
# :tc=auth-defaults:\
# to be read something like: (enables passwd, "myauth", and activ)
# :auth=passwd,myauth,activ:\
# Any value changed in the daemon class should be reset in default
# class.
#
default:\
:path=/usr/bin /bin /usr/sbin /sbin /usr/X11R6/bin /usr/local/bin:\
:umask=022:\
:datasize-max=512M:\ 我怀疑是他的原因
:datasize-cur=512M:\ 我怀疑是他的原因
:maxproc-max=256:\
:maxproc-cur=128:\
:openfiles-cur=128:\
:stacksize-cur=4M:\
:localcipher=blowfish,6:\
:ypcipher=old:\
:tc=auth-defaults:\
:tc=auth-ftp-defaults:
我怀疑是他的原因

发表于 : 2010-10-14 21:27
leo
记住,有代码时一定要禁用表情。—— 否则帖子看起来有乱码。

请等一下,我马上进OpenBSD看看是否和你的一样,可惜我的是当前版——还没有输入法。

发表于 : 2010-10-14 21:44
leo
This is mine. So I don't know where your problem is.

代码: 全选

# cat /etc/login.conf
# $OpenBSD: login.conf.in,v 1.2 2007/01/09 10:20:12 millert Exp $

#
# Sample login.conf file.  See login.conf(5) for details.
#

#
# Standard authentication styles:
#
# krb5-or-pwd    First try Kerberos V password, then local password file
# passwd    Use only the local password file
# krb5        Use only the Kerberos V password
# chpass    Do not authenticate, but change users password (change
#        the YP password if the user has one, else change the
#        local password)
# lchpass    Do not login; change user's local password instead
# radius    Use radius authentication
# skey        Use S/Key authentication
# activ        ActivCard X9.9 token authentication
# crypto    CRYPTOCard X9.9 token authentication
# snk        Digital Pathways SecureNet Key authentication
# token        Generic X9.9 token authentication
#

# Default allowed authentication styles
auth-defaults:auth=passwd,skey:

# Default allowed authentication styles for authentication type ftp
auth-ftp-defaults:auth-ftp=passwd:

#
# The default values
# To alter the default authentication types change the line:
#    :tc=auth-defaults:\
# to be read something like: (enables passwd, "myauth", and activ)
#    :auth=passwd,myauth,activ:\
# Any value changed in the daemon class should be reset in default
# class.
#
default:\
    :path=/usr/bin /bin /usr/sbin /sbin /usr/X11R6/bin /usr/local/bin:\
    :umask=022:\
    :datasize-max=512M:\
    :datasize-cur=512M:\
    :maxproc-max=256:\
    :maxproc-cur=128:\
    :openfiles-cur=128:\
    :stacksize-cur=4M:\
    :localcipher=blowfish,6:\
    :ypcipher=old:\
    :tc=auth-defaults:\
    :tc=auth-ftp-defaults:

#
# Settings used by /etc/rc and root
# This must be set properly for daemons started as root by inetd as well.
# Be sure reset these values back to system defaults in the default class!
#
daemon:\
    :ignorenologin:\
    :datasize=infinity:\
    :maxproc=infinity:\
    :openfiles-cur=128:\
    :stacksize-cur=8M:\
    :localcipher=blowfish,8:\
    :tc=default:

#
# Staff have fewer restrictions and can login even when nologins are set.
#
staff:\
    :datasize-cur=512M:\
    :datasize-max=infinity:\
    :maxproc-max=512:\
    :maxproc-cur=128:\
    :ignorenologin:\
    :requirehome@:\
    :tc=default:

#
# Authpf accounts get a special motd and shell
#
authpf:\
    :welcome=/etc/motd.authpf:\
    :shell=/usr/sbin/authpf:\
    :tc=default:
# 

发表于 : 2010-10-14 22:16
wkx9dragon
搞定,这是我的login.conf, 看来问题是出在login.conf 上了。禁用表情在那里,我找找。

# $OpenBSD: login.conf.in,v 1.2 2007/01/09 10:20:12 millert Exp $

#
# Sample login.conf file. See login.conf(5) for details.
#

#
# Standard authentication styles:
#
# krb5-or-pwd First try Kerberos V password, then local password file
# passwd Use only the local password file
# krb5 Use only the Kerberos V password
# chpass Do not authenticate, but change users password (change
# the YP password if the user has one, else change the
# local password)
# lchpass Do not login; change user's local password instead
# radius Use radius authentication
# skey Use S/Key authentication
# activ ActivCard X9.9 token authentication
# crypto CRYPTOCard X9.9 token authentication
# snk Digital Pathways SecureNet Key authentication
# token Generic X9.9 token authentication
#

# Default allowed authentication styles
auth-defaults:auth=passwd,skey:

# Default allowed authentication styles for authentication type ftp
auth-ftp-defaults:auth-ftp=passwd:

#
# The default values
# To alter the default authentication types change the line:
# :tc=auth-defaults:\
# to be read something like: (enables passwd, "myauth", and activ)
# :auth=passwd,myauth,activ:\
# Any value changed in the daemon class should be reset in default
# class.
#
default:\
:path=/usr/bin /bin /usr/sbin /sbin /usr/X11R6/bin /usr/local/bin:\
:umask=022:\
:datasize-max=8G:\
:datasize-cur=8G:\
:maxproc-max=256:\
:maxproc-cur=128:\
:openfiles-cur=128:\
:stacksize-cur=4M:\
:localcipher=blowfish,6:\
:ypcipher=old:\
:tc=auth-defaults:\
:tc=auth-ftp-defaults:

#
# Settings used by /etc/rc and root
# This must be set properly for daemons started as root by inetd as well.
# Be sure reset these values back to system defaults in the default class!
#
daemon:\
:ignorenologin:\
:datasize=infinity:\
:maxproc=infinity:\
:openfiles-cur=128:\
:stacksize-cur=8M:\
:localcipher=blowfish,8:\
:tc=default:

#
# Staff have fewer restrictions and can login even when nologins are set.
#
staff:\
:datasize-cur=512M:\
:datasize-max=infinity:\
:maxproc-max=512:\
:maxproc-cur=128:\
:ignorenologin:\
:requirehome@:\
:tc=default:

#
# Authpf accounts get a special motd and shell
#
authpf:\
:welcome=/etc/motd.authpf:\
:shell=/usr/sbin/authpf:\
:tc=default:

命令:
mount_mfs -s 8388608 swap /test_temp/
结果:
$ df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 507M 64.8M 416M 13% /
/dev/wd0f 1.5G 635M 820M 44% /home
/dev/wd0d 3.9G 2.4G 1.4G 64% /usr
/dev/wd0e 3.0G 27.2M 2.8G 1% /var
mfs:24784 3.9G 1.0K 3.7G 0% /test_temp

我看了一下,你的在stuff 中把 :datasize-max=infinity:\ 无限了,还得研究一下,区别在那里。对了,在4。7里无限是假的,我看了源代码,最大DATASIZ是8g。

发表于 : 2010-10-14 22:23
leo
我没有修改 login.conf 文件, 这个是系统自动修改的。
此外发帖时"禁用表情"在"附加选项:"里。

发表于 : 2010-10-14 22:32
wkx9dragon
找到了,我一般都是快速回复,在高级模式里。

发表于 : 2010-10-15 5:20
leo
又发现了一个更保险的方法,实际上,我上面的做法有破坏disklabel分区表的“嫌疑”,如果你的内存你不够用时,系统会请求磁盘缓存,也就是交换分区,但是我们已经把交换分区挂在到了 /testmfs 目录上,所以说实际的交换分区已经不存在了,这样对一些必须依赖交换分区的程序来说可能会有麻烦。

现在用另一种方法,也就是利用空余的磁盘空间(我一般是根据FAQ上的建议,并未将OpenBSD的fdisk分区全部分配为disklabel分区,一般还留有几个G的空闲已备出现极端情况时使用,现在这好使用这些空闲空间)。这次我们也不需要将其全部使用,只添加一个128M的sd0m分区,这样可以以后挂载到/testmfs上,先运行命令:

代码: 全选

# disklabel -e sd0
这个命令是编辑disklabel分区表,我们在这里添加一个sd0m分区,大小设置为128M,因为是新添加的分区,所以这里需要先计算一下offset, 这个就不详述了,看过FAQ的自然明白怎样计算,分区的类型设置为swap,挂载的目录不用填写,这样方便今后手动设置挂载位置。详附件001-0.jpg, 然后运行挂载命令:

代码: 全选

# cd /
# mkdir testmfs
# mount -t mfs -o rw,nodev,nosuid,-s=10240000 /dev/sd0m /testmfs
我试了试拷贝一个4.4G的ts文件到虚拟的分区,一切Ok,详细操作请看附件002-0.jpg, 看来这个方法也奏效,可以保留原有的交换分区,而且不用动login.conf文件和源代码。

问题 : 为什么128M的分区里可以挂载上5G的内存以及拷贝下4.4G的文件?
答案:哦?这个吗,要看源代码了,别问我。:D

如果需要永久使用这个分区,则需要修改fstab了。

发表于 : 2010-10-15 6:52
wkx9dragon
"可以保留原有的交换分区,而且不用动login.conf文件和源代码"
你这个方法挺好的,有的软件必须要有交换分区,不然会出现奇奇怪怪的问题,但是你说不用修改login.conf好像是不对的,得看自己本机的设置,你的不用改是因为
daemon:\
:ignorenologin:\
:datasize=infinity:\
:maxproc=infinity:\

staff:\
:datasize-cur=512M:\
:datasize-max=infinity:\
不信你改为512m试试。

发表于 : 2010-10-15 7:09
leo
wkx9dragon 写了:"可以保留原有的交换分区,而且不用动login.conf文件和源代码"
你这个方法挺好的,有的软件必须要有交换分区,不然会出现奇奇怪怪的问题,但是你说不用修改login.conf好像是不对的,得看自己本机的设置,你的不用改是因为
daemon:\
:ignorenologin:\
:datasize=infinity:\
:maxproc=infinity:\

staff:\
:datasize-cur=512M:\
:datasize-max=infinity:\
不信你改为512m试试。
I mean the system will change it for you, you don't need change those parameters manually.

发表于 : 2010-10-15 8:38
lionux
没有剩余空间,用文件也能行吧。