後日追記: ccdを使う方法の解説が末尾にあるが、この方法は途中で やめた。やっぱりgvinumの使用は継続。ただ、disklabelを書く方法の 説明は意味があるので残すことにする。
「gvinumだめだめ」を書いたあとも色々 試行錯誤を繰り返した。壊れて交換した方のdriveにあったsubdiskを 「gvinum rm」しようとするとpanicするという風に書いたが、 あのあとsubdiskではなく、drive からまるごと「gvinum rm -r」してしまえば 安全に削除できることが分かってvolumeの再構築とかしたのだが、 そのあとさらに致命的な問題が発覚。
「gvinum attach」がない
attachできなきゃ、ミラーの再構成できないじゃんか。おまけに 5-STABLEにコードが足される気配も無し。そんなにvinum人口少ないのか?
よし、捨てるか。
論理ボリューム+ミラー管理の機能で群を抜いて使いやすかったが、 使えねーんじゃしょうがねえ。捨てる。FreeBSDに移植されたと聞いた raidframeにしようかとも思ったが、5.3Rには入ってなかった。てことで、 RAID1(ミラーリング)はraidframeに任せることにして、普通のufsパーティショ ンで管理するか。ただし問題は、必要なディレクトリ毎に たっぷりvinum volumeを作っているから、普通のufs的disklabelでパーティション を作ったのではパーティション数が足りなくなってしまう。ということで そのための工夫。
作戦としては、なんらかの上位レイヤファイルシステムを使う。たとえばccd。 「いまさらccd」だが、vinumがgvinumになってだめだめになったのだから仕方な い。ccdは "poor man's raid" というようにミラー化もできるが、それと同じ要領で 単一パーティションも持てるのが魅力。ミラーリングは、ataraidに任せること にするのでここでは単一ドライブでccdを構成。ccd内にdisklabelを書けるので 7個パーティションが持てる。bパーティションが気持ち悪いとしても6個持てる。 おまけに、fdisk的スライスを4個持てるのでさらに4倍。24個もあれば 既存のvinum volumeを賄い切れるじゃろ。
こんな感じの乗り換えを想定。
まずは ad2s1h のfstypeを4.2BSDにする。
# disklabel -e ad2s1
ディスクラベルエディタでhパーティションをこんな感じに。
h: 302795064 18874368 4.2BSD 0 0 0
/etc/ccd.conf
を作成し、/dev/ad2s1h
単一デバイスでccd2を作成。以下のように記述。
# # /etc/ccd.conf # Configuration file for concatenated disk devices # # ccd ileave flags component devices ccd2 128 0 /dev/ad2s1h
リブート時には自動的にccd2が生成されるが、一発目は 手動で。
# ccdconfig -C -f /etc/ccd.conf
ccd2ができたかどうか確認。
# ccdconfig -g
ccd2 128 0 /dev/ad2s1h
最初はスライスは1個だけ存在している。fdiskで確認。
cylinders=18848 heads=255 sectors/track=63 (16065 blks/cyl) Figures below won't work with BIOS for partitions not in cyl 1 parameters to be used for BIOS calculations are: cylinders=18848 heads=255 sectors/track=63 (16065 blks/cyl) Media sector size is 512 Warning: BIOS sector numbering starts with sector 1 Information from DOS bootblock is: The data for partition 1 is: sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD) start 63, size 302792994 (147848 Meg), flag 80 (active) beg: cyl 0/ head 1/ sector 1; end: cyl 415/ head 253/ sector 63 The data for partition 2 is: <UNUSED> The data for partition 3 is: <UNUSED> The data for partition 4 is: <UNUSED>
今回は、これを二分割。sizeが302792994なので、適当に 2で割って151396497ずつにでもするか。
# fdisk -u ccd2 : : Do you want to change our idea of what BIOS thinks ? [n] n
としたあと partition 1 と partition 2 のパラメータを変更する。 ただし、ブロック数を151396497と入れると、「シリンダ境界で切りのいい 数次に変えるか?」と聞かれるのでそうしてもらった方が良いだろう。 まこのへん、直観で操作してくれ。大体分かるはず。すると、 こんなスライス分割状態になる。
# fdisk ccd2
:
:
The data for partition 1 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 63, size 146785842 (71672 Meg), flag 80 (active)
beg: cyl 0/ head 1/ sector 1;
end: cyl 944/ head 254/ sector 63
The data for partition 2 is:
sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
start 146785905, size 156007152 (76175 Meg), flag 0
beg: cyl 945/ head 0/ sector 1;
end: cyl 415/ head 253/ sector 63
The data for partition 3 is:
<UNUSED>
The data for partition 4 is:
<UNUSED>
FreeBSD5.3Rでは初期ラベルを disklabel -w で書いてくれる。 楽ちん。
# disklabel -w ccd2s1 # disklabel -w ccd2s2
としたあと実際にディスクラベルを編集。
# disklabel -e ccd2s1 # disklabel -e ccd2s2
で a, b, d, e, f, g, h パーティションの offset と size を いじって各 vinum volume の引っ越し先となるパーティションを作ろう。 たとえば、disklabel -w による初期ラベルが
8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 146785826 16 4.2BSD 2048 16384 28552 c: 146785842 0 unused 0 0
ってな具合のやつをごにょごにょして
a | b | e | f |
---|---|---|---|
30GB | 15GB | 10GB | 15GB |
に設定するとこんな感じになる。
8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 62914560 16 4.2BSD 2048 16384 28552 b: 31457280 62914576 4.2BSD 2048 16384 28552 c: 146785842 0 unused 0 0 e: 20971520 94371856 4.2BSD 2048 16384 28552 f: 31442466 115343376 4.2BSD 2048 16384 28552
512バイトが1単位。
newfs -U /dev/ccd2s??
を繰り返して適当な
ディレクトリにマウントして tar あるいは、
GNU cp で cp -ax
とかしてデータを移行。
shutdown でシングルユーザモードに落とし、fstabを 書き換えてマルチユーザモードに戻る、なんてことを繰り返しておしまい。
ad0側の gvinum を全く使わないように移行できたら、gvinumを
全部廃止してad0もccdにして、今回ccd2にコピーしたデータをまたまた
ad0側(つまりccd0)に書き戻す。ではまた来週(^^)/~
。
叱咤激励感想ツッコミはゲストブックへ
Generated with mkdiary.rb