ライン

ポイント:ソフトウェアRAIDで安心

ライン

 はじめに

FreeBSD 9.2-RELEASE

 動作環境:ESX 5.0 Update1 (無料のHypervisor)のゲストOS環境として導入を行います。
 今回も、内蔵したSATAのディスクは2本で、ディスクはRAID化されていません。
これらのディスクにそれぞれ仮想ハードディスクを準備して、gmirrorによるソフトウェアRAIDで構成した冗長構成で作成する形を作成します。

 導入

VMwareの設定

 仮想ゲストOSの設定をします。

 ディスクは、異なるディスクを使っています。ネットワークは、外向けのNICと内部用のNICの2つを準備しています。

OSインストール

 まずは、ISOイメージのダウンロードから。
ftp2.jp.freebsd.orgからFreeBSD-9.2-RELEASE-amd64-disc1.iso を入手しダウンロードしておきます。

1. Boot [ENTER]そのまま。
<Install>をそのまま。
ここもYesでそのまま選択。
Japanese 106を選択します。106xはCapsLockキーとCtrlキーの位置が入れ替わっているものになるようです。
ここはホスト名を入力。
ゲームは外し、ソースはあらかじめ追加するようにしました。
<Guided>を選択
<Entire Disk>を選択
今回は前著の通り、RAID 1で動作させるためにVMwareのストレージのそれぞれに60GBを確保しています。
インストールはda0側に導入します。
Finishを選択すると、以下のようにCommitを求められます。
この後導入が開始されます。
この後はrootのパスワードを聞かれますので入力します。
その後、ネットワークの選択です。
IPアドレスとサブネットマスク、デフォルトゲートウェイのアドレスを選択。
resolv.confの設定
いつも通りに、日本で選択。
システム設定では、sshdとntpdを選択しました。
クラッシュダンプは、サポートを受けているわけでもないので、取得しない方針にしました。
ユーザは1つだけ先行して作成しておくことにしました。
ここで完了です。

 これで導入は完了できました。

gmirror(RAID 1の設定)

 ストレージの冗長化を開始します。

# camcontrol devlist
<NECVMWar VMware IDE CDR10 1.00>   at scbus1 target 0 lun 0 (pass0,cd0)
<VMware Virtual disk 1.0>          at scbus2 target 0 lun 0 (pass1,da0)
<VMware Virtual disk 1.0>          at scbus2 target 2 lun 0 (pass2,da1)
# gpart backup da0 > da0.gpt
# cat da0.gpt
GPT 128
1   freebsd-boot        34       128
2    freebsd-ufs       162 119537536
3   freebsd-swap 119537698   6291388
# gpart restore -F da1 < da0.gpt
# gpart show
=>       34  125829053  da0  GPT  (60G)
         34        128    1  freebsd-boot  (64k)
        162  119537536    2  freebsd-ufs  (57G)
  119537698    6291388    3  freebsd-swap  (3G)
  125829086          1       - free -  (512B)

=>       34  125829053  da1  GPT  (60G)
         34        128    1  freebsd-boot  (64k)
        162  119537536    2  freebsd-ufs  (57G)
  119537698    6291388    3  freebsd-swap  (3G)
  125829086          1       - free -  (512B)
# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 da1
bootcode written to da1
# shutdown -p now

 シャットダウンの状態を確認し、起動遅延設定を入れます。

強制的にBIOSセットアップで、CD-ROM起動をハードディスクよりも高く設定し直し、インストールで使ったCD-ROMを再度マウント状態にする。
パワーオン時起動遅延を10000(10秒)にしています。

その他、コピーペーストがコンソールでできないのは不便なので、ここで解除します。
※X WINDOWあげないので意味ないかも
同、オプション→全般→構成パラメータをクリック。
「行の追加」をクリックし、
isolation.tools.copy.disableとisolation.tools.paste.disableの2行を追加します。
値には、falseを入れて終わりです。
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1026437
仮想ゲストを起動し、10行以内に、F2キーを押して、ブート順の変更を入れます。
再度起動させると、CD-ROMより起動するようになりますが、shutdownした際に既にマウントは外れてしまっています。
ですので、次回起動時には、CD-ROMのアイコンをクリックし、素早くCDをマウントしてあげる必要があります。
このCDはインストールに利用したCD-ROMになります。
起動してきたら、< Live CD> を選択し、ログインプロンプトが来るので、"root"と入力。
ここで重要なのは、キーボード。
# kbdmap
と入力し、106キーボードに変更しておきましょう。
作業入力するのに不便すぎますから。
ライセンスを保有できている人なら仮想シリアルコンソール経由で入力するなどができるでしょうけど、無料ライセンスで遊んでいる私にはそんな技は使えませんので。

 その後は、コマンドの入力をしていきます。

root@:~ # kldload geom_mirror 
root@:~ # gmirror label -vb round-robin p1 /dev/da0p1 
GEOM_MIRROR: Device mirror/da0p1 launched (1/1).
Metadata value stored on /dev/da0p1.
root@:~ # gmirror label -vb round-robin p2 /dev/da0p2 
GEOM_MIRROR: Device mirror/da0p2 launched (1/1).
Metadata value stored on /dev/da0p2.
root@:~ # gmirror label -vb round-robin p3 /dev/da0p3 
GEOM_MIRROR: Device mirror/da0p3 launched (1/1).
Metadata value stored on /dev/da0p3.
root@:~ # gmirror status 
Name         status     Components
mirror/p1    COMPLETE    da0p1 (ACTIVE)
mirror/p2    COMPLETE    da0p2 (ACTIVE)
mirror/p3    COMPLETE    da0p3 (ACTIVE)
root@:~ # gmirror insert p1 /dev/da1p1
GEOM_MIRROR: Device p1: rebuilding provider da1p1. 
GEOM_MIRROR: Device p1: rebuilding provider da1p1 finished.  
root@:~ # gmirror insert p2 /dev/da1p2 
GEOM_MIRROR: Device p1: rebuilding provider da1p2. 
GEOM_MIRROR: Device p1: rebuilding provider da1p2 finished.  
root@:~ # gmirror insert p3 /dev/da1p3 
GEOM_MIRROR: Device p1: rebuilding provider da1p3. 
GEOM_MIRROR: Device p1: rebuilding provider da1p3 finished.  
root@:~ # gmirror status 
     Name    Status  Components
mirror/p1  COMPLETE  da0p1 (ACTIVE) 
                     da1p1 (ACTIVE) 
mirror/p2  DEGRADED  da0p2 (ACTIVE) 
                     da1p2 (SYNCHRONIZING, 0%) 
mirror/p3  DEGRADED  da0p3 (ACTIVE) 
                     da1p3 (SYNCHRONIZING, 0%) 
root@:~ #  mount /dev/mirror/p2 /mnt 
root@:~ #  cd /mnt/etc 
root@:~ #  vi fstab 
# Device                 Mountpoint       FStype    Options  Dump   Pass# 
/dev/mirror/p2        /                     ufs         rw         1         1 
/dev/mirror/p3        none                swap      sw         0         0 
(上記を追加) 
root@:~ #  cd /mnt/boot 
root@:~ #  vi loader.conf 
geom_mirror_load="YES"
(上記を追加) 
root@:~ #  reboot 

 リブートする。しかし、fsck必要といわれる。おかしいなぁ。

# fsck_ffs /dev/mirror/p2

その後聞かれるものには、全部「y」で進めて完了させた。
loader.conf の設定にスペルミスがあったのが原因っぽい。
その後は無事に起動。

# df
Filesystem     1K-blocks    Used    Avail Capacity  Mounted on
/dev/mirror/p2  38577660 1981296 33510152     6%    /
devfs                  1       1        0   100%    /dev
# gmirror status
     Name    Status  Components
mirror/p1  COMPLETE  da0p1 (ACTIVE)
                     da1p1 (ACTIVE)
mirror/p2  DEGRADED  da0p2 (ACTIVE)
                     da1p2 (SYNCHRONIZING, 2%)
mirror/p3  DEGRADED  da0p3 (ACTIVE)
                     da1p3 (SYNCHRONIZING, 54%)

同期が取れたら完了です。

portsnap

 portsnapで最新を入手します。(以下は例)

# portsnap fetch
ooking up portsnap.FreeBSD.org mirrors... 6 mirrors found.
Fetching public key from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Sat Dec 15 09:07:00 JST 2012:
40c2a0da6291390a3f2bf8577827b48ce43462d8a29b91100% of   67 MB 1637 kBps 00m00s
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Sat Dec 15 09:07:00 JST 2012 to Sat Dec 15 21:16:24 JST 2012.
Fetching 4 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 22 patches.....10....20. done.
Applying patches... done.
Fetching 3 new ports or files... done.

 上記の通り、約2分程度で最新のものがダウンロードされます。

 次に、/usr/ports以下に解凍しましょう。

# portsnap extract

 これが終われば完了。

 実際のところ、pkg installで入れたものとportsで入れたものでどのような管理になるのか把握できていません。
たぶん別ってことかな。portsで依存関係で入ったものでも pkg で管理したいなどどういう風につかうのだろう。
把握しておかないとまずそうです。

 その他の設定

ソースツリーの更新

 Subversion を利用して展開します。cvsup/csupを利用する時代は終わってしまいました。
まずは、パッケージを導入しておきます。

# pkg install devel/subversion

 次に、チェックアウトしてみます。
こちらも日本にはサーバがないみたいなので、アメリカより直接入手することになります。

# svn checkout https://svn0.us-west.freebsd.org/base/releng/9.2/ /usr/src
...
 U   src
Checked out revision 257942.

これで完了。実績ができたので、次回よりこのディレクトリ上で svn updateで更新が可能となりました。

小さな設定

 設定を入れることがあったのは以下。
/etc/make.conf /etc/newsyslog.conf /etc/crontab /etc/motd /root/.cashrc /usr/local/etc/pkg.conf /etc/ntp.conf

 ディスクの障害

障害発生

 移行を進めているうちに、突然コピーの表示が止まるような動きが出てきました。gmirror statusでは正常に見えます。

Feb 14 20:38:55 XXX kernel: (da0:mpt0:0:0:0): SCSI status: Busy
Feb 14 20:38:55 XXX kernel: (da0:mpt0:0:0:0): Retrying command
Feb 14 20:38:55 XXX kernel: (da0:mpt0:0:0:0): WRITE(10). CDB: 2a 00 04 9e e9 e2 00 00 28 00
Feb 14 20:38:55 XXX kernel: (da0:mpt0:0:0:0): CAM status: SCSI Status Error
Feb 14 20:38:55 XXX kernel: (da0:mpt0:0:0:0): SCSI status: Busy
Feb 14 20:38:59 XXX kernel: (da0:mpt0:0:0:0): Retrying command
Feb 14 20:38:59 XXX kernel: (da0:mpt0:0:0:0): WRITE(10). CDB: 2a 00 04 9e e8 e2 00 00 20 00
Feb 14 20:38:59 XXX kernel: (da0:mpt0:0:0:0): CAM status: SCSI Status Error
Feb 14 20:38:59 XXX kernel: (da0:mpt0:0:0:0): SCSI status: Busy
Feb 14 20:38:59 XXX kernel: (da0:mpt0:0:0:0): Retrying command 

良くわかりませんが、da0側のディスクかなと。

# mptutil show config
mptutil: Reading config page header failed: Invalid configuration page
mptutil: Failed to get config: Input/output error

状況がつかめません。そもそも何?

該当ディスクをはずして別の側を接続することにしました。
まずは、ゲストOSをshutdown -h nowで停止。上記、ハードディスク1を削除して一度起動。
片方だけでも普通に起動するのでそのまま起動を確認する。

# gmirror status
     Name    Status  Components
mirror/p1  DEGRADED  da0p1 (ACTIVE)
mirror/p2  DEGRADED  da0p2 (ACTIVE)
mirror/p3  DEGRADED  da0p3 (ACTIVE) 

当然、こんな状態になっています。

# gmirror forget p1
# gmirror forget p2
# gmirror forget p3
# gmirror status
     Name    Status  Components
mirror/p1  COMPLETE  da0p1 (ACTIVE)
mirror/p2  COMPLETE  da0p2 (ACTIVE)
mirror/p3  COMPLETE  da0p3 (ACTIVE)
# shutdown -p now

ここでまたshutdownさせました。別のディスクを選択して起動しました。da0とda1のディスクの順番は変えました。
起動した後の確認したdmesgではこんな感じです。

da0 at mpt0 bus 0 scbus2 target 0 lun 0
da0: <VMware Virtual disk 1.0> Fixed Direct Access SCSI-2 device
da0: 320.000MB/s transfers (160.000MHz, offset 127, 16bit)
da0: Command Queueing enabled
da0: 61440MB (125829120 512 byte sectors: 255H 63S/T 7832C)
da1 at mpt0 bus 0 scbus2 target 1 lun 0
da1: <VMware Virtual disk 1.0> Fixed Direct Access SCSI-2 device
da1: 320.000MB/s transfers (160.000MHz, offset 127, 16bit)
da1: Command Queueing enabled
da1: 61440MB (125829120 512 byte sectors: 255H 63S/T 7832C)

では、再参加させる作業に入ります。

# gmirror list
Geom name: p1
State: COMPLETE
Components: 1
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 2438522188
Providers:
1. Name: mirror/p1
   Mediasize: 65024 (63k)
   Sectorsize: 512
   Mode: r0w0e0
Consumers:
1. Name: da0p1
   Mediasize: 65536 (64k)
   Sectorsize: 512
   Stripesize: 0
   Stripeoffset: 17408
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 1918760451

Geom name: p2
State: COMPLETE
Components: 1
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 2
ID: 1715938032
Providers:
1. Name: mirror/p2
   Mediasize: 61203217920 (57G)
   Sectorsize: 512
   Mode: r1w1e1
Consumers:
1. Name: da0p2
   Mediasize: 61203218432 (57G)
   Sectorsize: 512
   Stripesize: 0
   Stripeoffset: 82944
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 2
   ID: 98502221

Geom name: p3
State: COMPLETE
Components: 1
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 4266534250
Providers:
1. Name: mirror/p3
   Mediasize: 3221190144 (3G)
   Sectorsize: 512
   Mode: r1w1e0
Consumers:
1. Name: da0p3
   Mediasize: 3221190656 (3G)
   Sectorsize: 512
   Stripesize: 0
   Stripeoffset: 1073759232
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 3765718386
# camcontrol devlist
<NECVMWar VMware IDE CDR10 1.00>   at scbus1 target 0 lun 0 (pass0,cd0)
<VMware Virtual disk 1.0>          at scbus2 target 0 lun 0 (da0,pass1)
<VMware Virtual disk 1.0>          at scbus2 target 1 lun 0 (da1,pass2)

同じになるように、

# gpart backup da0 > da0.gpt
# gpart restore -F da1 < da0.gpt
# gpart backup da1
GPT 128
1   freebsd-boot        34       128
2    freebsd-ufs       162 119537536
3   freebsd-swap 119537698   6291388
# gpart show
=>       34  125829053  da0  GPT  (60G)
         34        128    1  freebsd-boot  (64k)
        162  119537536    2  freebsd-ufs  (57G)
  119537698    6291388    3  freebsd-swap  (3G)
  125829086          1       - free -  (512B)

=>       34  125829053  da1  GPT  (60G)
         34        128    1  freebsd-boot  (64k)
        162  119537536    2  freebsd-ufs  (57G)
  119537698    6291388    3  freebsd-swap  (3G)
  125829086          1       - free -  (512B)
# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 da1
bootcode written to da1

のようにしました。
再同期させましょう。

# gmirror insert p1 /dev/da1p1
# gmirror insert p2 /dev/da1p2
# gmirror insert p3 /dev/da1p3
# gmirror status
     Name    Status  Components
mirror/p1  COMPLETE  da0p1 (ACTIVE)
                     da1p1 (ACTIVE)
mirror/p2  DEGRADED  da0p2 (ACTIVE)
                     da1p2 (SYNCHRONIZING, 0%)
mirror/p3  DEGRADED  da0p3 (ACTIVE)
                     da1p3 (SYNCHRONIZING, 0%)

こんな感じで同期されるまで待ちます。


【改訂履歴】作成:2013/11/10 更新:2014/02/14

【リンク】参考にさせていただきました

FreeBSDな生活 FreeBSD 9.0のGPTでのミラー構築

 
Copyright © 1996,1997-2006,2007- by F.Kimura,