基礎的なことなんだろうなと思われるんだけども、SVMによるOSミラー構築手順なんかを押さえてみる。
今回やろうとしているのは、上図にあるとおりOSディスクのミラーリング。先日購入したSun Fire V125にはディスクが2本搭載されており、いずれも容量は72GBとなっている。この中の左側のディスクにSolaris10をインストールしたばかりの状態になっているということで。
普通、IAサーバを構築する際はハードウェアRAIDを使うことが多いのだけど、何故かSolarisはこのソフトウェアRAIDを使用するケースが非常に多い。正直、ハードウェアRAIDを使用するケースを聞いたことがない。ということで、恐らく押さえておかないと後々きついよなーと感じたので記事に起こしたしだいです。
まず、Solaris10を導入したディスクのパーティションテーブルを確認しておく。
bash-3.2# format
Searching for disks…doneAVAILABLE DISK SELECTIONS:
0. c1t0d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424>
/pci@1c,600000/scsi@2/sd@0,0
1. c1t1d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424>
/pci@1c,600000/scsi@2/sd@1,0
Specify disk (enter its number): 0
selecting c1t0d0
[disk formatted]
Warning: Current Disk has mounted partitions.
/dev/dsk/c1t0d0s0 is currently mounted on /. Please see umount(1M).
/dev/dsk/c1t0d0s1 is currently mounted on /var. Please see umount(1M).
/dev/dsk/c1t0d0s3 is currently used by swap. Please see swap(1M).
/dev/dsk/c1t0d0s7 is currently mounted on /export/home. Please see umount(1M).format> p
partition> p
Current partition table (original):
Total disk cylinders available: 14087 + 2 (reserved cylinders)Part Tag Flag Cylinders Size Blocks
0 root wm 825 – 4588 18.26GB (3764/0/0) 38302464
1 var wm 4589 – 7886 16.00GB (3298/0/0) 33560448
2 backup wm 0 – 14086 68.35GB (14087/0/0) 143349312
3 swap wu 0 – 824 4.00GB (825/0/0) 8395200
4 unassigned wm 14070 – 14082 64.59MB (13/0/0) 132288
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 home wm 7887 – 14069 30.00GB (6183/0/0) 62918208partition> quit
format> quit
ミラーリングするディスクのパーティションテーブルも確認しておく。
bash-3.2# format
Searching for disks…doneAVAILABLE DISK SELECTIONS:
0. c1t0d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424>
/pci@1c,600000/scsi@2/sd@0,0
1. c1t1d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424>
/pci@1c,600000/scsi@2/sd@1,0
Specify disk (enter its number): 1
selecting c1t1d0
[disk formatted]format> p
partition> p
Current partition table (original):
Total disk cylinders available: 14087 + 2 (reserved cylinders)Part Tag Flag Cylinders Size Blocks
0 root wm 0 0 (0/0/0) 0
1 swap wu 0 0 (0/0/0) 0
2 backup wu 0 – 14086 68.35GB (14087/0/0) 143349312
3 unassigned wm 0 0 (0/0/0) 0
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 usr wm 0 – 14086 68.35GB (14087/0/0) 143349312
7 unassigned wm 0 0 (0/0/0) 0partition> quit
format> quit
当然だけど、パーティションテーブルの構造は全然違う。そもそも今回の場合、中古の機種を購入していた為、元々使われていたパーティションテーブルがそのままのっていたものと考えられるのだけど、次のコマンドで全てc1t0d0→c1t1d0に対してパーティションテーブルの同期を行う。
bash-3.2# prtvtoc /dev/rdsk/c1t0d0s2 | fmthard -s – /dev/rdsk/c1t1d0s2
fmthard: New volume table of contents now in place.
bash-3.2#
実行前はこんなパーティションテーブルだったのが
bash-3.2# prtvtoc /dev/rdsk/c1t1d0s2
* /dev/rdsk/c1t1d0s2 partition map
*
* Dimensions:
* 512 bytes/sector
* 424 sectors/track
* 24 tracks/cylinder
* 10176 sectors/cylinder
* 14089 cylinders
* 14087 accessible cylinders
*
* Flags:
* 1: unmountable
* 10: read-only
*
* First Sector Last
* Partition Tag Flags Sector Count Sector Mount Directory
2 5 01 0 143349312 143349311
6 4 00 0 143349312 143349311
bash-3.2#
以下のようになる。
bash-3.2# prtvtoc /dev/rdsk/c1t1d0s2
* /dev/rdsk/c1t1d0s2 partition map
*
* Dimensions:
* 512 bytes/sector
* 424 sectors/track
* 24 tracks/cylinder
* 10176 sectors/cylinder
* 14089 cylinders
* 14087 accessible cylinders
*
* Flags:
* 1: unmountable
* 10: read-only
*
* Unallocated space:
* First Sector Last
* Sector Count Sector
* 143308608 40704 143349311
*
* First Sector Last
* Partition Tag Flags Sector Count Sector Mount Directory
0 2 00 8395200 38302464 46697663
1 7 00 46697664 33560448 80258111
2 5 00 0 143349312 143349311
3 3 01 0 8395200 8395199
4 0 00 143176320 132288 143308607
7 8 00 80258112 62918208 143176319
bash-3.2#
SVMはその構成データをメタDBという形で管理する。今回の場合、パーティション番号4番に対して作成していたスライスに対してこれを構成する。
各ディスクごとにmetadbコマンドを使用して、2つずつのメタDBを作成した。メタDBの数は、ディスク搭載本数によって推奨値が決められていたように記憶してるけど、ちょっと見つけられていない。。(これだと少々少なかったような気がする・・)
bash-3.2# metadb -af -c 2 /dev/dsk/c1t0d0s4
bash-3.2# metadb -af -c 2 /dev/dsk/c1t1d0s4
bash-3.2# metadb
flags first blk block count
a u 16 8192 /dev/dsk/c1t0d0s4
a u 8208 8192 /dev/dsk/c1t0d0s4
a u 16 8192 /dev/dsk/c1t1d0s4
a u 8208 8192 /dev/dsk/c1t1d0s4
bash-3.2#
現在使用中のディスクも含め、どんどんディスクをSVM管轄に含めていきます。ただし、この時点ではまだ2本のディスクをミラー化してはいません。各メタボリュームは正ディスクしかアサインしていません。
bash-3.2# metainit -f d10 1 1 /dev/dsk/c1t0d0s0
d10: Concat/Stripe is setup
bash-3.2#
bash-3.2# metainit -f d20 1 1 /dev/dsk/c1t1d0s0
d20: Concat/Stripe is setup
bash-3.2#
bash-3.2# metainit -f d0 -m d10
d0: Mirror is setup
bash-3.2#
bash-3.2# metainit -f d11 1 1 /dev/dsk/c1t0d0s1
d11: Concat/Stripe is setup
bash-3.2#
bash-3.2# metainit -f d21 1 1 /dev/dsk/c1t1d0s1
d21: Concat/Stripe is setup
bash-3.2#
bash-3.2# metainit -f d1 -m d11
d1: Mirror is setup
bash-3.2#
bash-3.2#
bash-3.2# metainit -f d13 1 1 /dev/dsk/c1t0d0s3
d13: Concat/Stripe is setup
bash-3.2#
bash-3.2# metainit -f d23 1 1 /dev/dsk/c1t1d0s3
d23: Concat/Stripe is setup
bash-3.2#
bash-3.2# metainit -f d3 -m d13
d3: Mirror is setup
bash-3.2#
bash-3.2#
bash-3.2# metainit -f d17 1 1 /dev/dsk/c1t0d0s7
d17: Concat/Stripe is setup
bash-3.2#
bash-3.2# metainit -f d27 1 1 /dev/dsk/c1t1d0s7
d27: Concat/Stripe is setup
bash-3.2#
bash-3.2# metainit -f d7 -m d17
d7: Mirror is setup
bash-3.2#
メタボリュームと各物理パーティションがSVM管轄になったかどうかを確認。
bash-3.2# metastat
d7: Mirror
Submirror 0: d17
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 62918208 blocks (30 GB)d17: Submirror of d7
State: Okay
Size: 62918208 blocks (30 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s7 0 No Okay Yesd3: Mirror
Submirror 0: d13
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 8395200 blocks (4.0 GB)d13: Submirror of d3
State: Okay
Size: 8395200 blocks (4.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s3 0 No Okay Yesd1: Mirror
Submirror 0: d11
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 33560448 blocks (16 GB)d11: Submirror of d1
State: Okay
Size: 33560448 blocks (16 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s1 0 No Okay Yesd0: Mirror
Submirror 0: d10
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 38302464 blocks (18 GB)d10: Submirror of d0
State: Okay
Size: 38302464 blocks (18 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s0 0 No Okay Yesd27: Concat/Stripe
Size: 62918208 blocks (30 GB)
Stripe 0:
Device Start Block Dbase Reloc
c1t1d0s7 0 No Yesd23: Concat/Stripe
Size: 8395200 blocks (4.0 GB)
Stripe 0:
Device Start Block Dbase Reloc
c1t1d0s3 0 No Yesd21: Concat/Stripe
Size: 33560448 blocks (16 GB)
Stripe 0:
Device Start Block Dbase Reloc
c1t1d0s1 0 No Yesd20: Concat/Stripe
Size: 38302464 blocks (18 GB)
Stripe 0:
Device Start Block Dbase Reloc
c1t1d0s0 0 No YesDevice Relocation Information:
Device Reloc Device ID
c1t1d0 Yes id1,sd@SFUJITSU_MAW3073NCSUN72G_000748B0PD9D____DAN0P7B0PD9D
c1t0d0 Yes id1,sd@SFUJITSU_MAW3073NCSUN72G_000747B0PAB1____DAN0P7B0PAB1
起動ボリュームを、それまでの物理パーティションから、メタボリュームへ変更するコマンドを撃つ。/etc/vfstabファイルを参照すると、ルートパーティション設定が変更されていることを確認。
bash-3.2# metaroot d0
bash-3.2#
bash-3.2# 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/c1t0d0s3 – – swap – no –
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no –
/dev/dsk/c1t0d0s1 /dev/rdsk/c1t0d0s1 /var ufs 1 no –
/dev/dsk/c1t0d0s7 /dev/rdsk/c1t0d0s7 /export/home ufs 2 yes –
/devices – /devices devfs – no –
sharefs – /etc/dfs/sharetab sharefs – no –
ctfs – /system/contract ctfs – no –
objfs – /system/object objfs – no –
swap – /tmp tmpfs – yes –
これに引き続き、メタ化したボリュームへのマウント設定変更を/etc/vfstabに対して仕掛けていく。古い設定はとりあえず消さずにコメントアウトしている。
bash-3.2# 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/c1t0d0s3 – – swap – no –
/dev/md/dsk/d3 /dev/md/rdsk/d3 – swap – no –
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no –
#/dev/dsk/c1t0d0s1 /dev/rdsk/c1t0d0s1 /var ufs 1 no –
/dev/md/dsk/d1 /dev/md/rdsk/d1 /var ufs 1 no –
#/dev/dsk/c1t0d0s7 /dev/rdsk/c1t0d0s7 /export/home ufs 2 yes –
/dev/md/dsk/d7 /dev/md/rdsk/d7 /export/home ufs 2 yes –
/devices – /devices devfs – no –
sharefs – /etc/dfs/sharetab sharefs – no –
ctfs – /system/contract ctfs – no –
objfs – /system/object objfs – no –
swap – /tmp tmpfs – yes –
bash-3.2#
再起動してみて、起動できるかどうかを確認してみる。シリアルコンソールと言うのは非常に便利。実は、実際にこの再起動を行ったときは、メタボリュームを1つ構成し忘れており、それに伴うエラーメッセージが出力されていました。一応乗せておきますー。
bash-3.2# init 6
updating /platform/sun4u/boot_archive
bash-3.2# svc.startd: The system is coming down. Please wait.
svc.startd: 106 system services are now being stopped.
Jul 6 22:06:47 yabakei rpc.metad: Terminated
svc.startd: The system is down.
syncing file systems… done
rebooting…SC Alert: Host System has Reset
Probing system devices
Probing memory
Probing I/O busesSun Fire V125, No Keyboard
Copyright 2006 Sun Microsystems, Inc. All rights reserved.
OpenBoot 4.22.23, 1024 MB memory installed, Serial #76443634.
Ethernet address 0:14:4f:8e:6f:f2, Host ID: 848e6ff2.Rebooting with command: boot
Boot device: disk:a File and args:
SunOS Release 5.10 Version Generic_147147-26 64-bit
Copyright (c) 1983, 2013, Oracle and/or its affiliates. All rights reserved.
Hardware watchdog enabled
Hostname: yabakeiWARNING – Unable to repair one or more filesystems.
Run fsck manually (fsck filesystem…).checking ufs filesystems
fsck: could not stat /dev/md/rdsk/d7: No such file or directory
fsckall failed with exit code 1.WARNING – Unable to repair one or more filesystems.
Run fsck manually (fsck filesystem…).svc:/system/filesystem/local:default: WARNING: /sbin/mountall -l failed: exit status 32
Jul 6 22:08:53 svc.startd[9]: svc:/system/filesystem/local:default: Method “/lib/svc/method/fs-local” failed with exit status 95.
Jul 6 22:08:53 svc.startd[9]: system/filesystem/local:default failed fatally: transitioned to maintenance (see ‘svcs -xv’ for details)yabakei console login: root
Password:
Last login: Sat Jul 6 21:40:42 on console
Oracle Corporation SunOS 5.10 Generic Patch January 2005
#
無事にログインできたら、メタボリュームで正常にマウントして動いているかを確認しておく。
# df -h
Filesystem size used avail capacity Mounted on
/dev/md/dsk/d0 18G 4.7G 13G 27% /
/devices 0K 0K 0K 0% /devices
ctfs 0K 0K 0K 0% /system/contract
proc 0K 0K 0K 0% /proc
mnttab 0K 0K 0K 0% /etc/mnttab
swap 4.5G 1.6M 4.5G 1% /etc/svc/volatile
objfs 0K 0K 0K 0% /system/object
sharefs 0K 0K 0K 0% /etc/dfs/sharetab
/platform/sun4u-us3/lib/libc_psr/libc_psr_hwcap1.so.1
18G 4.7G 13G 27% /platform/sun4u-us3/lib/libc_psr.so.1
/platform/sun4u-us3/lib/sparcv9/libc_psr/libc_psr_hwcap1.so.1
18G 4.7G 13G 27% /platform/sun4u-us3/lib/sparcv9/libc_psr.so.1
fd 0K 0K 0K 0% /dev/fd
/dev/md/dsk/d1 16G 97M 16G 1% /var
swap 4.5G 64K 4.5G 1% /tmp
swap 4.5G 40K 4.5G 1% /var/run
/dev/md/dsk/d7 30G 30M 29G 1% /export/home
#
いいんぢゃないでしょうか。それでは、メタボリュームに対してミラーディスクの適用を行う。
bash-3.2# metattach d0 d20
d0: submirror d20 is attached
bash-3.2#
bash-3.2#
bash-3.2# metattach d1 d21
d1: submirror d21 is attached
bash-3.2#
bash-3.2#
bash-3.2# metattach d3 d23
d3: submirror d23 is attached
bash-3.2#
bash-3.2#
bash-3.2# metattach d7 d27
d7: submirror d27 is attached
bash-3.2#
それぞれのボリューム状態を確認する。ミラーリングが開始されたばっかりである為、ステータスは全て「Resyncing」となっており、そのプログレス値が表示されている。これらが100%になったら、とりあえず構成としては出来上がりとなる。
bash-3.2# metastat
d7: Mirror
Submirror 0: d17
State: Okay
Submirror 1: d27
State: Resyncing
Resync in progress: 0 % done
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 62918208 blocks (30 GB)d17: Submirror of d7
State: Okay
Size: 62918208 blocks (30 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s7 0 No Okay Yesd27: Submirror of d7
State: Resyncing
Size: 62918208 blocks (30 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s7 0 No Okay Yesd3: Mirror
Submirror 0: d13
State: Okay
Submirror 1: d23
State: Resyncing
Resync in progress: 1 % done
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 8395200 blocks (4.0 GB)d13: Submirror of d3
State: Okay
Size: 8395200 blocks (4.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s3 0 No Okay Yesd23: Submirror of d3
State: Resyncing
Size: 8395200 blocks (4.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s3 0 No Okay Yesd1: Mirror
Submirror 0: d11
State: Okay
Submirror 1: d21
State: Resyncing
Resync in progress: 0 % done
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 33560448 blocks (16 GB)d11: Submirror of d1
State: Okay
Size: 33560448 blocks (16 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s1 0 No Okay Yesd21: Submirror of d1
State: Resyncing
Size: 33560448 blocks (16 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s1 0 No Okay Yesd0: Mirror
Submirror 0: d10
State: Okay
Submirror 1: d20
State: Resyncing
Resync in progress: 0 % done
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 38302464 blocks (18 GB)d10: Submirror of d0
State: Okay
Size: 38302464 blocks (18 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s0 0 No Okay Yesd20: Submirror of d0
State: Resyncing
Size: 38302464 blocks (18 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s0 0 No Okay YesDevice Relocation Information:
Device Reloc Device ID
c1t1d0 Yes id1,sd@SFUJITSU_MAW3073NCSUN72G_000748B0PD9D____DAN0P7B0PD9D
c1t0d0 Yes id1,sd@SFUJITSU_MAW3073NCSUN72G_000747B0PAB1____DAN0P7B0PAB1
bash-3.2#
一々metastatを実行してみて回るのもしんどいので、以下のようなコマンドを使うと便利っぽいです。
bash-3.2# metastat|grep done
Resync in progress: 0 % done
Resync in progress: 1 % done
Resync in progress: 0 % done
Resync in progress: 0 % done
全てのミラーリングが完了すると、Resyncのプログレス値は表示されなくなる為、そこが判断基準になると思います。ちなみに、72GB HDDでミラーリングを行ったところ、22:28に開始した同期処理は、およそ翌12:45ごろには完了していました。やっぱしと言うか、ルートパーティションの同期に時間がかかったっぽいです。
最後に、ミラーの状態を確認します。
bash-3.2# metastat
d7: Mirror
Submirror 0: d17
State: Okay
Submirror 1: d27
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 62918208 blocks (30 GB)d17: Submirror of d7
State: Okay
Size: 62918208 blocks (30 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s7 0 No Okay Yesd27: Submirror of d7
State: Okay
Size: 62918208 blocks (30 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s7 0 No Okay Yesd3: Mirror
Submirror 0: d13
State: Okay
Submirror 1: d23
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 8395200 blocks (4.0 GB)d13: Submirror of d3
State: Okay
Size: 8395200 blocks (4.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s3 0 No Okay Yesd23: Submirror of d3
State: Okay
Size: 8395200 blocks (4.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s3 0 No Okay Yesd1: Mirror
Submirror 0: d11
State: Okay
Submirror 1: d21
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 33560448 blocks (16 GB)d11: Submirror of d1
State: Okay
Size: 33560448 blocks (16 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s1 0 No Okay Yesd21: Submirror of d1
State: Okay
Size: 33560448 blocks (16 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s1 0 No Okay Yesd0: Mirror
Submirror 0: d10
State: Okay
Submirror 1: d20
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 38302464 blocks (18 GB)d10: Submirror of d0
State: Okay
Size: 38302464 blocks (18 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t0d0s0 0 No Okay Yesd20: Submirror of d0
State: Okay
Size: 38302464 blocks (18 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c1t1d0s0 0 No Okay YesDevice Relocation Information:
Device Reloc Device ID
c1t1d0 Yes id1,sd@SFUJITSU_MAW3073NCSUN72G_000748B0PD9D____DAN0P7B0PD9D
c1t0d0 Yes id1,sd@SFUJITSU_MAW3073NCSUN72G_000747B0PAB1____DAN0P7B0PAB1
bash-3.2#
全てのボリュームのステータスが「Okay」であれば大丈夫と思います。
No responses yet