2012年12月16日日曜日

備忘録:ZFSルートのバックアップ手順

1. バックアップ用領域の作成

 % sudo zpool create -f backup c4t1d0s0 

 % zpool list
 NAME     SIZE  ALLOC   FREE  CAP  DEDUP  HEALTH  ALTROOT
 backup  15.9G   126K  15.9G   0%  1.00x  ONLINE  -
 rpool   15.9G  5.22G  10.7G  32%  1.00x  ONLINE  -


2. ルートプールのプロパティを確認(ファイルに保存した方が良いかも)


 % zpool get all rpool 
 NAME   PROPERTY       VALUE                 SOURCE
 rpool  size           15.9G                 -
 rpool  capacity       32%                   -
 rpool  altroot        -                     default
 rpool  health         ONLINE                -
 rpool  guid           7318362038220972324   -
 rpool  version        33                    default
 rpool  bootfs         rpool/ROOT/solaris-1  local
 rpool  delegation     on                    default
 rpool  autoreplace    off                   default
 rpool  cachefile      -                     default
 rpool  failmode       wait                  default
 rpool  listsnapshots  off                   default
 rpool  autoexpand     off                   default
 rpool  dedupditto     0                     default
 rpool  dedupratio     1.00x                 -
 rpool  free           10.7G                 -
 rpool  allocated      5.22G                 -
 rpool  readonly       off                   -

3. ルートプールの容量確認

 % zpool list rpool
 NAME    SIZE  ALLOC   FREE  CAP  DEDUP  HEALTH  ALTROOT
 rpool  15.9G  5.22G  10.7G  32%  1.00x  ONLINE  -

4. ルートプールのコンポーネントを特定(ファイルに保存した方が良いかも)

 % zfs list -r rpool
 NAME                       USED  AVAIL  REFER  MOUNTPOINT
 rpool                     5.29G  10.3G  46.5K  /rpool
 rpool/ROOT                2.97G  10.3G    31K  legacy
 rpool/ROOT/solaris        5.58M  10.3G  1.61G  /
 rpool/ROOT/solaris-1      2.96G  10.3G  1.62G  /
 rpool/ROOT/solaris-1/var   571M  10.3G   364M  /var
 rpool/ROOT/solaris/var    2.86M  10.3G   203M  /var
 rpool/dump                1.29G  10.4G  1.25G  -
 rpool/export               140K  10.3G    32K  /export
 rpool/export/home          108K  10.3G    32K  /export/home
 rpool/export/home/koji    76.5K  10.3G  76.5K   /export/home/koji
 rpool/swap                1.03G  10.4G  1.00G  -

5. ルートプールの再起的なスナップショットを作成

 % NOW=`date +%Y%m%d_%H%M%S`
 % sudo zfs snapshot -r rpool@rpool.${NOW}
 % zfs list -t snapshot
 NAME                                             USED  AVAIL    REFER  MOUNTPOINT
 rpool@rpool.20121216_115705                         0      -    46.5K  -
 rpool/ROOT@rpool.20121216_115705                    0      -    31K  -
 rpool/ROOT/solaris@rpool.20121216_115705            0      -    1.61G  -
 rpool/ROOT/solaris-1@install                    9.14M      -    1.40G  -
 rpool/ROOT/solaris-1@2012-12-07-02:16:10         179M      -    1.61G  -
 rpool/ROOT/solaris-1@rpool.20121216_115705          0      -    1.62G  -
 rpool/ROOT/solaris-1/var@install                 146M      -     215M  -
 rpool/ROOT/solaris-1/var@2012-12-07-02:16:10    18.1M      -     383M  -
 rpool/ROOT/solaris-1/var@rpool.20121216_115705      0      -     364M  -
 rpool/ROOT/solaris/var@rpool.20121216_115705        0      -     203M  -
 rpool/dump@rpool.20121216_115705                    0      -    1.25G  -
 rpool/export@rpool.20121216_115705                  0      -    32K  -
 rpool/export/home@rpool.20121216_115705             0      -    32K  -
 rpool/export/home/koji@rpool.20121216_115705        0      -    76.5K  -
 rpool/swap@rpool.20121216_115705                    0      -    1.00G  -

6. swap及び、dumpのスナップショットを削除

 % sudo zfs destroy rpool/dump@rpool.${NOW}
 % sudo zfs destroy rpool/swap@rpool.${NOW}
 % zfs list -t snapshot                              
 NAME                                             USED  AVAIL    REFER  MOUNTPOINT
 rpool@rpool.20121216_115705                         0      -    46.5K  -
 rpool/ROOT@rpool.20121216_115705                    0      -    31K  -
 rpool/ROOT/solaris@rpool.20121216_115705            0      -    1.61G  -
 rpool/ROOT/solaris-1@install                    9.14M      -    1.40G  -
 rpool/ROOT/solaris-1@2012-12-07-02:16:10         179M      -    1.61G  -
 rpool/ROOT/solaris-1@rpool.20121216_115705          0      -    1.62G  -
 rpool/ROOT/solaris-1/var@install                 146M      -     215M  -
 rpool/ROOT/solaris-1/var@2012-12-07-02:16:10    18.1M      -     383M  -
 rpool/ROOT/solaris-1/var@rpool.20121216_115705  76.5K      -     364M  -
 rpool/ROOT/solaris/var@rpool.20121216_115705        0      -     203M  -
 rpool/export@rpool.20121216_115705                  0      -    32K  -
 rpool/export/home@rpool.20121216_115705             0      -    32K  -
 rpool/export/home/koji@rpool.20121216_115705        0      -    76.5K  -

7. スナップショットをバックアップディスクに格納

 % sudo sh -c "zfs send -Rv rpool@rpool.${NOW} | gzip >/backup/rpool.${NOW}.gz" 
 sending from @ to rpool@rpool.20121216_115705
 WARNING: could not send rpool/swap@rpool.20121216_115705: does  not exist
 sending from @ to rpool/export@rpool.20121216_115705
 sending from @ to rpool/export/home@rpool.20121216_115705
 sending from @ to rpool/export/home/koji@rpool.20121216_115705
 sending from @ to rpool/ROOT@rpool.20121216_115705
 sending from @ to rpool/ROOT/solaris-1@install
 sending from @install to rpool/ROOT/solaris-1@2012-12-07-02:16:10
 sending from @2012-12-07-02:16:10 to rpool/ROOT/solaris-1@rpool.20121216_115705
 sending from @ to rpool/ROOT/solaris-1/var@install
 sending from @install to rpool/ROOT/solaris-1/var@2012-12-07-02:16:10
 sending from @2012-12-07-02:16:10 to rpool/ROOT/solaris-1/var@rpool.20121216_115705
 WARNING: could not send rpool/dump@rpool.20121216_115705: does  not exist
 sending from @ to rpool/ROOT/solaris@rpool.20121216_115705
 sending from @ to rpool/ROOT/solaris/var@rpool.20121216_115705
 % ls -hl /backup 
 total 2214377
 -rw-r--r--   1 root     root        1.1G 12月 16日  12:12  rpool.20121216_115705.gz

ZFSルートシステムのバックアップとリストア

Solaris 11 カルチャーショックの第四弾。

ZFSルートのシステムにおける、システムバックアップとリストアの手順については、Oracleの公式ドキュメントに詳しく記載されているので、そちらを参照して頂くとして、保存媒体をどうすべきかということを考えてみたい。


まず、Solaris 11の前はどのようにしていたかを振り返ってみよう。

PRIMEPOWERシリーズの場合、DATドライブを内蔵していることが多く、ufsdumpコマンドでDATテープにバックアップイメージを保存することが、通常の手段であった。

ところが、SPARC Enterprise Tシリーズの登場後、DATドライブの搭載が出来ない、インストールメディアにテープデバイスのドライバが含まれなくなった等の要因が有り、テープ媒体への保存が最適な手段とは言えなくなった。
取り得る手段は以下のようなものが考えられる。


  1. 運用システムとは別に、回復システムを構築し、バックアップ領域用に搭載したHDDにufsdumpイメージを保存する。
  2. テープドライブのドライバをインストールした回復システムを構築し、外付けテープドライブにufsdumpイメージを保存する。
  3. ETERNUSシリーズを利用したSAN Boot環境とし、ディスクアレイ装置のスナップショット機能(アドバンスト・コピー)を利用する。
実際の運用に用いたことはないが、USB HDDへのufsdumpイメージ保存という手段も利用可能だろう。


それでは、Solaris 11 の ZFSルート環境ではどうであろうか?

まず、上記 1. の手段。
ufsdumpコマンドが利用できないため、zfs snapshot コマンドで代替することになると思われる。
さらに、回復システムが必要かという点も考慮が必要であろう。

では、2. の手段はどうか。
zfs snapshot コマンドが、テープドライブをサポートしない以上、利用することは不可能であり、候補にはなり得ない。

最後に、3. の手段。
これは、そのまま適用できるだろう。
しかしながら、SAN Boot 環境となると、それなりの初期投資が必要となることから、適用可能なプロジェクトは限られるものと思われる。


災害対策用として、バックアップメディアを複数用意していた場合(テープの遠隔地保存等)はどうか。

この場合は、USB HDDの利用も大きな選択肢となるのではないか。もちろん、内蔵HDDに保存したスナップショットを、リートシステムに転送するという手段も考えられる。が、転送先にもZFSを利用可能なシステムが必要となり、初期投資がネックになると考えられる。
ただし、スナップショットを保存するためのシステムと考えず、通常時は試験環境として利用し、災害発生時は代替システムとして本番運用に利用するという用い方には適しているのではないだろうか。


ufssump/ufsrestoreを用いたバックアップ・リストアと比較し、選択肢が増えたと言えるが、適材適所での提案が必要になると言うことだろう。

2012年12月15日土曜日

ZFSルートとfuser

Solaris 11 カルチャーショックの第三弾。

Solaris 10 (の初期リリースのみ??)でよく遭遇した、システム停止(再起動)時のこのメッセージ。

 umount: / busy


当時サポートに問い合わせて、対処方法を探ったような記憶がある。
psコマンドと、fuserコマンドを利用して、当該ファイルシステムを使用しているプロセスを特定して下さい、と言われたような...
(結局、「システムの再起同時にfsckが走らなければ影響はないです」だって?)

そんな問題に遭遇した場合、ZFSルートのシステムではどうするの?
てことで、こんな環境で試してみた。


 % zfs list
 NAME                       USED  AVAIL  REFER  MOUNTPOINT
 rpool                     5.29G  10.3G  46.5K  /rpool
 rpool/ROOT                2.96G  10.3G    31K  legacy
 rpool/ROOT/solaris        5.58M  10.3G  1.61G  /
 rpool/ROOT/solaris-1      2.96G  10.3G  1.62G  /
 rpool/ROOT/solaris-1/var   570M  10.3G   363M  /var
 rpool/ROOT/solaris/var    2.86M  10.3G   203M  /var
 rpool/dump                1.29G  10.4G  1.25G  -
 rpool/export               138K  10.3G    32K  /export
 rpool/export/home          106K  10.3G    32K  /export/home
 rpool/export/home/koji    73.5K  10.3G  73.5K  /export/home/koji
 rpool/swap                1.03G  10.4G  1.00G  -

 % pwd
 /export/home/koji

 % ps
   PID TTY         TIME CMD
  1602 pts/1       0:00 zsh
  1610 pts/1       0:00 ps

 % fuser -c /export/home/koji 
 /export/home/koji:     1613c    1602c


ZFSルートだからといって、特別な挙動は見せないようですね。
zfsコマンドのサブコマンドでは取得できないようですし、今までと同じ管理手順を利用できると分かり、一安心です。


2012年12月10日月曜日

Solarisカルチャーショックのお話 - システムディスクmirror編 -

Solaris 11 で体験したカルチャーショック その2。
本日のお題は、「システムディスクのmirror設定」です。

通常、システムの耐障害性を向上させるため、システムディスク(OSがインストールされているハードディスク)はRAID1(ミラーリング)構成とされます。

Solaris 10 までの場合、ルートファイルシステムは(よっぽど変わり者でない限り)UFSとなります。この場合、RAID1構成とするには、別途Solistice DiskSuiteや、PRIMECLUSTER Global Disk Services等のソフトを利用することとなります。
ところが、Solaris 11 から ZFSルートがデフォルトとなったため、上記のオプションソフトを利用せずにRAID1構成が可能となりました。簡単に出来そうなのですが、ちょっとした落とし穴もあるため、以下に設定手順を整理しておきます。
 ※インストール時にRAID1構成を指定可能なのかは、検証していません。


インストール直後は、システムディスクは単独構成となっているため、ミラー用のディスクを追加する必要があります。
まずは、現状の状態確認を行います。

 % zpool status rpool
   pool: rpool
  state: ONLINE
   scan: none requested
 config:

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

rpoolは、c4t0d0s0単独で構成されている状態です。
ここに、ミラー用のディスクを追加することとなりますが、追加するために若干の作業(ミラー先ディスクに、ラベル付けを行っておく)が必要となります。


 % sudo format
 
 Searching for disks...done
 
 AVAILABLE DISK SELECTIONS:
        0. c4t0d0 <ATA-VBOX HARDDISK-1.0 cyl 2085 alt 2 hd 255 sec 63>
           /pci@0,0/pci1000,8000@16/sd@0,0
        1. c4t1d0 <VBOX-HARDDISK-1.0 cyl 2086 alt 2 hd 255 sec 63>
           /pci@0,0/pci1000,8000@16/sd@1,0
 Specify disk (enter its number): 1

ミラー先ディスクは、c4t1d0になるので、「1」を入力する。


 selecting c4t1d0
 [disk formatted]
 No Solaris fdisk partition found.

 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
         fdisk      - run the fdisk program
         repair     - repair a defective sector
         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
         inquiry    - show disk ID
         volname    - set 8-character volume name
         !<cmd>     - execute <cmd>, then return
         quit
 format> fdisk


fdiskパーティションの作成を行うため、「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

「y」を入力し、ディスク全体を、Solarisパーティションとする。


 format> partition

スライス設定のため「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> 0

スライス0に全領域を割り当てるため、「0」を入力する。


 Part      Tag    Flag     Cylinders        Size            Blocks
   0 unassigned    wm       0               0         (0/0/0)           0
 
 Enter partition id tag[unassigned]: 
 Enter partition permission flags[wm]: 
 Enter new starting cyl[0]:
 Enter partition size[0b, 0c, 0e, 0.00mb, 0.00gb]: 2085c
 partition> p
 Current partition table (unnamed):
 Total disk cylinders available: 2085 + 2 (reserved cylinders)
 
 Part      Tag    Flag     Cylinders        Size            Blocks
   0 unassigned    wm       0 - 2084       15.97GB    (2085/0/0) 33479460
   1 unassigned    wm       0               0         (0/0/0)           0
   2     backup    wu       0 - 2084       15.97GB    (2085/0/0) 33495525
   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 unassigned    wm       0               0         (0/0/0)           0
   7 unassigned    wm       0               0         (0/0/0)           0
   8 unassigned    wu       0               0         (0/0/0)       0
   9 unassigned    wm       0               0         (0/0/0)           0


スライス0に全領域が割り当てられたことを確認。

 
 partition> label
 Ready to label disk, continue? y


変更をディスクに書き込むため「label」と入力する。

 
 partition> q
  
 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
         fdisk      - run the fdisk program
         repair     - repair a defective sector
         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
         inquiry    - show disk ID
         volname    - set 8-character volume name
         !<cmd>     - execute <cmd>, then return
         quit
 format> q

ミラー先ディスクの準備が整ったので、いよいよミラー化の実施です。


 % sudo zpool attach -f rpool c4t0d0s0 c4t1d0s0
 Make sure to wait until resilver is done before rebooting.


RAID1構成となったこと及び、コピーの進捗確認は、以下のコマンドで。

 % zpool status rpool
   pool: rpool
  state: ONLINE
 status: One or more devices is currently being resilvered.  The pool will
         continue to function, possibly in a degraded state.
 action: Wait for the resilver to complete.
   scan: resilver in progress since Mon Dec 10 13:08:06 2012
     223M scanned out of 5.22G at 2.17M/s, 0h39m to go
     223M resilvered, 4.18% done
 config:

         NAME          STATE     READ WRITE CKSUM
         rpool         ONLINE       0     0     0
           mirror-0    ONLINE       0     0     0
             c4t0d0s0  ONLINE       0     0     0
             c4t1d0s0  ONLINE       0     0     0  (resilvering)

 errors: No known data errors



ミラー先ディスクの事前準備を忘れた場合は、s0が存在しないため、cXtXdXで指定することになるが、その場合、以下のエラーが発生するので注意すること。

 % sudo zpool attach rpool c4t0d0 c4t1d0

 cannot label 'c4t1d0': EFI labeled devices are not supported on root pools.


zpool の attach コマンドで、"-f" オプションを指定しなかった場合は、こちらのエラーが...

 % sudo format zpool attach rpool c4t0d0s0 c4t1d0s0

 invalid vdev specification
 use '-f' to override the following errors:
 /dev/dsk/c4t1d0s0 overlaps with /dev/dsk/c4t1d0s2


Solistic DiskSuiteやPRIMECLUSTER GDSよりも、かなり簡単な作業でRAID1構成とすることが可能と感じた。


-- 2012年12月10日 17時15分 追記 --

上記手順だけでは、ミラー先ディスクから起動できません。
ブートローダーをインストールしましょう。 :-)


手元に、Sparc環境がないので、x86環境のみですが....


まずは、boot archive の更新のため、システムをリブート(もちろん、bootadmコマンドで更新してもOKですが、環境変更後も起動が可能であることを確認する意味もあるため、リブートを推奨)。

  % sudo shutdown -i6 -g0 -y


無事起動できたら、ブートローダーをミラー先ディスクにインストール。

 % sudo bootadm install-bootloader c4t1d0s0


正常に終了したら、一度システムを停止。



ミラー元ディスク(例の場合、c4t0d0)をアクセスできない状態にして、システムを起動。
無事に起動すれば、設定完了だ。
システムを停止して、ミラー元ディスクをアクセス可能な状態にしておこう。

2012年12月7日金曜日

Solarisカルチャーショックのお話 - ipadmコマンド編 -

和歌山の地方ISPに転職し、Solarisから遠ざかること2年と10ヶ月弱。
その間に、Solaris 11 11/11がリリースされ、先日は、ついにバージョン表記が変更となる 、Solaris 11.1がリリースされた。
またまた、Solarisメインの職業に復帰することになり、新しいバージョンでの変更点確認や、操作の勘を取り戻すため、VirtualBox上に環境構築しようと思い立ったまではよかったが...

Solaris 11で経験した、カルチャーショック( :-P )をあげてみる。


  • ZFSルートがデフォルトになっていた :-O
  • /etc/hostname.IF ファイルが存在しない (ipadmで管理する)
  • Boot Environment ってなに?
  • root の デフォルトシェルが "bash" に変更された


現在のところ、こんなものだけれど、まだまだたくさん出てくるのだろうな :-(


で、ipadm。

インストール時にプライマリインターフェイスとして選択した、ホストオンリーアダプタについては、設定が実施され通信可能(当然ですね)だが、外部に出て行くことが出来ない状態だった(これも当然ですね)。
/etc/hostファイルにエントリーを追加して、/etc/hostname.IF ファイルを作ったらリブートしてOKじゃん、なんて安易に考えていました...

そういえば、DHCPの定義ってどうするんだっけ? と。ホストオンリーアダプタの設定方法をまねれば問題ないね、と安易に考えていましたよ。

 % ifconfig -a

して、インターフェイス名を確認(net2だった)。

 % cat /etc/hostname.net2
 cat: cannot open /etc/hostname.net2: No such file or directory

えっ!! hostname.IF ファイルがない?!

そいじゃ、どうやってネットワーク設定するんだよ (怒
てことで、Google先生にお伺いしました。ふむふむ、ipadmコマンドとやらを使うのね。
で、こんな感じで設定してみた。

1. インターフェイスの作成。ifconfig plumb相当?
 % sudo ipadm create-ip net0

2.net0 が作成されたことを確認。
 % ifconfig -a

3.net0 をDHCPで構成する。
 % sudo ipadm create-addr -T dhcp net0/v4dhcp

4.net0 にIPアドレスが割り当てられていることを確認。
 % ifconfig -a

5.net0 にデフォルトゲートウェイが割当られている。
 % netstat -rn


以上で、無事外部と通信できるようになった。
ちなみに、sudoコマンドを使用しているけれど、Solaris 11的には、pfexec ~なんだろうね :-)