gvirstor の実験2006年09月22日 11時42分55秒

FreeBSD GEOM Storage Virtualisation Layer を試してみることにした。

まずは、gvirstor で使うためのデバイスを準備。


# dd if=/dev/zero of=1.md seek=999 count=1 bs=1M
1+0 records in
1+0 records out
1048576 bytes transferred in 0.023139 secs (45316392 bytes/sec)
# dd if=/dev/zero of=2.md seek=999 count=1 bs=1M
1+0 records in
1+0 records out
1048576 bytes transferred in 0.040312 secs (26011477 bytes/sec)
# dd if=/dev/zero of=3.md seek=999 count=1 bs=1M
1+0 records in
1+0 records out
1048576 bytes transferred in 0.019748 secs (53097266 bytes/sec)
# ls
1.md    2.md    3.md
# mdconfig -a -t vnode -f 1.md 
md2
# mdconfig -a -t vnode -f 2.md
md3
# mdconfig -a -t vnode -f 3.md
md4

次に、gvirstor をコンパイル。どこに展開しても、あまり関係ない。ただ、geom を基にした機能なので、geom 以下に展開しようとしただけだ。


# cd /usr/src/sys/geom/
# rm -rf gvirstor
dynabook# tar xvf gvirstor-beta3.tbz
# cd gvirstor
# sed -i "" 's/CFLAGS/#CFLAGS/' Makefile
# make
Warning: Object directory not changed from original /usr/src/sys/geom/gvirstor
@ -> /usr/src/sys
...
ld -Bshareable  -d -warn-common -o geom_virstor.ko geom_virstor.kld
objcopy --strip-debug geom_virstor.ko
# 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 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 mstrip 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
 ./gvirstor label -v -s 500 test md2 md3
Unknown command: label
usage: gvirstor help
       gvirstor list [name ...]
       gvirstor status [-s] [name ...]
       gvirstor load [-v]
       gvirstor unload [-v]

いくつか試したが、何故かうまくいかなかった。


# grep label *c
g_virstor.c:/* Declare malloc(9) label */
geom_virstor.c: {"label", G_FLAG_VERBOSE | G_FLAG_LOADKLD, virstor_main,
geom_virstor.c:static void      virstor_label(struct gctl_req *req);
geom_virstor.c: if (strcmp(name, "label") == 0)
geom_virstor.c:         virstor_label(req);
geom_virstor.c:virstor_label(struct gctl_req *req)

label への入口は存在しているみたいだが、help などにも出て来ない。結構、時間を使ったので、今の時点では諦めることにした。なお、FreeBSD 6.1-RELEASE と FreeBSD 6.2-PRERELEASE で試した。

次回