には現在 2 つのバージョンがあります。 それは、RAID-5 機能を持たない自由に入手可能なバージョンと、 RAID-5 の機能を持つ完全なバージョンです。完全なバージョンは Cybernet Systems Inc. (http://www.cybernet.com) から入手可能です。
vinum_drives="/dev/da1 /dev/da2 /dev/da3 /dev/da4 /dev/da5"
# kldload vinum
また vinum(8) はロードされていなければ kld モジュールを自動的にロードします。
vinum をロードした後、設定を実行する必要があります。すでにインストールが 終わっていれば、次のコマンドにより、 存在するディスク集合から設定を読み出します。
# vinum read /dev/da1 /dev/da2 /dev/da3 /dev/da4 /dev/da5 /dev/da6
このコマンドでは vinum により使われるすべてのデバイスを指定する必要があります。 vinum(8) は、最新の設定ファイルを使用して、 設定をデバイスより読み出します。 引き続いて、より古い設定から得られた追加情報があれば、設定を更新します。 このようなコマンドは通常、起動ファイル /etc/rc に埋めこまれています。
設定を作成する方法については vinum(8) を参照してください。
kld をアンロードするには、まず kldstat で Id フィールドを探します。
# kldstat Id Refs Address Size Name 1 2 0xf0100000 1c7de8 kernel 2 1 0xf0f5b000 b0000 Vinum.ko
モジュールをアンロードするには kldunload を使います:
# kldunload -n Vinum
kld をアンロードできるのはアイドル中、言い替えると ボリュームがマウントされておらず、他の プログラムのインスタンスがアクティブでない時のみです。 kld のアンロードはボリューム内のデータを破壊しません。
一般に、 disklabel(8) は vinum ボリュームにとって有用な効果はありません。もし動作させると、 disklabel は 3 つのパーティション a, b, c を表示し、fstype を除いて これらは同じになるでしょう。例えば以下のように表示されます:
3 partitions: # size offset fstype [fsize bsize bps/cpg] a: 2048 0 4.2BSD 1024 8192 0 # (Cyl. 0 - 0) b: 2048 0 swap # (Cyl. 0 - 0) c: 2048 0 unused 0 0 # (Cyl. 0 - 0)
は DIOCWDINFO と DIOCSDINFO の ioctl を無視します。すなわち何も変更しません。 従って、ディスクラベルを変更しようとすると何の表示もなく無視されるでしょう。
名前には空白でない任意の文字を使えますが、英数字とアンダスコアのみに 制限することを勧めます。ボリューム、プレックス、サブディスクの名前には 64 文字まで、またドライブの名前には 32 文字まで使えます。 ボリュームとプレックスの名前を選ぶ時には、 自動的に生成されるプレックス名とサブボリューム名が、 これらの元となる名前よりも長くなることに注意してください。
使用例
オブジェクトが vinum(8) の設定ファイル例の節に説明されているものであるとします。 ディレクトリ /dev/vinum は次のように見えるでしょう:
# ls -lR /dev/vinum/ /dev/rvinum total 5 brwxr-xr-- 1 root wheel 25, 2 Mar 30 16:08 concat brwx------ 1 root wheel 25, 0x40000000 Mar 30 16:08 control drwxrwxrwx 2 root wheel 512 Mar 30 16:08 drive drwxrwxrwx 2 root wheel 512 Mar 30 16:08 plex drwxrwxrwx 2 root wheel 512 Mar 30 16:08 rvol drwxrwxrwx 2 root wheel 512 Mar 30 16:08 sd brwxr-xr-- 1 root wheel 25, 3 Mar 30 16:08 strcon brwxr-xr-- 1 root wheel 25, 1 Mar 30 16:08 stripe brwxr-xr-- 1 root wheel 25, 0 Mar 30 16:08 tinyvol drwxrwxrwx 7 root wheel 512 Mar 30 16:08 vol brwxr-xr-- 1 root wheel 25, 4 Mar 30 16:08 vol5 /dev/vinum/drive: total 0 brw-r----- 1 root operator 4, 15 Oct 21 16:51 drive2 brw-r----- 1 root operator 4, 31 Oct 21 16:51 drive4 /dev/vinum/plex: total 0 brwxr-xr-- 1 root wheel 25, 0x10000002 Mar 30 16:08 concat.p0 brwxr-xr-- 1 root wheel 25, 0x10010002 Mar 30 16:08 concat.p1 brwxr-xr-- 1 root wheel 25, 0x10000003 Mar 30 16:08 strcon.p0 brwxr-xr-- 1 root wheel 25, 0x10010003 Mar 30 16:08 strcon.p1 brwxr-xr-- 1 root wheel 25, 0x10000001 Mar 30 16:08 stripe.p0 brwxr-xr-- 1 root wheel 25, 0x10000000 Mar 30 16:08 tinyvol.p0 brwxr-xr-- 1 root wheel 25, 0x10000004 Mar 30 16:08 vol5.p0 brwxr-xr-- 1 root wheel 25, 0x10010004 Mar 30 16:08 vol5.p1 /dev/vinum/rvol: total 0 crwxr-xr-- 1 root wheel 91, 2 Mar 30 16:08 concat crwxr-xr-- 1 root wheel 91, 3 Mar 30 16:08 strcon crwxr-xr-- 1 root wheel 91, 1 Mar 30 16:08 stripe crwxr-xr-- 1 root wheel 91, 0 Mar 30 16:08 tinyvol crwxr-xr-- 1 root wheel 91, 4 Mar 30 16:08 vol5 /dev/vinum/sd: total 0 brwxr-xr-- 1 root wheel 25, 0x20000002 Mar 30 16:08 concat.p0.s0 brwxr-xr-- 1 root wheel 25, 0x20100002 Mar 30 16:08 concat.p0.s1 brwxr-xr-- 1 root wheel 25, 0x20010002 Mar 30 16:08 concat.p1.s0 brwxr-xr-- 1 root wheel 25, 0x20000003 Mar 30 16:08 strcon.p0.s0 brwxr-xr-- 1 root wheel 25, 0x20100003 Mar 30 16:08 strcon.p0.s1 brwxr-xr-- 1 root wheel 25, 0x20010003 Mar 30 16:08 strcon.p1.s0 brwxr-xr-- 1 root wheel 25, 0x20110003 Mar 30 16:08 strcon.p1.s1 brwxr-xr-- 1 root wheel 25, 0x20000001 Mar 30 16:08 stripe.p0.s0 brwxr-xr-- 1 root wheel 25, 0x20100001 Mar 30 16:08 stripe.p0.s1 brwxr-xr-- 1 root wheel 25, 0x20000000 Mar 30 16:08 tinyvol.p0.s0 brwxr-xr-- 1 root wheel 25, 0x20100000 Mar 30 16:08 tinyvol.p0.s1 brwxr-xr-- 1 root wheel 25, 0x20000004 Mar 30 16:08 vol5.p0.s0 brwxr-xr-- 1 root wheel 25, 0x20100004 Mar 30 16:08 vol5.p0.s1 brwxr-xr-- 1 root wheel 25, 0x20010004 Mar 30 16:08 vol5.p1.s0 brwxr-xr-- 1 root wheel 25, 0x20110004 Mar 30 16:08 vol5.p1.s1 /dev/vinum/vol: total 5 brwxr-xr-- 1 root wheel 25, 2 Mar 30 16:08 concat drwxr-xr-x 4 root wheel 512 Mar 30 16:08 concat.plex brwxr-xr-- 1 root wheel 25, 3 Mar 30 16:08 strcon drwxr-xr-x 4 root wheel 512 Mar 30 16:08 strcon.plex brwxr-xr-- 1 root wheel 25, 1 Mar 30 16:08 stripe drwxr-xr-x 3 root wheel 512 Mar 30 16:08 stripe.plex brwxr-xr-- 1 root wheel 25, 0 Mar 30 16:08 tinyvol drwxr-xr-x 3 root wheel 512 Mar 30 16:08 tinyvol.plex brwxr-xr-- 1 root wheel 25, 4 Mar 30 16:08 vol5 drwxr-xr-x 4 root wheel 512 Mar 30 16:08 vol5.plex /dev/vinum/vol/concat.plex: total 2 brwxr-xr-- 1 root wheel 25, 0x10000002 Mar 30 16:08 concat.p0 drwxr-xr-x 2 root wheel 512 Mar 30 16:08 concat.p0.sd brwxr-xr-- 1 root wheel 25, 0x10010002 Mar 30 16:08 concat.p1 drwxr-xr-x 2 root wheel 512 Mar 30 16:08 concat.p1.sd /dev/vinum/vol/concat.plex/concat.p0.sd: total 0 brwxr-xr-- 1 root wheel 25, 0x20000002 Mar 30 16:08 concat.p0.s0 brwxr-xr-- 1 root wheel 25, 0x20100002 Mar 30 16:08 concat.p0.s1 /dev/vinum/vol/concat.plex/concat.p1.sd: total 0 brwxr-xr-- 1 root wheel 25, 0x20010002 Mar 30 16:08 concat.p1.s0 /dev/vinum/vol/strcon.plex: total 2 brwxr-xr-- 1 root wheel 25, 0x10000003 Mar 30 16:08 strcon.p0 drwxr-xr-x 2 root wheel 512 Mar 30 16:08 strcon.p0.sd brwxr-xr-- 1 root wheel 25, 0x10010003 Mar 30 16:08 strcon.p1 drwxr-xr-x 2 root wheel 512 Mar 30 16:08 strcon.p1.sd /dev/vinum/vol/strcon.plex/strcon.p0.sd: total 0 brwxr-xr-- 1 root wheel 25, 0x20000003 Mar 30 16:08 strcon.p0.s0 brwxr-xr-- 1 root wheel 25, 0x20100003 Mar 30 16:08 strcon.p0.s1 /dev/vinum/vol/strcon.plex/strcon.p1.sd: total 0 brwxr-xr-- 1 root wheel 25, 0x20010003 Mar 30 16:08 strcon.p1.s0 brwxr-xr-- 1 root wheel 25, 0x20110003 Mar 30 16:08 strcon.p1.s1 /dev/vinum/vol/stripe.plex: total 1 brwxr-xr-- 1 root wheel 25, 0x10000001 Mar 30 16:08 stripe.p0 drwxr-xr-x 2 root wheel 512 Mar 30 16:08 stripe.p0.sd /dev/vinum/vol/stripe.plex/stripe.p0.sd: total 0 brwxr-xr-- 1 root wheel 25, 0x20000001 Mar 30 16:08 stripe.p0.s0 brwxr-xr-- 1 root wheel 25, 0x20100001 Mar 30 16:08 stripe.p0.s1 /dev/vinum/vol/tinyvol.plex: total 1 brwxr-xr-- 1 root wheel 25, 0x10000000 Mar 30 16:08 tinyvol.p0 drwxr-xr-x 2 root wheel 512 Mar 30 16:08 tinyvol.p0.sd /dev/vinum/vol/tinyvol.plex/tinyvol.p0.sd: total 0 brwxr-xr-- 1 root wheel 25, 0x20000000 Mar 30 16:08 tinyvol.p0.s0 brwxr-xr-- 1 root wheel 25, 0x20100000 Mar 30 16:08 tinyvol.p0.s1 /dev/vinum/vol/vol5.plex: total 2 brwxr-xr-- 1 root wheel 25, 0x10000004 Mar 30 16:08 vol5.p0 drwxr-xr-x 2 root wheel 512 Mar 30 16:08 vol5.p0.sd brwxr-xr-- 1 root wheel 25, 0x10010004 Mar 30 16:08 vol5.p1 drwxr-xr-x 2 root wheel 512 Mar 30 16:08 vol5.p1.sd /dev/vinum/vol/vol5.plex/vol5.p0.sd: total 0 brwxr-xr-- 1 root wheel 25, 0x20000004 Mar 30 16:08 vol5.p0.s0 brwxr-xr-- 1 root wheel 25, 0x20100004 Mar 30 16:08 vol5.p0.s1 /dev/vinum/vol/vol5.plex/vol5.p1.sd: total 0 brwxr-xr-- 1 root wheel 25, 0x20010004 Mar 30 16:08 vol5.p1.s0 brwxr-xr-- 1 root wheel 25, 0x20110004 Mar 30 16:08 vol5.p1.s1 /dev/rvinum: crwxr-xr-- 1 root wheel 91, 2 Mar 30 16:08 rconcat crwxr-xr-- 1 root wheel 91, 3 Mar 30 16:08 rstrcon crwxr-xr-- 1 root wheel 91, 1 Mar 30 16:08 rstripe crwxr-xr-- 1 root wheel 91, 0 Mar 30 16:08 rtinyvol crwxr-xr-- 1 root wheel 91, 4 Mar 30 16:08 rvol5
プレックスやサブディスクを分離した場合には、 この名前は予約されたままになります。 サブディスクはそれが配置されているディスクの名を元に名付けられ、 プレックスはサブディスクの名を元に名付けられています。 この対応付けにはまだ考慮の余地があります。
各 オブジェクトには、オブジェクトに関連づけられた状態があります。 はオブジェクトに対する操作を決定するためにこの状態を利用します。
以下の状態は、プレックスの少なくとも一部は起動していることを表します。
以下の状態は、無効なデータを表します。
以下の状態は、有効だがアクセスできないデータを表します。
以下の状態は、有効なデータを持つアクセス可能なサブディスクを表します。
に関する問題の解決は難しい事かもしれません。この節ではいくつかのアプローチ を紹介します。
の設定は、比較的 (非常に) 問題にぶつかりやすいと言えます。 問題が起きたら、まず行うべきことは設定情報の 更新を次のようにして止めることです。
# vinum setdaemon 4
これにより更新とディスク上の設定の更なる破壊を止めるでしょう。
次に、ディスク上の設定を確認します。Bourne タイプのシェルで次のようにします。
# rm -f log # for i in /dev/da0s1h /dev/da1s1h /dev/da2s1h /dev/da3s1h; do > (dd if=/dev/da1h skip=8 count=6|tr -d '\000-\011\200-\377'; echo) >> log > done
デバイスの名前は、すべての スライスの名前です。 そうすると、 log ファイルには次のような内容が入っているはずです。
IN VINOpanic.lemis.comdrive1}6E7~^K6T^Yfoovolume obj state up volume src state up volume raid state down volume r state down volume foo state up plex name obj.p0 state corrupt org concat vol obj plex name obj.p1 state corrupt org striped 128b vol obj plex name src.p0 state corrupt org striped 128b vol src plex name src.p1 state up org concat vol src plex name raid.p0 state faulty org disorg vol raid plex name r.p0 state faulty org disorg vol r plex name foo.p0 state up org concat vol foo plex name foo.p1 state faulty org concat vol foo sd name obj.p0.s0 drive drive2 plex obj.p0 state reborn len 409600b driveoffset 265b plexoffset 0b sd name obj.p0.s1 drive drive4 plex obj.p0 state up len 409600b driveoffset 265b plexoffset 409600b sd name obj.p1.s0 drive drive1 plex obj.p1 state up len 204800b driveoffset 265b plexoffset 0b sd name obj.p1.s1 drive drive2 plex obj.p1 state reborn len 204800b driveoffset 409865b plexoffset 128b sd name obj.p1.s2 drive drive3 plex obj.p1 state up len 204800b driveoffset 265b plexoffset 256b sd name obj.p1.s3 drive drive4 plex obj.p1 state up len 204800b driveoffset 409865b plexoffset 384b
最初の行は ラベルを含んでおり、 IN VINO というテキストで始まっている必要があります。 この行にはシステムの名前も含まれています。正確な定義は /usr/src/sys/dev/vinum/vinumvar.h に記載されています。 保存された設定はこの行の途中から volume obj state up というテキストで始まっています。これはディスクのセクタ 9 から始まっています。 それ以降の出力はディスク上の設定の残りの部分を示しています。もしかすると すべての設定を見るためには、 dd コマンドの count の引数を増やす必要があるかもしれません。
すべてのディスク上の設定は同じであることが必要です。そうでない場合には、 log ファイルの正確な中身とともに問題を報告して下さい。 ディスク上の設定を回復するためにできることはおそらくほとんどないでしょうが、 もしオブジェクトを生成した時に使ったファイルのコピーを保存してあれば、 オブジェクトを再生成できるでしょう。 create コマンドはサブディスクのデータを変更しないので、このコマンドはデータの破壊を 引き起こしません。この種の問題に出会った場合には、 resetconfig コマンドを使う必要があるかもしれません。
に由来すると思われるパニックを解析するには、 デバッグ用カーネルを構築する必要 があります。デバッグ用カーネルの構築の詳細については、オンラインハンドブック を参照してください。 カーネルロード可能モジュールのシンボル情報を得るには、更に作業が必要です。
echo add-symbol-file /modules/vinum.ko \ 0x`objdump --section-headers /modules/vinum.ko \ | grep ' .text' \ | awk '{print $4}'`+`kldstat \ | grep vinum | awk '{print $3}'`
これをファイルに格納し、実行可能にし、実行するのが最も簡単です。 出力は次のようになるでしょう:
add-symbol-file /modules/vinum.ko 0x00005e24+0xf0f4e000
$ file /modules/vinum.ko /modules/vinum.ko: ELF 32-bit LSB shared object, Intel 80386, version 1 (FreeBSD), not stripped
その出力が /modules/vinum.ko is stripped だった場合、strip されていないバージョンを見つける必要が あります。通常、 /usr/obj/sys/modules/vinum/vinum.ko の中 ( make world を用いて を構築した場合) か /usr/src/sys/modules/vinum/vinum.ko の中 (このディレクトリで を構築した場合) にあります。
gdb -k
gdb は自動的に接続を確立します。リモートマシンはその時点で gdb が動作中でなければなりません。この .gdbinit ファイルはシリアル接続が 38400 bps で動作するものと期待しています。 別のスピードで動作させたい場合には、このファイルを適切に編集してください ( remotebaud に関する記述を探してください)。
(kgdb) add-symbol-file /usr/src/sys/modules/vinum/vinum.ko 0x00005e24+0xf0f4e000 add symbol table from file "/usr/src/sys/modules/vinum/vinum.ko" at text_addr = 0xf0f53e24? (y or n) y (kgdb) bt #0 Debugger (msg=0xf0f661ac "vinum debug") at ../../i386/i386/db_interface.c:318 #1 0xf0f60a7c in vinumioctl (dev=0x40001900, cmd=0xc008464b, data=0xf6923ed0 "", flag=0x3, p=0xf688e6c0) at /usr/src/sys/modules/vinum/../../dev/vinum/vinumioctl.c:109 #2 0xf01833b7 in spec_ioctl (ap=0xf6923e0c) at ../../miscfs/specfs/spec_vnops.c:424 #3 0xf0182cc9 in spec_vnoperate (ap=0xf6923e0c) at ../../miscfs/specfs/spec_vnops.c:129 #4 0xf01eb3c1 in ufs_vnoperatespec (ap=0xf6923e0c) at ../../ufs/ufs/ufs_vnops.c:2312 #5 0xf017dbb1 in vn_ioctl (fp=0xf1007ec0, com=0xc008464b, data=0xf6923ed0 "", p=0xf688e6c0) at vnode_if.h:395 #6 0xf015dce0 in ioctl (p=0xf688e6c0, uap=0xf6923f84) at ../../kern/sys_generic.c:473 #7 0xf0214c0b in syscall (frame={tf_es = 0x27, tf_ds = 0x27, tf_edi = 0xefbfcff8, tf_esi = 0x1, tf_ebp = 0xefbfcf90, tf_isp = 0xf6923fd4, tf_ebx = 0x2, tf_edx = 0x804b614, tf_ecx = 0x8085d10, tf_eax = 0x36, tf_trapno = 0x7, tf_err = 0x2, tf_eip = 0x8060a34, tf_cs = 0x1f, tf_eflags = 0x286, tf_esp = 0xefbfcf78, tf_ss = 0x27}) at ../../i386/i386/trap.c:1100 #8 0xf020a1fc in Xint0x80_syscall () #9 0x804832d in ?? () #10 0x80482ad in ?? () #11 0x80480e9 in ?? () (kgdb) f 1 #1 0xf0f60a7c in vinumioctl (dev=0x40001900, cmd=0xc008464b, data=0xf6923ed0 "", flag=0x3, p=0xf688e6c0) at /usr/src/sys/modules/vinum/../../dev/vinum/vinumioctl.c:109 Source file is more recent than executable. 109 Debugger ("vinum debug");
デバッガから実行開始する時、フレーム 1 のソース (上の例では最後の部分) に次の 文字列が含まれていることは重要です。
Debugger ("vinum debug");
これはアドレス定義が正しいことを示しています。
最初の調査で最も重要な情報は、上に示されているように bt (バックトレース) コマンドの出力です。