gvinumの捨て方 - その1

後日追記: 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を賄い切れるじゃろ。

前提

こんな感じの乗り換えを想定。

実践

  1. ad2s1hをccd2にする

    まずは 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
    
  2. ccd2に2つスライスを作る

    最初はスライスは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>
    
  3. ccd2s1 と ccd2s2 にパーティションを作成

    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
    

    ってな具合のやつをごにょごにょして

    abef
    30GB15GB10GB15GB

    に設定するとこんな感じになる。

    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単位。

  4. ファイルを gvinum から ccd に移動

    newfs -U /dev/ccd2s?? を繰り返して適当な ディレクトリにマウントして tar あるいは、 GNU cp で cp -ax とかしてデータを移行。

  5. fstab を更新してマウントし直し

    shutdown でシングルユーザモードに落とし、fstabを 書き換えてマルチユーザモードに戻る、なんてことを繰り返しておしまい。

次は

ad0側の gvinum を全く使わないように移行できたら、gvinumを 全部廃止してad0もccdにして、今回ccd2にコピーしたデータをまたまた ad0側(つまりccd0)に書き戻す。ではまた来週(^^)/~


叱咤激励感想ツッコミはゲストブック

Generated with mkdiary.rb
yuuji@example.org
Fingerprint16 = FF F9 FF CC E0 FE 5C F7 19 97 28 24 EC 5D 39 BA
HIROSE Yuuji - ASTROLOGY / BIKE / EPO / GUEST BOOK / YaTeX [Tweet]