トップページ > OpenSolaris関連 > beadmを使用したrootイメージのスナップショット
カテゴリー
オラクルエンジニア通信
サポートページ
マニュアルページ
ソフトウェアダウンロード
中古UNIXマシン購入
blogs.sun.com
お勧めサイト
プライベートリンク

beadmを使用したrootイメージのスナップショット

OpenSolarisにはZFSのsnapshotとclone機能を利用したBE(Boot Environment)という概念があります。 運用中のOpenSolarisの要所要所でブート環境をBEとして保存しておけば、 トラブルが発生した時などに元の環境に簡単に戻すことができたり、 再インストールすることなく検証環境を効率よく切り替えたりすることが可能です。

例えば、テスト環境を構築するときなど、テスト前に初期状態のBE (例:opensolaris200906_initial)を作成しておき、 環境構築後に再び別のBE名(例: opensolaris200906_zone_test)で保存しておきます。 そうすることで、別のテスト環境を構築したい場合には初期状態のBE (opensolaris200906_initial)から 新しいテスト環境用のBEを作成して、GRUBメニューから新しいBEを選択することにより 初期状態から再び別のテスト環境の構築が可能です。 元のテスト環境に戻りたい場合は再びGRUBメニューから opensolaris2009_zone_test を選択するだけで済みます

実行例

以下のようにbeadmコマンドを使用してインストール直後のOpenSolarisで初期状態のBEを作成しておきます。

root@opensolaris:~# beadm create opensolaris200906_initial

以下のようにbeadm listコマンドを実行して、新しくBEが作成されたことを確認します。 Activeのフラグでは、Nが現在のBEを表し、Rが次回のブート時に使用されるBEを表しています。

root@opensolaris:~# beadm list
BE Active Mountpoint Space Policy Created
-- ------ ---------- ----- ------ -------
opensolaris NR / 3.19G static 2009-08-14 11:21
opensolaris200906_initial - - 87.0K static 2009-08-14 14:42

ついでにゾーン機能の検証用のBEも以下のように作ってしまいます。 -eオプションでBE名を指定することにより、アクティブでないBEから新しいBEを作成することもできます。

root@opensolaris:~# beadm create -e opensolaris200906_initial opensolaris200906_zone_test
root@opensolaris:~# beadm list
BE Active Mountpoint Space Policy Created
-- ------ ---------- ----- ------ -------
opensolaris NR / 3.19G static 2009-08-14 11:21
opensolaris200906_initial - - 175.0K static 2009-08-14 14:42
opensolaris200906_zone_test - - 44.0K static 2009-08-14 14:54

次に以下のようにデフォルトのBEを切り替えます。 デフォルトのBEを切り替えなくても起動時にGRUBメニューから目的のBEを選べば済みますが、 主に使用するBEをデフォルトにしておいた方が使い勝手がいいと思います。

root@opensolaris:~# beadm activate opensolaris200906_zone_test
root@opensolaris:~# beadm list
BE Active Mountpoint Space Policy Created
-- ------ ---------- ----- ------ -------
opensolaris N / 30.0K static 2009-08-14 11:21
opensolaris200906_initial - - 44.0K static 2009-08-14 14:42
opensolaris200906_zone_test R - 3.19G static 2009-08-14 14:54

上記のようにRフラグが指定のBEに設定されています。

ではゾーン環境用のBEにするために再起動します。

root@opensolaris:~# init 6

以下のようにGRUBメニューではデフォルトのopensolaris200906_zone_testが選択されています。

起動後にBEを確認すると以下のようになっているはずです。

root@opensolaris:~# beadm list
BE Active Mountpoint Space Policy Created
-- ------ ---------- ----- ------ -------
opensolaris - - 10.00M static 2009-08-14 11:21
opensolaris200906_initial - - 44.0K static 2009-08-14 14:42
opensolaris200906_zone_test NR / 3.22G static 2009-08-14 14:54

では簡単にゾーンでも作成してみましょう。 せっかくOpenSolarisで検証しているのですからCrossbow技術を使用して 仮想NICをゾーンに割り当ててみます。
vnic0:大域ゾーン(global)
vnic1:zone1
vnic2:zone2
に対応していて、仮想スイッチvsw1で接続されているイメージです。
また、各ゾーンが外部に出られるようにするため大域ゾーンをルーターとして構成し、 NATでアドレス変更をしています。 ちなみにnwamサービスは無効にして従来のネットワーク構成方法を有効にしています。

root@opensolaris:~# svcadm disable physical:nwam
root@opensolaris:~# svcadm enable physical:default
root@opensolaris:~# dladm create-etherstub vsw1
root@opensolaris:~# dladm create-vnic -l vsw1 vnic0
root@opensolaris:~# dladm create-vnic -l vsw1 vnic1
root@opensolaris:~# dladm create-vnic -l vsw1 vnic2
root@opensolaris:~# dladm show-vnic
LINK OVER SPEED MACADDRESS MACADDRTYPE VID
vnic0 vsw1 0 2:8:20:78:64:49 random 0
vnic1 vsw1 0 2:8:20:96:2:a8 random 0
vnic2 vsw1 0 2:8:20:3d:8d:24 random 0

root@opensolaris:~# ifconfig vnic0 plumb
root@opensolaris:~# ifconfig vnic0 inet 10.1.0.254/24 up
root@opensolaris:~# ifconfig vnic0
vnic0: flags=1000843 mtu 1500 index 3
inet 10.1.0.254 netmask ffffff00 broadcast 10.1.0.255
ether 2:8:20:f7:b9:b0
root@opensolaris:~# vi /etc/ipf/ipnat.conf
map e1000g0 10.1.0.0/24 -> 0/32 portmap tcp/udp auto
map e1000g0 10.1.0.0/24 -> 0/32
root@opensolaris:~# svcadm enable ipfilter
root@opensolaris:~# svcadm enable ipv4-forwarding

root@opensolaris:~# zonecfg -z zone1
zone1: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zone1> create
zonecfg:zone1> set zonepath=/export/zone1
zonecfg:zone1> set autoboot=false
zonecfg:zone1> set ip-type=exclusive
zonecfg:zone1> add net
zonecfg:zone1:net> set physical=vnic1
zonecfg:zone1:net> end
zonecfg:zone1> exit

root@opensolaris:~# zonecfg -z zone2
zone2: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zone2> create
zonecfg:zone2> set zonepath=/export/zone2
zonecfg:zone2> set autoboot=false
zonecfg:zone2> set ip-type=exclusive
zonecfg:zone2> add net
zonecfg:zone2:net> set physical=vnic2
zonecfg:zone2:net> end
zonecfg:zone2> exit
root@opensolaris:~#
root@opensolaris:~# zoneadm list -vc
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- zone1 configured /export/zone1 ipkg excl
- zone2 configured /export/zone2 ipkg excl

root@opensolaris:~# zoneadm -z zone1 install
A ZFS file system has been created for this zone.
Publisher: Using opensolaris.org (http://pkg.opensolaris.org/release/).
Image: Preparing at /export/zone1/root.
Sanity Check: Looking for 'entire' incorporation.
Installing: Core System (output follows)
DOWNLOAD PKGS FILES XFER (MB)
Completed 20/20 3021/3021 42.55/42.55

PHASE ACTIONS
Install Phase 5747/5747
Installing: Additional Packages (output follows)
DOWNLOAD PKGS FILES XFER (MB)
Completed 37/37 5598/5598 32.52/32.52

PHASE ACTIONS
Install Phase 7332/7332

Note: Man pages can be obtained by installing SUNWman
Postinstall: Copying SMF seed repository ... done.
Postinstall: Applying workarounds.
Done: Installation completed in 399.104 seconds.

Next Steps: Boot the zone, then log into the zone console
(zlogin -C) to complete the configuration process

root@opensolaris:~# zoneadm -z zone2 install
A ZFS file system has been created for this zone.
Publisher: Using opensolaris.org (http://pkg.opensolaris.org/release/).
Image: Preparing at /export/zone2/root.
Sanity Check: Looking for 'entire' incorporation.
Installing: Core System (output follows)
DOWNLOAD PKGS FILES XFER (MB)
Completed 20/20 3021/3021 42.55/42.55

PHASE ACTIONS
Install Phase 5747/5747
Installing: Additional Packages (output follows)
DOWNLOAD PKGS FILES XFER (MB)
Completed 37/37 5598/5598 32.52/32.52

PHASE ACTIONS
Install Phase 7332/7332

Note: Man pages can be obtained by installing SUNWman
Postinstall: Copying SMF seed repository ... done.
Postinstall: Applying workarounds.
Done: Installation completed in 397.446 seconds.

Next Steps: Boot the zone, then log into the zone console
(zlogin -C) to complete the configuration process

root@opensolaris:~# zoneadm -z zone1 boot
root@opensolaris:~# zoneadm -z zone2 boot
root@opensolaris:~# zlogin -C zone1
...(IPアドレスなどの設定)
root@opensolaris:~# zlogin -C zone2
...(IPアドレスなどの設定)

こんな感じで2つのゾーンを作成するとNICやゾーンの状態は以下のようになっているはずです。

root@dhcp-ctyo03-17-146:~# dladm show-link
LINK CLASS MTU STATE OVER
e1000g0 phys 1500 up --
vsw1 etherstub 9000 unknown --
vnic0 vnic 9000 up vsw1
vnic1 vnic 9000 up vsw1
vnic2 vnic 9000 up vsw1

root@opensolaris:~# zoneadm list -vc
ID NAME STATUS PATH BRAND IP
0 global running / native shared
4 zone1 running /export/zone1 ipkg excl
5 zone2 running /export/zone2 ipkg excl

そこで本題に戻り、元のBEに戻してみましょう。まずbeadm listで戻したいBEを確認します。 以下のようにデフォルトのBEを変更しても構いません。

root@opensolaris:~# beadm list
BE Active Mountpoint Space Policy Created
-- ------ ---------- ----- ------ -------
opensolaris - - 10.00M static 2009-08-14 11:21
opensolaris200906_initial - - 44.0K static 2009-08-14 14:42
opensolaris200906_zone_test NR / 3.22G static 2009-08-14 14:54

root@opensolaris:~# beadm activate opensolaris
root@opensolaris:~# beadm list
BE Active Mountpoint Space Policy Created
-- ------ ---------- ----- ------ -------
opensolaris R - 3.21G static 2009-08-14 11:21
opensolaris200906_initial - - 44.0K static 2009-08-14 14:42
opensolaris200906_zone_test N / 31.32M static 2009-08-14 14:54

再起動します。(GRUBメニューで起動するBEを確認します)

root@opensolaris:~# init 6

起動後、NICやゾーンの状態などを確認すると、予想通り何もありません。

root@opensolaris:~# dladm show-link
LINK CLASS MTU STATE OVER
e1000g0 phys 1500 up --
root@opensolaris:~# zoneadm list -vc
ID NAME STATUS PATH BRAND IP
0 global running / native shared

こんな感じで検証環境を効率的に用意したり、 パッチ適用やパッケージの更新前などにBEを保存しておくと万が一のトラブルにも迅速に対応できますね。

オラクルユニバーシティSolaris系技術トレーニング一覧

Solarisお勧め書籍

Solaris 11.2 システムハンドブック
Oracle Solaris 11 試験対策本(OCA)