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

OpenBSD的安装、升级、更新等日常问题。

版主: chenjun天地乾坤

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-10-15 12:47

lionux 写了:没有剩余空间,用文件也能行吧。
1. 没有剩余空间,要是可以虚拟在一个空目录里,自然是非常非常的好了,请问有具体的方案吗?
2. 因为wkx9dragon想在上面编译内核,如果将内存虚拟在一个文件上,请问怎样操作?——我有点没转过来。:confused:

wkx9dragon
锌 Zn
帖子: 493
注册时间: 2010-02-02 18:00

帖子 wkx9dragon » 2010-10-15 16:35

跟空余空间没有关系,我现在用256m swap就可以了,以前走弯路了,512m限制是longin.conf的限制,
mount_mfs -s 88888888 special node [specilal 只是一个假目标,因为历史原因,文件系统是建立在磁盘上的,所以他需要一些磁盘参数给mfs文件系统,我们自己编一个解可以了,看freebsd的网上说明,说是可以瞎编的,但是我在openbsd上不行,但是有解决办法,openbsd推荐 special用 swap 就可以了。]
比如: mount_mfs -s 8382836 swap /tmp
这是我的fstab,你看就跟实际wd0b 没有关系吧。

Password:
/dev/wd0a / ffs rw 1 1
/dev/wd0b none swap sw 0 0
/dev/wd0f /home ffs rw,nodev,nosuid,softdep 1 2
/dev/wd0d /usr ffs rw,nodev,softdep 1 2
/dev/wd0e /var ffs rw,nodev,nosuid,softdep 1 2

# wkx append
/dev/sd1j /DISK/BACKUP ntfs ro 0 0
/dev/sd1l /DISK/OTHER ntfs ro 0 0
/dev/sd0l /DISK/BigBackup ntfs ro 0 0
/dev/sd0m /DISK/BigOther ntfs ro 0 0
swap /tmp mfs rw,nodev,nosuid,-s=8388608 0 0

命令:
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.3M 2.8G 1% /var
mfs:378 3.9G 682M 3.0G 18% /tmp

$ sudo disklabel -h wd0
# /dev/rwd0c:
type: ESDI
disk: ESDI/IDE disk
label: Maxtor 32049U3
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 2491
total sectors: 40019519 # total bytes: 19540.8M
rpm: 3600
interleave: 1
boundstart: 2048
boundend: 20008960
drivedata: 0

16 partitions:
# size offset fstype [fsize bsize cpg]
a: 516.7M 2048 4.2BSD 2048 16384 1 # /
b: 258.9M 1060290 swap # none
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
p: 258.9M 1590435 swap

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-10-15 20:17

初步的思路:
如果进行disklabel分区时没有保留一些剩余空间,可以先从swap分区上切一小块下来(即使仅仅是1K),也就是将原有的swap分区,重新划分为新的swap1+swap2两块,然后根据原始的offset,重新修改两个swap分区的大小和offset——在fstab里追加设置一个swap2分区,这样问题就应该解决了——也就是避免了disklabel分区的重叠造成可能系统出现的问题。

头像
lionux
锌 Zn
帖子: 457
注册时间: 2010-02-04 11:09

帖子 lionux » 2010-10-15 20:46

leo 写了:1. 没有剩余空间,要是可以虚拟在一个空目录里,自然是非常非常的好了,请问有具体的方案吗?
2. 因为wkx9dragon想在上面编译内核,如果将内存虚拟在一个文件上,请问怎样操作?——我有点没转过来。:confused:

先用文件做交换分区。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-10-16 4:19

wkx9dragon 写了:跟空余空间没有关系,我现在用256m swap就可以了,以前走弯路了,512m限制是longin.conf的限制,
..........
是,实际上和剩余空间没有关系,不过如果你用一部分内存作为swap的挂载点,那么原有的swap分区将失去作用,如果用户的这个分区设置的比较大,例如,有人可能按照Liunx下的推荐,设置为内存的2倍左右,那这部分空间岂不是浪费掉了,而且在真正出现需要大量磁盘缓存的情况下,可能系统会出现问题,所以我觉得,最好还是不动原始的交换分区为好,至少是将对其的影响降低为最小,例如从swap里面划分出一小块disklabel分区给swap1, 再将虚拟分区挂载到这个swap1分区上,不知道我描述的是否清楚?
如果lionux的提议真的有方法去实现倒是一个两全其美的方案,不用编辑disklabel分区表来增加一个分区(如果当时在安装系统时已经分配好了实际上也是一个比较不错的方案),也不用考虑挂载到某一个目录,而是直接将内存挂载为到一个特定的文件(类unix下不是只有文件的概念吗?),只不过,我还没有搞清楚如何在disklabel分区表里定义这个特定的文件以便可以使用mount挂载。

lionux 写了:先用文件做交换分区。
我没有完全理解你的意思,是可以先将一个文件设置为交换分区,也可以在/etc/fstab里声明其文件类型,但是如何在disklabel中指定这个分区呢?

wkx9dragon
锌 Zn
帖子: 493
注册时间: 2010-02-02 18:00

帖子 wkx9dragon » 2010-10-16 7:10

"而且在真正出现需要大量磁盘缓存的情况下,可能系统会出现问题,所以我觉得,最好还是不动原始的交换分区为好,至少是将对其的影响降低为最小"
你说的对,磁盘swap还是要得,有好多软件还是要他的,系统崩溃,dump默认好像也是他,如果mfs的话,崩溃记录在那里找?得重新设置,我看是下一个问题了。[2倍内存]老皇历了,对于大内存,可得从新考虑了,我记得网上有讨论的,但是真正详细的没找到,都挺粗略的,这个问题好像跟你的实际应用有关,听复杂的。

头像
lionux
锌 Zn
帖子: 457
注册时间: 2010-02-04 11:09

帖子 lionux » 2010-10-16 8:43

netbsd中没有限制,1G内存2G mfs测试可用。
netbsd man 中的例子:
EXAMPLES
Mount a 32 MB mfs on /tmp:

[INDENT]mount_mfs -s 32m swap /tmp[/INDENT]

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-10-16 10:54

你的意思是说1G内存+2G磁盘缓存吧?——如果是这样咱们说的不是一回事,wkx9dragon就是不想用硬盘(他的硬盘似乎快完蛋了。),他是要从内存中虚拟出一块磁盘分区来用。
但是如果你的意思是NetBSD可以用1G内存虚拟出2G的磁盘分区,而且如果真的可以写入2G的内容就太神奇了,因为除非另外的1G内容被写到了磁盘缓存上,否则哪来的空间呢。

wkx9dragon
锌 Zn
帖子: 493
注册时间: 2010-02-02 18:00

帖子 wkx9dragon » 2010-10-16 13:05

刚才想把/usr 装到mfs中,失败了,系统崩溃了,命令行不允许,改fstab,没想到崩溃了,因为gtty0在/usr目录下,和netbsd不一样哦。还有netbsd下,紧急恢复是
mount -u -w /dev/wd0a /mnt

openbsd 是两步,
1)fsck -p /dev/wd0a,
2) mount /dev/wd0a /mnt。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-10-16 15:20

wkx9dragon 写了:刚才想把/usr 装到mfs中,失败了,系统崩溃了,命令行不允许,改fstab,没想到崩溃了,因为gtty0在/usr目录下,和netbsd不一样哦。还有netbsd下,紧急恢复是
mount -u -w /dev/wd0a /mnt

openbsd 是两步,
1)fsck -p /dev/wd0a,
2) mount /dev/wd0a /mnt。
瞧这意思,你想把OpenBSD生生折腾成无盘工作站。:)
我以前在网上还真看过这方面的讨论,不过一时想不起来在哪里了。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-10-16 16:55

lionux 写了:netbsd中没有限制,1G内存2G mfs测试可用。
netbsd man 中的例子:
It seems like you can only mount_mfs to a directory in OpenBSD.

代码: 全选

# [color=royalblue]touch /mfs[/color]
# [color=royalblue]mount_mfs -s 10240000 swap /mfs [/color]
mount_mfs: /mfs: mount: Not a directory

wkx9dragon
锌 Zn
帖子: 493
注册时间: 2010-02-02 18:00

帖子 wkx9dragon » 2010-10-16 17:45

"瞧这意思,你想把OpenBSD生生折腾成无盘工作站。
我以前在网上还真看过这方面的讨论,不过一时想不起来在哪里了"

对呀!我就是想把OS整个放到内存里,反正内存也够,netbsd,openbsd也不大。现在没找到方法。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-10-17 15:14

let's finish this thread first, and then we will create a new thread to discuss about it.
Maybe it's not too hard to figure out.

wkx9dragon
锌 Zn
帖子: 493
注册时间: 2010-02-02 18:00

帖子 wkx9dragon » 2010-10-17 21:26

好的,该下一个目标了,这个问题算是解决了,反正能用了。我出差了,不能折腾了,得下个月了。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2010-10-18 2:16

好的,预祝一路平安,我再试试分割磁盘分区和安装时多添加一个swap分区的情况如何。
抱歉,我帮你修改了主题前缀和标题——这样便于后面的网友阅读。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

预留一个swap给虚拟磁盘分区使用

帖子 leo » 2010-10-18 14:02

全新安装的OpenBSD 4.7 amd64版本,我们先查看一下个分区使用情况,这里面并没有列出交换分区,/home 分区内有一个测试用的4.4G的高清文件 1.ts:

图片

我们在查看一下剩余内存为7152M,下面我们将把其中的大约5G内存虚拟为一个disklabel分区。

图片

首先,运行如下命令编译disklabel分区表:

代码: 全选

# disklabel -e sd0
可以看到在安装时我设置了两个交换分区,501M的sd0b和256M的sd0m:
请注意此时sd0m分区并没有挂载点:


图片

下面我们为sd0m分区设置一个挂载点 /testmfs, 挂载时这个目录必须存在。
图片

接下来查看那一下/etc/fstab文件,我们的sd0m分区已经在那里了。

图片

接下来我们运行下面的挂载命令,为这个/testmfs分区挂载大约5G内存,然后我们在查看一下磁盘使用情况:

代码: 全选

# mount -t mfs -o rw,nodev,nosuid,-s=10240000 /dev/sd0b /testmfs
注意,这里的sd0m分区的名称没有了,代替他的是mfs,就是内存文件系统的意思,这个分区目前挂在到了 /testmfs目录,大小大约为5G ,目前还未使用。


图片

我们将/home目录下的4.4G的文件拷过来试试是否真有5G的空间,拷贝完成后你可以看见该分区的空间占用为92%了。

图片

我们在看一下内存使用情况,很明显,少了将近5G,也就恰恰是那个ts文件的大小。

图片

不用虚拟内存分区时也很简单,运行如下命令,

再用df命令查看一下系统分区使用情况,发现这个sd0m分区已经没有了。


图片

然后查看一下空闲内存,虽然没有回到7G,但也说明,卸载分区后,系统又将这部分内存释放出来了。

图片

好了,到目前为止,用安装时预留一个交换分区挂载内存磁盘的做法等于已经成功了。

鉴于在已有分区上再划分出一个分区来作为虚拟分区的情况,因为差别仅在于如何划分分区,这里就不详述了,觉得有问题的朋友请跟帖指正。

回复

在线用户

正浏览此版面之用户: Ahrefs [Bot] 和 3 访客