gvirstor 再挑戦2006年10月03日 06時48分53秒

givrstor を再度挑戦。今回は使えた。まずは、md デバイスを準備。

# dd if=/dev/zero of=md.1 seek=999 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.032176 secs (32588744 bytes/sec)
# dd if=/dev/zero of=md.2 seek=999 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.033871 secs (30957988 bytes/sec)
# dd if=/dev/zero of=md.3 seek=999 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.033340 secs (31451011 bytes/sec)
# mdconfig -a -t vnode -f md.1 
md2
# mdconfig -a -t vnode -f md.2
md3
# mdconfig -a -t vnode -f md.3
md4

gvirstor の構築は前回と同じ。


# cd /var/tmp
# tar xf ~/gvirstor-beta3.tbz
# cd gvirstor/
# make
Warning: Object directory not changed from original /var/tmp/gvirstor
@ -> /usr/src/sys
machine -> /usr/src/sys/i386/include
cc -O2 -fno-strict-aliasing -pipe -g -DINVARIANTS -DINVARIANT_SUPPORT -DWITNESS 
...
# make so
gcc -o geom_virstor.so -lgeom -shared -export-dynamic -Wall -I/usr/src/sbin/geom geom_virstor.c
binstream.c g_virstor_md.c /usr/src/sbin/geom/misc/subr.c
strip geom_virstor.so
ln -f -s /sbin/geom gvirstor
# make install
install -o root -g wheel -m 555   geom_virstor.ko /boot/kernel
kldxref /boot/kernel

ここまでは、前回と一緒だったが、シンボリックリンク作る作業が一つ抜けていたらしい。


# (cd /lib/geom/; ln -s /var/tmp/gvirstor/geom_virstor.so)
# ls -ls /lib/geom/geom_virstor.so 
0 lrwxr-xr-x  1 root  wheel  29 Oct  2 17:37 /lib/geom/geom_virstor.so -> /var/tmp/gvirstor/geom_virstor.so
# ./gvirstor
usage: gvirstor clear [-v] prov ...
       gvirstor dump prov ...
       gvirstor label [-h] [-v] [-m chunk_size] [-s vir_size/MB] name provider0 [provider1 ...]
       gvirstor destroy [-fv] name ...
       gvirstor stop [-fv] name ... (alias for "destroy")
       gvirstor add [-vh] name prov [prov ...]
       gvirstor remove [-v] name ...
       gvirstor help
       gvirstor list [name ...]
       gvirstor status [-s] [name ...]
       gvirstor load [-v]
       gvirstor unload [-v]

なお、ファイルの名前は geom_virstor.so なのに注意すること。gvirstor.so をやっても、意味がない。間違えて最初に作ってしまった。./gvirstor help を見ればすぐに問題があるのが分かる。

ごく普通の geom デバイスとして使える。


# ./gvirstor label -v -s 500 test md2 /dev/md3
Resizing virtual size to fit virstor structures
New virtual size: 512 MB (3 new chunks)
Total virtual chunks: 128 (4 MB each), 512 MB total virtual size.
WARNING: Virtual storage size < Physical available storage (536870912 < 2097152000)
Clearing metadata on md2 /dev/md3.
Writing allocation table to md2... (0 MB, 1 chunks) 
Storing metadata on md2 (250 chunks)  /dev/md3 (250 chunks)  Done.

合計 2 GB のデバイスから 500MB の仮想デバイスを作った。5 GB を作ろうとして、ゼロを一つ忘れた間違いだが警告された。

# newfs -U /dev/virstor/test 
/dev/virstor/test: 512.0MB (1048576 sectors) block size 16384, fragment size 2048
        using 4 cylinder groups of 128.02MB, 8193 blks, 16448 inodes.
        with soft updates
super-block backups (for fsck -b #) at:
 160, 262336, 524512, 786688
# ./gvirstor label -v -s 5000 test md2 /dev/md3
Resizing virtual size to fit virstor structures
New virtual size: 5120 MB (30 new chunks)
Total virtual chunks: 1280 (4 MB each), 5120 MB total virtual size.
Clearing metadata on md2 /dev/md3.
Writing allocation table to md2... (0 MB, 1 chunks) 
Storing metadata on md2 (250 chunks)  /dev/md3 (250 chunks)  Done

今回は問題なくできた。

# newfs -U /dev/virstor/test
/dev/virstor/test: 5120.0MB (10485760 sectors) block size 16384, fragment size 2048
        using 28 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
        with soft updates
super-block backups (for fsck -b #) at:
 160, 376512, 752864, 1129216, 1505568, 1881920, 2258272, 2634624, 3010976,
 3387328, 3763680, 4140032, 4516384, 4892736, 5269088, 5645440, 6021792,
 6398144, 6774496, 7150848, 7527200, 7903552, 8279904, 8656256, 9032608,
 9408960, 9785312, 10161664

newfs も他のデバイスに対してやるのと同じように出来る。

一応、動作はするみたいだが、まだ開発段階だとのこと。もし興味のある方は、テストに参加して欲しいらしい。

前回