Solaris


Solaris10

内蔵DISKのミラー化

RAIDについては「RAIDとは」を参照。

1.メタデータベース用のSliceのパーティション切り
今回はSolaris10のOS標準搭載されている機能VolumeManager(通称ボルマン)でソフトウェアRAID1を実施する。
まずミラー化するDISKを確認する。理想は同じベンダーの同じサイズのDISKを2本用意すること。
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
     0. c0t0d0 <Maxtor 6Y120P0 cyl 58851 alt 2 hd 16 sec 255>
        /pci@1f,0/pci@1,1/ide@3/dad@0,0
     1. c0t1d0 <Maxtor 6Y120P0 cyl 58851 alt 2 hd 16 sec 255>
        /pci@1f,0/pci@1,1/ide@3/dad@1,0
c0t0d0とc0t1d0で同じサイズの120GBのDISKが表示された。

メタデバイス状態を管理するデータベースであるmetadbはOSインストール時のパーティション切りで使用すると宣言したSlice7を使用する。
続けてc0t0d0のシステムDISKのパーティショニングを確認し、Part(Slice)7が使用されていない事と使用可能な容量を算出する。

下の例ではSlice7はTagがunassignedで使用可能となっている。
算出方法はSlice2の右側にあるDISKの最大Cylindersサイズから一番最後のSlice3のCylindersサイズを引いた値がまだ使用可容量で
58850-57726=1124が割り当てしていない空き容量となる。
(続き)
Specify disk (enter its number): 0  ←c0t0d0のDISKを選択
selecting c0t0d0
[disk formatted, no defect list found]
Warning: Current Disk has mounted partitions.
/dev/dsk/c0t0d0s0 is currently mounted on /. Please see umount(1M).
/dev/dsk/c0t0d0s1 is currently used by swap. Please see swap(1M).
/dev/dsk/c0t0d0s3 is currently mounted on /export/home. Please see umount(1M).

FORMAT MENU:
      disk       - select a disk
      type       - select (define) a disk type
      partition  - select (define) a partition table
      current    - describe the current disk
      format     - format and analyze the disk
      repair     - repair a defective sector
      show       - translate a disk address
      label      - write label to the disk
      analyze    - surface analysis
      defect     - defect list management
      backup     - search for backup labels
      verify     - read and display labels
      save       - save new disk/partition definitions
      volname    - set 8-character volume name
      !<cmd>     - execute <cmd>, then return
      quit
format> p  ←partitionを選択

PARTITION MENU:
      0      - change `0' partition
      1      - change `1' partition
      2      - change `2' partition
      3      - change `3' partition
      4      - change `4' partition
      5      - change `5' partition
      6      - change `6' partition
      7      - change `7' partition
      select - select a predefined table
      modify - modify a predefined partition table
      name   - name the current table
      print  - display the current table
      label  - write partition map and label to the disk
      !<cmd> - execute <cmd>, then return
      quit
partition> p  ←printを選択
Current partition table (original):
Total disk cylinders available: 58851 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders         Size            Blocks
0       root    wm       0 - 25098       48.83GB    (25099/0/0) 102403920
1       swap    wu   25099 - 27608        4.88GB    (2510/0/0)   10240800
2     backup    wm       0 - 58850      114.49GB    (58851/0/0) 240112080
3       home    wm   27609 - 57726       58.59GB    (30118/0/0) 122881440
4 unassigned    wm       0                0         (0/0/0)            ‰
5 unassigned    wm       0                0         (0/0/0)            ‰
6 unassigned    wm       0                0         (0/0/0)            ‰
7 unassigned    wm       0                0         (0/0/0)             0  ←metadb格納予定スライス
partition>

Slice7のパーティション切りの方法は以下
(続き)
partition> 7  ←Slice7を選択
Part      Tag    Flag     Cylinders         Size            Blocks
7 unassigned    wu       0                0         (0/0/0)             0  ←全く容量を割り当てしていない状態

Enter partition id tag[unassigned]:   ←unassignedのままなのでEnter
Enter partition permission flags[wu]: wm  ←wmを入力
Enter new starting cyl[0]: 57727  ←Slice3のCylindersサイズの最大(右側)に+1足した値の57727を入力
Enter partition size[0b, 0c, 57727e, 0.00mb, 0.00gb]: 58850e  ←Slice2のCylindersサイズの最大値(右側)の58850e(eを付与)を入力
partition>"
Total disk cylinders available: 58851 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders         Size            Blocks
0       root    wm       0 - 25098       48.83GB    (25099/0/0) 102403920
1       swap    wu   25099 - 27608        4.88GB    (2510/0/0)   10240800
2     backup    wm       0 - 58850      114.49GB    (58851/0/0) 240112080
3       home    wm   27609 - 57726       58.59GB    (30118/0/0) 122881440
4 unassigned    wm       0                0         (0/0/0)            ‰
5 unassigned    wm       0                0         (0/0/0)            ‰
6 unassigned    wm       0                0         (0/0/0)            ‰
7 unassigned    wm   57727 - 58850        2.19GB    (1124/0/0)    4585920 ←値が入力されていることを確認、サイズが大きいのはご愛嬌

partition> label   ←パーティションの変更を書き込むのでlabelを入力
Ready to label disk, continue? y
partition q  ←quitを選択
format> q  ←quitを選択
#

3.ミラー先DISKのパーティション切り
SolarisではDISKのパーティション情報を保存し、且つその情報をもとに他のDISKにコピー出来るとても便利なコマンドが存在する。
prtvtocでDISK情報を抜き出し、且つc0t1d0にその情報を書き込む。
# /usr/sbin/prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/c0t1d0s2
fmthard:  New volume table of contents now in place.
# format c0t01d0

partition>"
Current partition table (original):
Total disk cylinders available: 58851 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders         Size            Blocks
0       root    wm       0 - 25098       48.83GB    (25099/0/0) 102403920
1       swap    wu   25099 - 27608        4.88GB    (2510/0/0)   10240800
2     backup    wm       0 - 58850      114.49GB    (58851/0/0) 240112080
3       home    wm   27609 - 57726       58.59GB    (30118/0/0) 122881440
4 unassigned    wu       0                0         (0/0/0)            ‰
5 unassigned    wu       0                0         (0/0/0)            ‰
6 unassigned    wu       0                0         (0/0/0)            ‰
7 unassigned    wm   57727 - 58850        2.19GB    (1124/0/0)    4585920

4.メタDBの作成
metaコマンドのオプション
-a :新しいデータベースデバイスを追加
-f :最初に状態ファイルを作成するときに使用
-c :各デバイスに置く複製の数を指定(省略するとデフォルト値の 1となる )
# metadb -a -f -c 3 c0t0d0s7 c0t1d0s7
# metadb
      flags           first blk       block count
   a        u         16              8192            /dev/dsk/c0t0d0s7
   a        u         8208            8192            /dev/dsk/c0t0d0s7
   a        u         16400           8192            /dev/dsk/c0t0d0s7
   a        u         16              8192            /dev/dsk/c0t1d0s7
   a        u         8208            8192            /dev/dsk/c0t1d0s7
   a        u         16400           8192            /dev/dsk/c0t1d0s7

5.連携(ミラー化)で必要な数値を準備
VolumeManagerでのRAIDを組むには各SliceをメタDBで管理する数値に変換する必要がある。
※が付いている箇所をユニークで任意で決める。
Slice tag c0t0d0(ミラー元) c0t0d0(ミラー元) 連携時に使用する値
0 root d10 ※ d0 ※ d20 ※
1 swap d11 ※ d1 ※ d21 ※
2 backup


3 home d32 ※ d3 ※ d32 ※
4 unassigned Slice4〜6を使用している場合はここの数値も決める。
今回は使用していないので決めない。
5 unassigned
6 unassigned
7 unassigned



5.rootスライスのミラー化実施
metainitコマンドのオプション
-f :基とするDISK側に付けることでc0t0d0s0がミラー元DISKとなる
SunOS リファレンスマニュアル 1M : システム管理コマンド:http://docs.sun.com/app/docs/doc/819-1211/metainit-1m?a=view
# metainit -f d10 1 1 c0t0d0s0
d10: 連結/ストライプがセットアップされます
# metainit d20 1 1 c0t1d0s0
d20: 連結/ストライプがセットアップされます
# metainit d0 -m d10
d0: ミラーがセットアップされます

6.vfstabの確認
OSが起動する際に読み込むマウント情報のファイルが自動で書き換わっていることを確認する。
# cat /etc/vfstab
#device         device          mount           FS      fsck    mount   mount
#to mount       to fsck         point           type    pass    at boot options
#
fd      -       /dev/fd fd      -       no      -
/proc   -       /proc   proc    -       no      -
/dev/dsk/c0t0d0s1  -       -       swap    -       no      -
/dev/md/dsk/d0  /dev/md/rdsk/d0 /       ufs     1       no      -  ←Slice0の/デバイスが/dev/mdとなっている
/dev/dsk/c0t0d0s3 /dev/rdsk/c0t0d0s3 /export/home /export/home    ufs     2       yes    "
/devices        -       /devices        devfs   -       no      -
ctfs    -       /system/contract        ctfs    -       no      -
objfs   -       /system/object  objfs   -       no      -
swap    -       /tmp    tmpfs   -       yes    "

事前の状態は見ていないがこう変更された
/dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0  /       ufs     1       no      -

/dev/md/dsk/d0  /dev/md/rdsk/d0  /       ufs     1       no      -

7.swapのミラー化実施
# metainit -f d11 1 1 c0t0d0s1
d11: 連結/ストライプがセットアップされます
# metainit d21 1 1 c0t1d0s1
d21: 連結/ストライプがセットアップされます
# metainit d1 -m d11
d1: ミラーがセットアップされます

8./export/homeのミラー化実施
# metainit -f d13 1 1 c0t0d0s3
d13: 連結/ストライプがセットアップされます
# metainit d23 1 1 c0t1d0s3
d23: 連結/ストライプがセットアップされます
# metainit d3 -m d13
d3: ミラーがセットアップされます

9.vfstabの書き換え
rootのSlice0は自動で書き換えしてくれるのに別のSliceは自動で実施してくれない。
仕方がないので手動でswapと/export/homeの行を書き換える。
# vi /etc/vfstab
/dev/dsk/c0t0d0s1  -       -       swap    -       no      -

/dev/md/dsk/d1  -       -       swap    -       no      -

/dev/dsk/c0t0d0s3 /dev/rdsk/c0t0d0s3 /export/home /export/home    ufs     2       yes    "

/dev/md/dsk/d3  /dev/md/rdsk/d3 /export/home    ufs     2       yes    "

10.OS再起動
# shutdown -y -i6 -g0

11.ミラー化開始
# metattach d1 d21
d1: サブミラー d21 is attached
# metattach d0 d20
d0: サブミラー d20 is attached
# metattach d3 d32
d3: サブミラー d32 is attached

12.ミラー化確認
状態が再同期中から正常になればミラー化完了です。
ミラー元で障害発生時はミラー先からOSを起動可能となります。
# metastat
d0: ミラー
  サブミラー 0: d10
    状態: 正常        
  サブミラー 1: d20
    状態: 再同期中    
  再同期実行中: 0 % 完了
  パス: 1
  読み込みオプション: roundrobin (デフォルト)
  書き込みオプション: parallel (デフォルト)
  サイズ: 102403920 ブロック (48 GB)

d0: ミラー
  サブミラー 0: d10
    状態: 正常
  サブミラー 1: d20
    状態: 正常
  パス: 1
  読み込みオプション: roundrobin (デフォルト)
  書き込みオプション: parallel (デフォルト)
  サイズ: 102403920 ブロック (48 GB)


先頭のページ 前へ 次へ ページ末尾へ