Solaris on SoftLayer

このエントリは  [SoftLayer Advent Calendar 2014](http://qiita.com/advent-calendar/2014/softlayer) の 23 日目です。ちなみに [2 枚目](http://qiita.com/advent-calendar/2014/softlayer2) も用意されています。

# はじめに

とうとう東京 DC の開設が[発表](http://www.softlayer.com/info/tokyo-hosting)されました！
続いてメキシコも [オープン](http://www.softlayer.com/info/mexico-city-hosting) し、フランクフルトも [COMING SOON](http://www.softlayer.com/info/frankfurt-hosting) となっているので、今後の展開が楽しみですね。

さて。
私は日頃、アプリ開発者の間でシステムエンジニアとしてインフラ寄りの仕事を中心に担当しています。
今回は、ベアメタルサーバでちょっと変わった環境を構築してみようかと思います。

仮想サーバ (VSI) と物理サーバ (ベアメタル, BMS) が共存できる柔軟性が SoftLayer の特長の一つだと思います。
そして、BMS に自分の好きな OS を入れられる・・というポイントに惹かれていながら、
なかなか手をつけないまま一年を過ごしてしまっていました。
今回は、ちょうど [PARIS データセンタの開設キャンペーン](http://www.softlayer.com/info/paris-hosting)もあり、重い腰を上げて BMS しかも No OS で構築をしてみようと取り組んでみました。

本記事では、以下のような SoftLayer の個別トピック

  * ベアメタルサーバのオーダ、セットアップ
  * NAS の発注、マウント
  * No OS サーバへの OS インストール

を組合わせつつ、**商用 Unix (fo IA) を SoftLayer 上に導入**してみたいと思います。

レポートとしてはだいぶ長くなってしまいましたが、結論から言うと、チケットサポートの助けを借りながらも、Solaris のインストールと OS レイヤでの S/W RAID である ZFS の構築まで実施できました。

まったくの余談ですが・・
先日発表された Oracle Cloud でも Solaris の利用できる [IaaS](https://www.oracle.com/cloud/iaas.html) は、まだ正式には提供されていません。
・・とすると、SoftLayer は、商用 Unix を利用できる数少ないパブリッククラウドでもあるとも言えるのではないでしょうか
(国内では [JustPlayer](http://www.justplayer.ne.jp/) さんのサービスがあります)。

> **おことわり**
> 本記事で扱っている Oracle Solaris は、[OTN developer licsense for Oracle Solaris](http://www.oracle.com/technetwork/licenses/solaris-cluster-express-license-167852.html) に基づいて利用しています。

# 1. 環境の発注とメディアの準備

それではさっそくサーバをオーダしましょう。

今回は、

* ベアメタルサーバ (BMS): OS インストール対象。
* NAS: ISO メディアを配置する。
* 仮想サーバ (VSI): NAS 上に ISO を配置したり、作業サーバとして。(オプション)

という 3 つを利用します。

## オーダ開始！と思ったら？

何はともあれ [Customer Portal](https://control.softlayer.com) へログイン、
と思ったら、言語選択のウィンドウが出てきてびっくり。

![141220-SL-Lang.png](https://qiita-image-store.s3.amazonaws.com/0/59810/03513113-98a1-53f4-e33b-2a07e1f37e3e.png)

若干日本語としては微妙なのが、微笑ましい・・ (^^)
内容からは、サポートの電話対応の主言語を指定するみたいですね。
日本 DC 開設に向けて、準備が進んでいるということでしょうか。
今のところ (12/20 現在) Portal サイト全体が日本語化されているわけではないようでした。

> ・・と思っていたら、東京 DC 開設間際だったのですね。

邪推はさておき。オーダを進めましょう。

## ベアメタルサーバのオーダ

Portal より、画面を遷移していきます。

まず Account - Place an Order へ移動し、次に Devices - Bare Metal Server - Monthly へ。サーバのリストが表示されます。

後ほど、 OS の構成でご紹介しますが、ストレージの構成をいくつか試してみたいので Storage が 4 drives 以上かつ NO OS を選べるサーバを選択します。
今回は Single Processor Multi-Core Servers の中から「Intel	Xeon 3450	4 Cores	2.66GHz,	Up to 4 drives,	4 GB - 24 GB, $169.00」を選びました。

Configure your Specialty Server の画面に遷移するので、順次入力して行きます。
 
* Quantity: 1 Server
* Location: PAR01 - Paris - Western Europe
  Paris は **6% の追加費用がかかる** ので注意！ (Additional 6% monthly data center surcharge)
* System Configration
  * SERVER: Single Processor Quad Core Xeon 3450 - 2.66GHz (Lynnfield) - 1 x 8MB cache w/HT
  * RAM: 8GB Registered DDR 1333
  * OPERATING SYSTEM: Other - No Operation System 
  * HARD DRIVES: 1TB x 4 台構成にしてみました。
  ディスクの選択が **トグル** なので、ヘテロ構成にしたい場合はご注意ください。
* Network Options:
  * PUBLIC BANDWIDTH: 20000GB Bandwidth
  * UPLINK PORT SPEEDS: 100 Mbps Dual Public & Private Network Uplinks (Unbonded)
    No Operating System の構成では、N/W で選択できるオプションに制限があるので注意が必要です。
    **No Operating System cannot be ordered with 100 Mbps Public & Private Network Uplinks** のようにエラーが出ます。
    詳しくは、Knowledge Layer の [Introduction to No OS](http://knowledgelayer.softlayer.com/learning/introduction-no-os) に記載があります。
  * PUBLIC SECONDARY IP ADDRESSES: None
  * PRIMARY IPV6 ADDRESSES: None
  * PUBLIC SECONDARY IPV6 ADDRESSES: None
* System Addons (default のままです)
  * OS-SPECIFIC ADDON: None
  * CDP ADDON: None
  * CONTROL PANAEL SOFTWARE: None
  * DATABASE SOFTWARE: None
  * HARDWARE & SOFTWARE FIERWALLS: None
  * ANTI-VIRUS & SPYWARE PROTECTION: None
  * INTRUSION DETECTION & PROTECTION: None
  * ADVANCED MONITORING: None
* Storage Addons (default のままです)
  * NETWORK ATTACHED STORAGE: None
  * ISCSI: None
  * EVALUT: None
  * EVAULT PLUGIN: None
* Service Addons (default のままです)
  * MONITORING: None
  * RESPONSE: None
  * INSURANCE: None

構成が決まったら Continue Your Order を押しましょう。

確認画面に移行するので、ホスト名 (Host and Domain Names) を決定します。
今回は noel.kestrel.isa-geek.net としてみました。

[キャンペーン期間](http://www.softlayer.com/info/paris-hosting)にぎりぎり間に合ったので
Promotion code を忘れずに入力。

Finalize your order を押しましょう。

オーダ受領の旨の通知メールが届くと思います。

* Your SoftLayer Dutch Holdings B.V. Order # TICKET_ID has been received
* Your SoftLayer Dutch Holdings B.V. Order # TICKET_ID has been approved

あとはしばし待ち。
2h くらいでポータルや CLI でリストされてました。
detail の created のところが - なので、未完了だということが分かります。


~~~
% sl server list
:........:..........:..............:...............:............:................:
:  guid  : hostname :  primary_ip  :   backend_ip  : datacenter :     action     :
:........:..........:..............:...............:............:................:
: 36xxxx :   noel   : 159.8.68.xxx : 10.126.39.xxx :   par01    : PE_PERFTEST_HD :
:........:..........:..............:...............:............:................:

% sl server detail 36xxxx
:............:...............................:
:       Name : Value                         :
:............:...............................:
:         id : 36xxxx                        :
:       guid : {}                            :
:   hostname : noel                          :
:     domain : kestrel.isa-geek.net          :
:       fqdn : noel.kestrel.isa-geek.net     :
:     status : DEPLOY                        :
: datacenter : par01                         :
:      cores : 4                             :
:     memory : 8G                            :
:  public_ip : 159.8.68.xxx                  :
: private_ip : 10.126.39.xxx                 :
:    ipmi_ip : 10.126.39.xxx                 :
:         os : Customer Installed OS         :
:    created : -                             :
:      owner : NULL                          :
:      vlans : :.........:........:........: :
:            : :   type  : number :   id   : :
:            : :.........:........:........: :
:            : : PRIVATE :  1115  : 73xxxx : :
:            : :  PUBLIC :  999   : 73xxxx : :
:            : :.........:........:........: :
:............:...............................:
~~~

その後、オーダから 3h 後くらいで、

* Your SoftLayer Bare Metal Server (noel.kestrel.isa-geek.net) has been provisioned

のメールが届き、無事ベアメタルサーバのセットアップが完了したことが報告されました。
CLI の detail - created にも時刻が表示されています。

~~~
$ sl server detail 36xxxx | grep created
created     2014-12-21T14:46:07+09:00
~~~

## インストールメディアの準備

当然ですが、No OS のベアメタルサーバに OS をインストールしなければなりません。
OS が入っていないのにどうやってアクセスするの？と思ってしまいますが、SoftLayer では、IPMI コンソールに Privete N/W 側からアクセスでき、NAS 上の ISO メディアをマウントすることができるのです。

> See also [Mount an ISO with IPMIView](http://knowledgelayer.softlayer.com/procedure/mount-iso-ipmiview-0)

まずは、何はともあれメディアを入手し、NAS に配置しなければなりません。

### NAS のオーダ

私は手持ちの NAS が無かったので、新規オーダします。
既にお持ちの NAS や VSI があればそちらをご利用ください。

Portal より Storage - File Stotage へ移動します。
左上の Order File Storage を選び、

* Select Storage Type: NAS / FTP
* Select Size: 20GB - 100 to 1000 IOPS ($10.00) per month
* Location: PAR01 - Paris - Western Europe
* Payment: Default Method

として Continue します。
Confirm の画面が出て、Total $10.60 かかることが分かります。
(Paris の Additional fee 6% が加算されているのも確認できます)
良ければ、 Place an Order を選択します。

成功すれば Portal の Storage - File Storage のリストに表示されるようになります。
CLI で確認すると

~~~
$ sl nas list
:.........:............:......:..................................:
:    id   : datacenter : size :              server              :
:.........:............:......:..................................:
: 417xxxx :   par01    : 20GB : naspar0101.service.softlayer.com :
:.........:............:......:..................................:
~~~

NAS への接続情報を確認します。

~~~
% sl nas credentials 417xxxx
:..............:..........:
:   username   : password :
:..............:..........:
: IBMN31xxxx-1 : xxxxxxxx :
:..............:..........:
~~~

この id, server, username と password は後で利用しますので、メモに控えておきます。


### VSI のオーダ

NoOS BMS へマウントできるように NAS 上にメディアを配置します。
今回は、別に VSI を立てて、ファイルの配置をします。
(既にお持ちの VSI や NAS があればそちらをご利用ください)

PAR01 に OS イメージダウンロード用のサーバを立てます。

ポータル画面から、Account - Place on Order へ遷移し、Virtual Server - Hourly へ。

以下、主にデフォルトから変更した点のみ記載します。

* Location
  * DATA CENTER: PAR01 - Paris - Western Europe
* System Configration
  * COMPUTING INSTANCE: 1 x 2.0 GHz Core
  * RAM: 1GB
  * OPERATING SYSTEM: Ubuntu Linux 14.04 LTS Trusty Tahr - Minimal Install (64 bit)
  * FIRST DISK: 25GB (SAN) 
* Host and Domain Names: renne.kestrel.isa-geek.net

こちらは、オーダ後数分も待てばアクセスできるようになります (今後はもっと早く launch できるようにする改良中らしいです)。

ログイン情報 (root パスワード) を入手しておきます。ここでは CLI で VSI の情報を確認してみます。

~~~
% sl vs list
:......................................:..........:..............:...............:............:........:
:                 guid                 : hostname :  primary_ip  :   backend_ip  : datacenter : action :
:......................................:..........:..............:...............:............:........:
: c37ddc22-2b3d-4ce2-9192-xxxxxxxxxxxx :  renne   : 159.8.68.xxx : 10.126.39.xxx :   par01    :   -    :
:......................................:..........:..............:...............:............:........:

% sl vs credentials c37ddc22-2b3d-4ce2-9192-xxxxxxxxxxxx
:..........:..........:
: username : password :
:..........:..........:
:   root   : ******** :
:..........:..........:
~~~

さっそく ssh で接続してみましょう。

~~~
$ ssh -X -l root renne.kestrel.isa-geek.net.
~~~

NAS をマウントするために cifs-utils をインストールします。

~~~
# apt-get update
# apt-get install cifs-utils
~~~

前の手順で確認した NAS への接続情報を元に、ネットワークマウントします。

~~~
# mkdir /mnt/nas
# mount -t cifs //naspar0101.service.softlayer.com/IBMN31xxxx-1 -o username=IBMN31xxxx-1,password=xxxxxxxx,rw /mnt/nas
# df -Tm
Filesystem                                      Type     1M-blocks  Used Available Use% Mounted on
/dev/xvda2                                      ext3         24829  1546     22016   7% /
none                                            tmpfs            1     0         1   0% /sys/fs/cgroup
udev                                            devtmpfs       486     1       486   1% /dev
tmpfs                                           tmpfs           99     1        99   1% /run
none                                            tmpfs            5     0         5   0% /run/lock
none                                            tmpfs          495     0       495   0% /run/shm
none                                            tmpfs          100     0       100   0% /run/user
/dev/xvda1                                      ext3           232    18       202   9% /boot
//naspar0101.service.softlayer.com/IBMN310070-1 cifs     102047485 32554 102014932   1% /mnt/nas
~~~


### インストールメディア (ISO イメージ) の入手

[Oracle Solaris 11.2 ダウンロード - CD、DVD、USBからのインストール](http://www.oracle.com/technetwork/jp/server-storage/solaris11/downloads/install-2245079-ja.html) から、sol-11_2-text-x86.iso (645MB) を入手します。
My Oracle Support というユーザ登録 (無料) が必要です。

この ISO ファイルを VSI にマウントした /mnt/nas 上へアップします。

念のため、ISO の [MD5](http://download.oracle.com/otn/solaris/11.2/md5sum.txt) を確認しておきます。

~~~
# md5sum /mnt/nas/sol-11_2-text-x86.iso 
c09f40ed91d43b0adf109c124154a2b4  /mnt/nas/sol-11_2-text-x86.iso
~~~

ファイルの破損は無さそうですね。ひとまず、メディアの準備まではなんとかなりました。

ここで、VSI (renne) の役割は終了です。NAS をアンマウントして、Cansel しておくと費用の節約になると思います。


# 2. NoOS BMS への OS インストール


これから文字通り裸の BMS に、OS をインストールしていきましょう。

SoftLayer の IPMIView にて NAS 上の ISO イメージをマウントさせます。

## IPMIView への接続

まず、Portal の Devices から、対象サーバ noel を選び、Remote Management タブの IPMI の項目から、Management IP, User と Password を確認します。

VPN で Private NW へ接続後、ブラウザで IMPI IP を開きます。

![141221-SL-IPMI-login.png](https://qiita-image-store.s3.amazonaws.com/0/59810/320a12b7-4298-975e-e658-cc9dca8440f3.png)

SUPERMICRO のロゴとログインフォームが表示されるので、調べておいた User, Password を入力し、遷移すると IPMI コンソールが表示されます。

![141221-SL-IPMI-console.png](https://qiita-image-store.s3.amazonaws.com/0/59810/135241b2-93df-83cc-2fa0-9956cd3b9482.png)

上部の Remote Control - Console Redirection を選択し、Launch Console ボタンを押すと、launch.jnlp がダウンロードされます。
自動実行されないようであれば、手作業で開きます。ATEN Java iKVM Viewer というアプリのようです。

Java が launch され、、と待っていたら、Authentication failed が表示されてしまって開かないので、エラーの旨をチケットに書いて送りました。

> チケットの Group を見たら、Support-JA 行きになっています。
> 日本のサポートチーム行きか？とわくわくしてみる。という、冒頭に張った伏線がここで登場するのです。

・・一時間程度待っても、チケットに反応がないので、English chat を開いて、チケットの状況を確認してもらうことに (気長に待てば良いのですが・・)。
結局、担当者にチケットの escalation をしてもらい、対応を早めてもらいました。
チケット担当者に root ユーザの permission を修正してもらい (これはチケット依頼が必要な作業)、マウントまでこぎ着けました。

Share host, Path to image, User, Password を指定して、Save, Mount, Refresh Status ボタンと押して行けば Device 1 が There is an iso file mounted. になります。
ちなみに **Share host の欄は、IP addr. でないとダメ** らしいです。
最終的な設定は以下のようになりました。

![141221-IPMI-Device2.png](https://qiita-image-store.s3.amazonaws.com/0/59810/ed5400bb-ce8e-fba9-e04e-cf71f17b0758.png)

## コンソールへのアクセス

メディアのマウントまでは成功しました。
さて、後はコンソールはどう取れば良いのでしょうか？

IPMIView の Remote Console - Launch Console から
ATEN iKVM Viewer という Java 製の仮想コンソール端末が起動できます。

ちなみに Record で動画キャプチャを取ろうとしたら、ハングするようになり、アプリを再度起動しても同じ状況になったので設定ファイルを削除してリセットしました。
設定ファイルは、`~/Library/Preferences/tw.com.aten.plist` (Mac の場合) に保存されるようです。

> See also
> * [Log In to IMPIView](http://knowledgelayer.softlayer.com/procedure/log-ipmiview)
> * [Mount an ISO with IPMIView](http://knowledgelayer.softlayer.com/procedure/mount-iso-ipmiview-0)

IPMI View から Reset を送れば、コンソールにインストール画面が表示されます。

![141220-SL-Sol11-1.png](https://qiita-image-store.s3.amazonaws.com/0/59810/1f3431b9-ab1b-0439-b058-10bfa141db9a.png)


# 3. OS のインストール

## RAID の解除

最初、OS インストーラを進めていたら、なぜかディスクが RAID-0 組まれていたのが発覚したので修正しました。
一度 BMS に Reset を送って、起動時の Adaptec RAID BIOS の起動の途中で Ctrl-A を送り、
Adaptec RAID Configuration に入ります。

  * Logical Drives
    * Mangage Arrays で既存のアレイを削除します。
    * Create Array。
      一本だけ Disk を選び、Submit すると、Array Type が Volume の状態でアレイが作成されます。
      これを搭載されているディスクに繰返し実施します。
    * Rescan。
      これをしないと、Controller がディスクを認識できなく、OS のインストーラでも Volume (Local Disk) が見つからなくなるので要注意。

![141221-AdaptecRAID.png](https://qiita-image-store.s3.amazonaws.com/0/59810/42d6e126-307a-f479-15d3-53d3f6ae2d5c.png)

> See also [Sun Intel Adaptec RAID User’s Guide](https://docs.oracle.com/cd/E19658-01/820-4708-13/BIOS_chapter3.html)

## 今度こそ OS インストール

あとはインストーラを進めて行くだけです。

* To select the keyboard layout, enter number: 26 (US-English)
* To select the language you wish to use, enter a number: 3 (English)
* Welcome to Oracle Solaris installatiom menu: 1 (Install)
  
F2 が効かないときは、Virtual Media から選べる *Virtual Keyboard* を使えば大丈夫です。

* Select discovery method for disks: Local Disks
  * Disks:
    以下の 4 つのディスクが表示されます。
    ここでは、最初の c1t1d0 を選択します。
    デバイス名 (c1t1d0 など) は、後ほど使うので、控えておきましょう。
    (Solaris 11 から初期インストール時には単独ディスクへのインストールになっているようです。Ref. [Oracle Solaris 11 ZFSを使ってみよう](http://jp.fujitsu.com/platform/server/sparc/technical/document/pdf/00_ZFS.pdf), p.27 Oracle Solaris 10と11の初期ディスク構成の違い)
    * scsi 931.0 GB c1t1d0 (Select)
    * scsi 931.0 GB c1t2d0
    * scsi 931.0 GB c1t3d0
    * scsi 894.0 GB c1t4d0
  * Fdisk Partitions: Use the whole disk
* System Identity
  * Computer Name: noel
* Network: Manually
  * net0 (igb0), net1 (igb1),  net2 (igb2), net3 (igb3) の 4 つのうち、net0 (igb0) を選択。
  * NIC: net0/v4
  * IP Address: 10.126.39.xxx
  * Net mask: 255.255.255.192
  * Router: 10.126.39.xxx
* DNS Name service
  * Configure DNS
    * DNS Server Address
    * Search Domain: none
    * Alternative Name Service : none
* Time Zone:
  * Region: Asia
  * Location: Japan
  * Time Zone: Japan
* Locale
  * Language: Japanese
  * Terriroty: Japan (ja_JP.UTF-8)
* Date and Time
* Keyboard: US-English
* Users
  * Root password
* Support:
  * My Orale Support 
  * Network Configuration: No proxy
* Installation Summary

インストールが開始されます。10 分ほどでインストール完了。
その後、再起動がかかり、Configuring Devices でもう 10 分ほど。みごとログインプロンプトが表示されました。

![141220-SL-Sol11-5.png](https://qiita-image-store.s3.amazonaws.com/0/59810/7c2183b2-3b5f-b026-ea7e-0d1155d2699e.png)


ping も通りますし、SSH もプロンプトが帰ってきます。
ただし、Solaris のデフォルトでは **PermitRootLogin が No** なので、root ではログインできません。
IPMI コンソール側で、作業用ユーザを作るか、sshd_config を編集するかしておきましょう。

~~~
# useradd -g staff -d /export/home/ryumei -m -P "System Administrator" ryumei
# passwd ryumei
# echo "ryumei ALL=(ALL) ALL" > /etc/sudoers.d/ryumei
~~~

> See also [Adding users in Solaris 11 with power like the initial account](http://blogs.oracle.com/taylor22/entry/adding_users_in_solaris_11)

# 4. NIC の冗長化 (Link aggregation (Bonding))

SoftLayer の BMS では Public と Private 用に計 4 個の NIC が提供されています。
NoOS 指定では、それぞれが分かれた状態で提供されます。
せっかくなので、OS 上で bonding しておきましょう。

IF を一度落とすので、IPMI コンソールから入って作業します。
ひとまず、現状を確認すると、net0 が利用中なのが分かります。

~~~
# dladm show-link
LINK                CLASS     MTU    STATE    OVER
net0                phys      1500   up       --
net2                phys      1500   unknown  --
net1                phys      1500   unknown  --
net3                phys      1500   unknown  --
# ipadm show-if
IFNAME     CLASS    STATE    ACTIVE OVER
lo0        loopback ok       yes    --
net0       ip       ok       yes    --
~~~

そこで、net0 を一度削除し、

~~~
# ipadm delete-ip net0
# ipadm show-if
IFNAME     CLASS    STATE    ACTIVE OVER
lo0        loopback ok       yes    --
~~~

net0, net2 で aggregation します (bnd0)。

~~~
# dladm create-aggr -l net0 -l net2 bnd0
# ipadm create-ip bnd0
# ipadm create-addr -T static -a 10.126.39.145/26 bnd0/v4
~~~

確認。

~~~
# dladm show-aggr
LINK              MODE  POLICY   ADDRPOLICY           LACPACTIVITY LACPTIMER
bnd0              trunk L4       auto                 off          short
# dladm show-link
LINK                CLASS     MTU    STATE    OVER
net0                phys      1500   up       --
net2                phys      1500   up       --
net1                phys      1500   unknown  --
net3                phys      1500   unknown  --
bnd0                aggr      1500   up       net0 net2
~~~

Public NW 側も同様に net1, net3 で aggregation します。

~~~
# dladm create-aggr -l net2 -l net4 bnd1
# ipadm create-ip bnd1
# ipadm create-addr -T static -a 159.8.68.133/28 bnd1/v4
# dladm show-aggr
LINK              MODE  POLICY   ADDRPOLICY           LACPACTIVITY LACPTIMER
bnd0              trunk L4       auto                 off          short
bnd1              trunk L4       auto                 off          short
# dladm show-link
LINK                CLASS     MTU    STATE    OVER
net0                phys      1500   up       --
net2                phys      1500   up       --
net1                phys      1500   up       --
net3                phys      1500   up       --
bnd0                aggr      1500   up       net0 net3
bnd1                aggr      1500   up       net2 net4
~~~

あとは route 設定しないといけませんね。

~~~
# route add 10.126.39.x/26 10.126.39.xxx
add net 10.126.39.xxx/26: gateway 10.126.39.xxx
~~~

See also [Overview of Link Aggregations](http://docs.oracle.com/cd/E23824_01/html/821-1458/fpjvl.html)

# 5. ストレージの冗長化 (ZFS)

ようやくストレージの設定までたどり着きました。
複数積んでおいた (かつ RAID BIOS も解除した) ディスクたちを活躍させてあげましょう。

まずは OS インストール直後の状況を確認してみます。

~~~
# zpool status
  pool: rpool
 state: ONLINE
  scan: none requested
config:

        NAME      STATE     READ WRITE CKSUM
        rpool     ONLINE       0     0     0
          c1t0d0  ONLINE       0     0     0

errors: No known data errors
~~~

ついでに ZFS ブート環境 (BE) 情報も確認します。

~~~
# beadm list
BE      Active Mountpoint Space Policy Created          
--      ------ ---------- ----- ------ -------          
solaris NR     /          3.02G static 2014-12-21 17:29 
~~~

## ミラー化ルートプールの作成

さっそくルートプールをミラー構成にしてみましょう。
OS インストールの時に出てきたデバイスリストが役に立ちます。
もしくは　format コマンドでも各員できます。

~~~
# format -e
Searching for disks...done


AVAILABLE DISK SELECTIONS:
       0. c1t0d0 <Adaptec-ASR71605-V1.0-930.99GB>
          /pci@0,0/pci8086,c01@1/pci9005,501@0/disk@0,0
       1. c1t1d0 <Adaptec-ASR71605-V1.0 cyl 60764 alt 2 hd 255 sec 126>
          /pci@0,0/pci8086,c01@1/pci9005,501@0/disk@1,0
       2. c1t2d0 <Adaptec-ASR71605-V1.0 cyl 60764 alt 2 hd 255 sec 126>
          /pci@0,0/pci8086,c01@1/pci9005,501@0/disk@2,0
       3. c1t3d0 <Adaptec-ASR71605-V1.0 cyl 58349 alt 2 hd 255 sec 126>
          /pci@0,0/pci8086,c01@1/pci9005,501@0/disk@3,0
~~~

試しに 1. の c1t1d0 を確認してみると、

~~~
Specify disk (enter its number): 1
selecting c1t1d0
[disk formatted]
No Solaris fdisk partition found.
~~~

No Solaris fdisk partition found. と表示され fdisk パーティションが見つかりません。fdisk をかけます。

~~~
format> fdisk
No fdisk table exists. The default partition for the disk is:

  a 100% "SOLARIS System" partition

Type "y" to accept the default partition,  otherwise type "n" to edit the
 partition table.
y
~~~

c1t2d0, c1t3d0 についても同じく。

~~~
format> disk 2
format> fdisk
format> disk 3 
format> fdisk
~~~

これで下準備ができました。

### ルートプールのミラー化

新しいディスクをブートプールへ追加します。

~~~
# zpool attach rpool c1t0d0 c1t1d0
Make sure to wait until resilver is done before rebooting.
~~~

コマンド発行後、数十秒待ちます。
resilver 中なので、再起動しないようにとのメッセージが表示されます。
pool の状況を確認してみましょう。

~~~
# zpool status
  pool: rpool
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function in a degraded state.
action: Wait for the resilver to complete.
        Run 'zpool status -v' to see device specific details.
  scan: resilver in progress since Mon Dec 22 00:40:06 2014
    8.71G scanned
    328M resilvered at 19.3M/s, 3.68% done, 0h7m to go
config:

        NAME        STATE     READ WRITE CKSUM
        rpool       DEGRADED     0     0     0
          mirror-0  DEGRADED     0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t1d0  DEGRADED     0     0     0  (resilvering)

errors: No known data errors
~~~

resilver (再構成) 中ですが、OS としては通常稼働しています (DB dump を並行するみたいな volume をいじめるような作業はしないほうが良いですが・・)。

数分待って、再度状態を確認すると、c1t1d0 も ONLINE になっていることが分かります。
今は OS しか入っていない状態なので、resilvering にも 4min 程度で済んだようですね。

~~~
# zpool status
  pool: rpool
 state: ONLINE
  scan: resilvered 8.70G in 0h4m with 0 errors on Mon Dec 22 00:44:23 2014
config:

        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t0d0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0

errors: No known data errors
~~~

以上で、ミラー化が完了しました。

### その他の構成

ルートプールのミラー化以外にも色々構成を組んでみたいのですが、今回は 4 台しか積んでいないので、

* rpool
  * c1t0d0
* tank
  * c1t0d1
  * c1t0d2
  * c1t0d3

の構成に変更し、残りの 3 台で試してみます。

まず、ルートプールでミラーを構成していた c1t1d0 を rpool から外します。

~~~
# zpool offline rpool c1t1d0
# zpool detach rpool c1t1d0
# zpool status
  pool: rpool
 state: ONLINE
  scan: resilvered 60.5K in 0h0m with 0 errors on Mon Dec 22 02:37:58 2014
config:

        NAME      STATE     READ WRITE CKSUM
        rpool     ONLINE       0     0     0
          c1t0d0  ONLINE       0     0     0

errors: No known data errors
~~~

#### ログデバイス構成例

ログデバイスを含むミラー構成はこんな感じです (ログデバイスのミラー化はしていませんが・・)。

~~~
# zpool create tank mirror c1t1d0 c1t2d0 log c1t3d0
# zpool status tank
  pool: tank
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
        logs
          c1t3d0    ONLINE       0     0     0

errors: No known data errors
~~~

プールの廃棄は

~~~
# zpool destroy tank
~~~

で実施できます。


#### キャッシュデバイス構成例

キャッシュデバイスを含むミラー構成はこんな感じです。

~~~
# zpool create tank mirror c1t1d0 c1t2d0 cache c1t3d0
# zpool status tank
  pool: tank
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c1t1d0  ONLINE       0     0     0
            c1t2d0  ONLINE       0     0     0
        cache
          c1t3d0    ONLINE       0     0     0

errors: No known data errors
~~~

このあたりになるともう、オンプレミスの実機とほとんど差異が無いのですが、SoftLayer 上で商用 Unix を動かし、OS レベルでの RAID 構成を柔軟に変更できることが確認できます。

最後はだいぶ駆け足になってしまいましたが、ZFS については、以下のリンクが参考になるかと思います。

* [Oracle Solaris の管理: ZFS ファイルシステム](http://docs.oracle.com/cd/E26924_01/html/E25824/toc.html)
* [Oracle Solaris の管理: デバイスとファイルシステム](http://docs.oracle.com/cd/E26924_01/html/E25880/disksxadd-2.html#SAGDFSdisksxadd-30)
* [Solaris ZFSの基本的な仕組みを知る](http://www.atmarkit.co.jp/ait/articles/0903/13/news125.html)
* [一瞬でのバックアップを実現するSolaris ZFS](http://www.atmarkit.co.jp/ait/articles/0903/13/news138.html)

# 6. まとめと感想

以上、SoftLayer 上でも Solaris をインストールし、ZFS が組めることが確認できました。

Custom OS だと Flex Image 取れないので、OS イメージの運用など、考えなければならないことは多いのですが、自前の環境を作るにはどれくらい手間がかかるのか？ということが確認できたのは、私自身、良い経験になりました。

この環境の上に Solaris Zone (今はやりの Docker みたいなコンテナ仮想化技術で Solaris 10  の頃から標準提供されています) でゲスト環境を区切って構築すると、オフプレミスのプライベートクラウドが構築できそうです。また機会を見つけてやってみたいと思います。

けっこう盛りだくさんでしたが、実作業時間としては、昼頃に始めて、いろいろ調べながら、チケットを発行したり、散歩に出かけたり、家事の手伝いもしつつ、翌日の昼頃には ZFS の設定までこぎ着けた感じです。

## その他

最後に、使い終わった BMS は、初月の Anniversary Billing Date が来たら、Cancel されるようにしておきます。VSI と NAS も適宜 cancel しておきます。
課金については、kkitase さんの[第一目の記事](http://blogs.itmedia.co.jp/kkitase/2014/12/softlayer.html) が分かりやすいので、ご参考までに紹介しておきます。

以上、ありがとうございました。