Windows Server バックアップでベアメタルリストア

Windows Server バックアップを使用した、Windows Serverのベアメタルリストア方法。

試した環境:Windows Server 2012 R、HP Proliant DL120 Gen9、HP Dynamic Smart Array B140i、NTFSなNAS

都合上画面キャプチャはないのであしからず。ポイントだけ説明。

失敗しても責任は持ちませんので、各自で検証してください。

バックアップ編

■ Windows Server バックアップ

まずはWindows Server バックアップから。

[単発バックアップウィザード]の[バックアップする項目を選択]画面内の[項目追加]ボタンをクリック→[項目の選択]画面で[ベアメタル回復]チェックボックスにチェック。※このとき選択されないドライブがあるので自分でチェックを付ける。ドライブと同列にある[回復]は要らない。

■ ドライバファイル

次にWindows Server バックアップとは別にバックアップする必要のあるドライバファイルについて。

リストア時にドライバが必要になるので、デバイスマネージャを起動し、ディスクコントローラ(記憶域コントローラ)とネットワークアダプターのドライバーファイル名を確認する。ドライバファイルの確認方法はデバイス名のコンテキストメニュー(右クリック)の[プロパティ]をクリックして、プロパティ画面を表示し[ドライバ]タブ内の[ドライバの詳細]ボタンをクリックして表示されるドライバーファイルの名前を記録。

「HP Dynamic Smart Array B140i」なら「HPSA3.sys」

ドライバファイル一式は以下のフォルダ内に保存されている。
C:\Windows\System32\DriverStore\FileRepository
(以下、FileRepositoryフォルダ)

ドライバファイル名が「HPSA3.sys」なら「hpsa3.inf_」で始まるフォルダを探し、見つけたらそのフォルダごとDVDに焼いて保存する。(見つからなければFileRepositoryフォルダを「HPSA3.sys」で検索し見つかったファイルの存在するフォルダを保存)

B140iの場合、「hpsa3.inf_」で始まるフォルダ内にドライバのインストールに使用するセットアップ情報ファイル「hpsa3.inf」が存在するが、この「hpsa3.inf」ファイルの内容を参照すると「include machine.inf」と記載している箇所がある。これは「machine.inf」も必要ということなのでFileRepositoryフォルダの中から「machine.inf_」で始まるフォルダを探し、これもDVDに保存する。

リストア編

[今すぐインストール]ボタンがある画面の左下の[コンピュータを修復する]をクリック→[トラブルシューティング]→[詳細オプション]→[イメージでシステムを回復]→[システムイメージバックアップの選択]画面にて[システムイメージを選択する]を選択して[次へ]

[復元するコンピュータのバックアップの場所を選択してください]画面の[詳細設定]ボタンをクリック。

[ドライバをインストール]をクリック。ドライバを保存したメディアを装填。

ネットワークアダプターのドライバのセットアップ情報ファイル(xxx.inf)を選択。

ドライバのロードに成功し、[復元するコンピュータのバックアップの場所を選択してください]画面に戻ってきたら、Shift + F10 でコマンドプロンプトを呼び出して、IPアドレスを設定する。以下のコマンドを実行。(最初のipconfigでネットワークアダプタ名を取得)
> start /w wpeinit
> ipconfig
> netsh interface ip set address "ネットワークアダプタ名" static <IPアドレス> <ネットマスク> <ゲートウェイ>
> ipconfig

[復元するコンピュータのバックアップの場所を選択してください]画面の[詳細設定]ボタンをクリック。

[ネットワーク上のシステムイメージを検索する」をクリック。

[他の復元方法を選択してください]画面にて[ドライバーのインストール]ボタンをクリックして、ディスクコントローラのドライバをロード。

B140iの場合、hpsa3.infインストールは失敗するがコマンドプロンプトからdiskpart.exeを実行してディスクの一覧を表示するとディスクは見えている。
>diskpart.exe
DISKPART> list disk
ディスク 状態 サイズ 空き ダイナ GPT
------------ ------------- ------- ------- --- ---
ディスク 0 オンライン 1863 GB 839 GB
ディスク 1 オンライン 2794 GB 458 GB
ディスク 2 オンライン 2048 MB 2048 MB

[他の復元方法を選択してください]画面にて[次へ]ボタンをクリックして、リストアを続行。

これで、Windowsもベアメタルリストアできるはず。

[python3]HTMLテンプレートとしてformatメソッドを使用するコツ

pythonでCGIプログラムを書くと、str型(文字列型)の変数にテンプレートとなるHTMLを代入して可変のところだけ文字列フォーマット化してしまうことが多いが、python3から本格導入されたformatメソッドでは書式指定部分が「%」から「{}」に囲まれてた部分に変更されているので、HTML中のCSSやJavaScirptと非常に相性が悪い。({ }の間で改行してもKeyとして認識されてしまう)

「%」のときと同様に同じ文字を重ねたらエスケープできるが(「{」→「{{」)、これをHTMLテンプレートの中で全部すると非常にめんどくさいし可読性も悪くなる。

なので、人がコードを記載するときのクセの違いを利用して、後から「{」を「{{」に置換してしまおうという作戦。

大抵の人が以下のようなクセになると思う。(完全に私感)

pythonのformatによる書式指定({}の間はスペースを空けない)

 '<html><body>{body}</body></html>'.format(body="今日は晴天なり")

CSS/Javascript(可読性をあげるために{}の間に改行やスペースが入る)

 <html>
  <head>
    <style type="text/css">
        <!--
            dt{ backgroud: #bbb }
            .odd{ backgroud: #ddd }
        -->
    </style>
    <script type="text/javascript">
       function hogehoge() {
          print("本日は晴天なり");
       }
     </script>
</head>

これを踏まえて以下のようにすれば、HTMLテンプレート部分は毎度エスケープしなくてもよくなる。({}を重ねる置換を実施してからformatをしている)

import re
htmltemplate='''
 HTMLのテンプレート
'''
html=re.sub(r'([^a-zA-Z0-9])}',r'\1}}',re.sub(r'{([^a-zA-Z0-9])',r'{{\1',htmltemplate,0,re.M|re.S),0,re.M|re.S).format(書式指定)

 

[python3]デフォルト文字コードの指定(CGI実行時)

前の記事で「python3のデフォルト文字コードがUTF-8だ」なんて書いたが、それはログインプロンプトからログインしたときだけであって、ログインせずに実行してしまうスクリプト(特にCGI)は、そうではない。このカラクリは環境変数「LANG」からpythonで使用するデフォルトの文字コードを取得して自動的に設定しているからである。

$ echo $LANG
ja_JP.UTF-8

CGIの実行ユーザになるであろう「nobody」「apache」「httpd」などはログインシェルは設定されていない(/bin/falseや/sbin/nologinなど)ので環境変数など設定できるわけもなくLANGはデフォルトの「C」(=ascii)であるので、pythonの文字コードもasciiとなる。
なので、CGIで日本語を含む文字列を出力しようとしたら例のごとく

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-14: ordinal not in range(128)

となってしまう。

解決方法

ソースの先頭のほうに以下を追記する。標準出力とエラー出力のエンコードをUTF-8に設定している

import io,sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')

※importで呼び出す側およびにimportで呼び出される側両方のソースに上記コードを記載すると、だんまりエラーで異常終了するので注意!(エラーメッセージ出ず。例外処理も効かない。)

追記

ファイルに出力するときもpythonの文字コードがasciiになってしまっているが、上記方法では補正できない。
ファイル出力の文字コードを正しいものに修正するには、ファイルオープン時に文字コードを指定する。

fh=open("hoge.txt","a",encoding='utf-8')

[KVM] virshコマンドまとめ(おまけつき)

KVMをCUIで管理するときに使用するvirshコマンドの使い方まとめ。(随時更新予定)

ただまとめるだけだと他の技術ブログと同じような内容になってしまうので、意味もなくOracle VM for SPARC(LDOM)のldmコマンドとも比較してみる。(ニッチ過ぎる・・・)


  • 所謂「仮想マシン」の呼び名は正式に「ゲストドメイン」です
  • 太文字は打ち込んだコマンドです
  • []で囲まれた斜体は可変値を表します

情報表示系

仮想マシンの一覧表示

KVM
# virsh list --all
  Id    名前                         状態
 ----------------------------------------------------
  1     win2000                        実行中
  -     windows8.1                     シャットオフ
 ※--allを付けないと状態が実行中の仮想マシンのみ表示される
OVM for SPARC
# ldm list-domain
 NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME
 primary          active     -n-cv-  UART    16    1984M    0.8%  2h 19m
 testvm           bound      ------  5000    32    4G

OVM for SPARCのほうが割り当てリソースなども表示されるので便利


仮想マシンの詳細表示

KVM
# virsh dominfo [仮想マシン名]
Id:             1
名前:         win2000
UUID:           0983fb9c-1040-ffaf-4e0e-e37f364df13e
OS タイプ:   hvm
状態:         実行中
CPU:            1
CPU 時間:     343.4s
最大メモリー: 1048576 KiB
使用メモリー: 1048576 KiB
永続:         はい (yes)
自動起動:   無効にする
管理済み保存: いいえ (no)
セキュリティモデル: none
セキュリティ DOI: 0

 

ストレージプールの一覧表示

KVM
# virsh  pool-list
 名前               状態     自動起動
 ----------------------------------------->
 default              動作中  はい (yes)

OVM for SPARCにはストレージプールの概念はない。


ストレージプールの情報表示

KVM
# virsh  pool-info [ストレージプール名]
名前:         default
UUID:           fad29cc4-7345-156b-3cf8-f6748d91ab25
状態:         実行中
永続:         はい (yes)
自動起動:   はい (yes)
容量:         426.76 GiB
割り当て:   30.43 GiB
利用可能:   396.34 GiB

こっちでみないとストレージプールのパスがわからない

# virsh  pool-dumpxml [ストレージプール名]
<pool type='dir'>
  <name>default</name>
  <uuid>fad29cc4-7345-156b-3cf8-f6748d91ab25</uuid>
  <capacity unit='bytes'>458231758848</capacity>
  <allocation unit='bytes'>32669159424</allocation>
  <available unit='bytes'>425562599424</available>
  <source>
  </source>
  <target>
    <path>/var/lib/libvirt/images</path>
    <permissions>
      <mode>0755</mode>
      <owner>-1</owner>
      <group>-1</group>
    </permissions>
  </target>
</pool>

 


仮想ネットワークの表示

KVM
# virsh net-list
名前               状態     自動起動  永続
--------------------------------------------------
default              動作中  はい (yes)  はい (yes)

 

 


物理マシンのインタフェース表示

 
KVM
# virsh  iface-list --all
名前               状態     MAC アドレス
--------------------------------------------
br0                  動作中  00:23:54:73:13:30
eth1                 停止状態 00:1b:21:a1:85:0c
eth2                 停止状態 00:40:26:f9:7e:ea
lo                   動作中  00:00:00:00:00:00

 

OVMforSPARC
# dladm show-dev
e1000g0         リンク: up      速度: 100   Mbps        デュプレックス: half
e1000g1         リンク: unknown 速度: 0     Mbps        デュプレックス: half
e1000g2         リンク: unknown 速度: 0     Mbps        デュプレックス: half
e1000g3         リンク: unknown 速度: 0     Mbps        デュプレックス: half
e1000g4         リンク: unknown 速度: 0     Mbps        デュプレックス: half
e1000g5         リンク: unknown 速度: 0     Mbps        デュプレックス: half

 仮想マシンの管理

正直、GUI(仮想マシンマネージャ)から管理したほうが楽ですよ。どうせ仮想マシンのGUIコンソール使うんだし。現場がSSHしかリモート接続許可していないとか、CUI萌え~な人はどうぞ。

仮想マシン用ディスク作成

 KVM
 # qemu-img create -f qcow2 [仮想ディスクファイルのパス] [サイズ]

# qemu-img create -f qcow2 /vmdata/images/test.qcow2 8G
# ls -l /vmdata/images/test.qcow2
-rw-r--r-- 1 root root 262144  8月 13 01:45 2014 /vmdata/images/test.qcow2
 OVM for SPARC
 # mkfile 64g /export/home/LDOM/testvm_vdisk1 # 仮想ディスク作成

# ldm add-vdsdev /export/home/LDOM/testvm_vdisk1 vol1@vds0 # 制御ドメインに仮想ディスクを登録
# ldm list-services
VCC
    NAME             LDOM             PORT-RANGE
    vcc0             primary          5000-5100

VSW
    NAME             LDOM             MAC               NET-DEV   ID   DEVICE     LINKPROP   DEFAULT-VLAN-ID PVID VID                  MTU   MODE   INTER-VNET-LINK
    vsw0             primary          00:14:4f:f9:b6:f6 igb2      0    switch@0              1               1                         1500         on
    vsw1             primary          00:14:4f:f8:d9:6b igb3      1    switch@1              1               1                         1500         on

VDS
    NAME             LDOM             VOLUME         OPTIONS          MPGROUP        DEVICE
    vds0             primary          vol1                                           /export/home/LDOM/testvm_vdisk1

# ldm add-vdisk vdisk1 vol1@vds0 testvm  # 制御ドメインに登録したディスクをゲストドメインに割り当て
# ldm list-domain -o disk testvm
NAME
testvm

DISK
    NAME             VOLUME                      TOUT ID   DEVICE  SERVER         MPGROUP
    vdisk1           vol1@vds0                        0                         

※先にゲストドメインを作ってあげないといけない。

※仮想ディスクを一旦制御ドメインに登録して、制御ドメインからゲストドメインに割り当てるイメージ

 


仮想マシン作成

KVM ※実行前にブート可能なCDROMイメージを用意すること

# virt-install --connect=qemu:///system \
--name=[仮想マシン名] \
--hvm --accelerate \
--disk path=[仮想ディスクのパス],size=[仮想ディスクサイズ(GB)],device=disk,bus=virtio,format=qcow2 \
--ram=[メモリサイズ(MB)] \
--vcpus=[仮想CPU数] \
--cdrom [CDROMイメージのパス] \
--network network=[接続先仮想ネットワーク名],model=virtio \
--graphics vnc \
--vnc --os-type=linux

例 失敗してますが・・・

# virt-install --connect=qemu:///system --name=testvm --hvm --accelerate \
 --disk path=/vmdata/images/test.qcow2,size=8,device=disk,bus=virtio,format=qcow2 \
 --ram=2048 --vcpus=1 --cdrom /vmdata/ISO/CentOS-6.4-x86_64-bin-DVD1.iso --network network=default,model=virtio --vnc --os-type=linux
Starting install...
ドメインを作成中...                              |    0 B     00:00
ディスプレイをオープンできません:
Run 'virt-viewer --help' to see a full list of available command line options
Domain creation completed. You can restart your domain by running:
virsh --connect qemu:///system start testvm

成功すると仮想マシンが起動している

 # virsh list --all
 Id    名前                         状態
----------------------------------------------------
 1     win2000                        実行中
 2     testvm                         実行中
 -     windows8.1                     シャットオフ

/etc/libvirt/qemu以下に仮想マシン定義のxmlファイルができている

# ls /etc/libvirt/qemu
networks  testvm.xml  win2000.xml  windows8.1.xml

# virsh domblklist testvm
ターゲット ソース
------------------------------------------------
vda        /vmdata/images/test.qcow2
hdc        /vmdata/ISO/CentOS-6.4-x86_64-bin-DVD1.iso

# virsh domiflist testvm
インターフェース 種類     ソース  モデル   MAC
-------------------------------------------------------
-          network    default    virtio      52:54:00:8b:41:a4

OVM for SPARC
# ldm add-domain testvm
# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME
primary          active     -n-cv-  UART    16    1984M    0.3%  1h 33m
testvm           inactive   ------

# ldm add-vcpu 32 testvm  # CPU割り当て
# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME
primary          active     -n-cv-  UART    16    1984M    0.2%  1h 34m
testvm           inactive   ------          32

# ldm add-memory 4096M testvm # メモリ割り当て
# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME
primary          active     -n-cv-  UART    16    1984M    0.2%  1h 34m
testvm           inactive   ------          32    4G

# ldm add-vnet id=0 vnet0 vsw0 testvm # NIC割り当て
# ldm add-vnet id=1 vnet1 vsw1 testvm # NIC 割り当て
# ldm list-domain -o network testvm
NAME
testvm

NETWORK
    NAME             SERVICE                     ID   DEVICE     MAC               MODE   PVID VID                  MTU   LINKPROP
    vnet0            vsw0                        0               00:14:4f:fb:7b:c7        1
    vnet1            vsw1                        1               00:14:4f:f8:65:42        1


 仮想マシン CUIコンソール接続

KVM
# virsh console [仮想マシン名]
ドメイン testvm に接続しました
エスケープ文字は ^] です

※「^]」はctrl+]
※他のセッションを奪う場合は–force オプションを付ける

OVM for SPARC ※CONS列の番号がポート番号

# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME
primary          active     -n-cv-  UART    16    1984M    0.8%  2h 19m
testvm           bound      ------  5000    32    4G
# telnet localhost 5000

 仮想マシン停止

KVM
# virsh shutdown [仮想マシン名]
ドメイン [仮想マシン名] をシャットダウンしています

※acpiを有効にしておかないとシャットダウンできない

OVM for SPARC
# ldm stop-domain testvm
LDom testvm stopped

 

仮想マシン 強制停止

KVM
# virsh destroy [仮想マシン名]
ドメイン [仮想マシン名] は強制停止されました

※物理マシンの電源ブチ切りと同じです。良い子のみんなはしてはいけません。
※仮想マシンがフリーズしたときの最終手段

vrishコマンドのヘルプ

KVM
 # virsh help
グループ別コマンド:

 Domain Management (ヘルプのキーワード 'domain'):
    attach-device                  XML ファイルによるデバイスの接続
    attach-disk                    ディスクデバイスの接続
    attach-interface               ネットワークインターフェースの接続
    autostart                      ドメインの自動起動
    blkdeviotune                   ブロックデバイスの I/O チューニングパラメーターの設定または取得
    blkiotune                      ブロック I/O パラメーターの取得または設定
    blockcommit                    ブロックのコミット操作の開始
    blockcopy                      ブロックコピー操作の開始
    blockjob                       アクティブなブロック操作の管理
    blockpull                      既存のイメージからのディスクの配置
    blockresize                    ドメインのブロックデバイスの容量変更
    change-media                   CD またはフロッピードライブのメディアの変更
    console                        ゲストのコンソールへの接続
    cpu-baseline                   ベースライン CPU の計算
    cpu-compare                    XML ファイルに記載された CPU とホスト CPU の 比較
    cpu-stats                      ドメインの CPU 統計情報の表示
    create                         XML ファイルによるドメインの作成
    define                         XML ファイルによるドメインの定義(起動なし)
    desc                           ドメインの説明またはタイトルの表示または設定
    destroy                        ドメインの強制停止
    detach-device                  XML ファイルによるデバイスの切断
    detach-disk                    ディスクデバイスの切断
    detach-interface               ネットワークインターフェースの切断
    domdisplay                     ドメインのディスプレイ接続 URI
    domhostname                    ドメインのホスト名の表示
    domid                          ドメイン名または UUID からドメイン ID への変 換
    domif-setlink                  仮想インターフェースのリンクステートの設定
    domiftune                      仮想インターフェースのパラメーターの取得・設 定
    domjobabort                    ドメインの実行中ジョブの中止
    domjobinfo                     ドメインのジョブ情報
    domname                        ドメイン ID または UUID からドメイン名への変 換
    dompmsuspend                   電源管理機能を使用したドメインの穏やかな一時 停止
    dompmwakeup                    ドメインのサスペンド状態からの再開
    domuuid                        ドメイン名または ID からドメイン UUID への変 換
    domxml-from-native             ネイティブ設定からドメイン XML への変換
    domxml-to-native               ドメイン XML からネイティブ設定への変換
    dump                           解析用ファイルへのドメインのコアダンプ
    dumpxml                        XML 形式のドメイン情報
    edit                           ドメインの XML 設定の編集
    inject-nmi                     ゲストへの NMI の送信
    send-key                       ゲストへのキーコードの送信
    managedsave                    ドメインの状態の管理保存
    managedsave-remove             ドメインの管理保存の削除
    maxvcpus                       コネクションの最大仮想 CPU 数
    memtune                        メモリーのパラメーターの取得または設定
    migrate                        他ホストへのドメインのマイグレーション
    migrate-setmaxdowntime         最大許容停止時間の設定
    migrate-setspeed               マイグレーションの最大帯域の設定
    migrate-getspeed               マイグレーションの最大帯域の取得
    numatune                       NUMA パラメーターの取得または設定
    reboot                         ドメインの再起動
    reset                          ドメインのリセット
    restore                        ファイルの保存状態からドメインの復元
    resume                         ドメインの再開
    save                           ドメインの状態のファイルへの保存
    save-image-define              ドメインの状態保存ファイルの XML の再定義
    save-image-dumpxml             XML 形式の状態保存されたドメイン情報
    save-image-edit                ドメインの状態保存ファイルの XML の編集
    schedinfo                      スケジューラーのパラメーターの表示/設定
    screenshot                     カレントドメインのコンソールについてのスクリ ーンショットの取得およびファイルへの保存
    setmaxmem                      最大メモリー上限の変更
    setmem                         メモリー割り当て量の変更
    setvcpus                       仮想 CPU 数の変更
    shutdown                       ドメインの穏やかな停止
    start                          停止状態の(定義済み)ドメインの起動
    suspend                        ドメインの一時停止
    ttyconsole                     TTY コンソール
    undefine                       ドメインの定義解除
    update-device                  XML ファイルによるデバイスの更新
    vcpucount                      ドメインの仮想 CPU 数
    vcpuinfo                       ドメインの仮想 CPU 情報の表示
    vcpupin                        ドメインの仮想 CPU アフィニティーの制御または表示
    emulatorpin                    ドメインのエミュレーターアフィニティの制御ま たは確認
    vncdisplay                     VNC ディスプレイ

 Domain Monitoring (ヘルプのキーワード 'monitor'):
    domblkerror                    ブロックデバイスにおけるエラーの表示
    domblkinfo                     ドメインのブロックデバイス容量の情報
    domblklist                     ドメインの全ブロックの一覧表示
    domblkstat                     ドメインのデバイスブロックの状態の取得
    domcontrol                     ドメイン制御インターフェース状態
    domif-getlink                  仮想インターフェースのリンクステートの取得
    domiflist                      すべてのドメインの仮想インターフェースの取得
    domifstat                      ドメインのネットワークインターフェースの状態 取得
    dominfo                        ドメインの情報
    dommemstat                     ドメインのメモリー統計情報の取得
    domstate                       ドメインの状態
    list                           ドメインの一覧表示

 Host and Hypervisor (ヘルプのキーワード 'host'):
    capabilities                   ケイパビリティ
    freecell                       NUMA 空きメモリー
    hostname                       ハイパーバイザーのホスト名の表示
    node-memory-tune               ノードメモリーパラメーターの取得または設定
    nodecpustats                   ノードの CPU 統計情報の表示
    nodeinfo                       ノード情報
    nodememstats                   ノードのメモリー統計の表示
    nodesuspend                    指定された間ホストデバイスの一時停止
    qemu-attach                    QEMU 接続
    qemu-monitor-command           QEMU モニターコマンド
    qemu-agent-command             QEMU ゲストエージェントコマンド
    sysinfo                        ハイパーバイザーのシステム情報の表示
    uri                            ハイパーバイザーの正規化 URI の表示
    version                        バージョンの表示

 Interface (ヘルプのキーワード 'interface'):
    iface-begin                    現在のインターフェース設定のスナップショット 作成、後からコミット (iface-commit) または復元 (iface-rollback) 可能
    iface-bridge                   ブリッジデバイスの作成および既存ネットワーク デバイスへの接続
    iface-commit                   iface-begin 後の変更のコミットおよび復元ポイ ントの開放
    iface-define                   XML ファイルによる物理ホストインターフェース の定義(起動なし)
    iface-destroy                  物理ホストインターフェイスの停止("if-down"  による無効化)
    iface-dumpxml                  XML 形式のインターフェース情報
    iface-edit                     XML 設定を物理ホストインターフェイス用に編集
    iface-list                     物理ホストのインターフェイスの一覧表示
    iface-mac                      インターフェース名からインターフェースの MAC アドレスへの変換
    iface-name                     インターフェースの MAC アドレスからインターフェース名への変換
    iface-rollback                 iface-begin により作成された以前の保存された 設定へのロールバック
    iface-start                    物理ホストインターフェイスの開始("ifup" による有効化)
    iface-unbridge                 スレーブデバイスの切断後、ブリッジデバイスの 定義解除
    iface-undefine                 物理ホストインターフェイスの定義解除(設定か ら削除)

 Network Filter (ヘルプのキーワード 'filter'):
    nwfilter-define                XML ファイルによるネットワークフィルターの定 義または更新
    nwfilter-dumpxml               XML 形式のネットワークフィルター情報
    nwfilter-edit                  ネットワークフィルターの XML 設定の編集
    nwfilter-list                  ネットワークフィルターの一覧表示
    nwfilter-undefine              ネットワークフィルターの定義解除

 Networking (ヘルプのキーワード 'network'):
    net-autostart                  ネットワークの自動起動
    net-create                     XML ファイルによるネットワークの作成
    net-define                     XML ファイルによるネットワークの登録(起動な し)
    net-destroy                    ネットワークの強制停止
    net-dumpxml                    XML 形式のネットワーク情報
    net-edit                       ネットワークの XML 設定の編集
    net-info                       ネットワーク情報
    net-list                       ネットワークの一覧表示
    net-name                       ネットワーク UUID からネットワーク名への変換
    net-start                      停止状態の(定義済み)ネットワークの起動
    net-undefine                   停止状態のネットワークの登録削除
    net-update                     update parts of an existing network's configuration
    net-uuid                       ネットワーク名からネットワーク UUID への変換

 Node Device (ヘルプのキーワード 'nodedev'):
    nodedev-create                 ノードに XML ファイルで定義されたデバイスの作成
    nodedev-destroy                ノードのデバイスの削除(停止)
    nodedev-detach                 デバイスドライバーからノードデバイスの切断
    nodedev-dumpxml                XML 形式のノードデバイス詳細
    nodedev-list                   ホストにあるデバイスの一覧表示
    nodedev-reattach               デバイスドライバーへのノードデバイスの再接続
    nodedev-reset                  ノードデバイスのリセット

 Secret (ヘルプのキーワード 'secret'):
    secret-define                  XML ファイルによるシークレットの定義または変 更
    secret-dumpxml                 XML 形式の secret 属性
    secret-get-value               シークレット値の出力
    secret-list                    シークレットの一覧表示
    secret-set-value               シークレット値の設定
    secret-undefine                シークレットの定義解除

 Snapshot (ヘルプのキーワード 'snapshot'):
    snapshot-create                XML によるスナップショットの作成
    snapshot-create-as             一組の引数からのスナップショットの作成
    snapshot-current               カレントスナップショットの取得または設定
    snapshot-delete                ドメインのスナップショットの削除
    snapshot-dumpxml               ドメインのスナップショットの XML 形式ダンプ
    snapshot-edit                  スナップショットの XML の編集
    snapshot-info                  スナップショット情報
    snapshot-list                  ドメインのスナップショットの一覧表示
    snapshot-parent                スナップショットの親の名前の取得
    snapshot-revert                ドメインのスナップショットへの復帰

 Storage Pool (ヘルプのキーワード 'pool'):
    find-storage-pool-sources-as   潜在的なストレージプールソースの検索
    find-storage-pool-sources      潜在的なストレージプールソースの探索
    pool-autostart                 プールの自動起動
    pool-build                     プールの構築
    pool-create-as                 一組の引数からプールの作成
    pool-create                    XML ファイルによるプールの作成
    pool-define-as                 一組の引数からのプールの定義
    pool-define                    XML ファイルによるプールの定義(起動なし)
    pool-delete                    プールの削除
    pool-destroy                   プールの強制停止
    pool-dumpxml                   XML 形式のプール情報
    pool-edit                      ストレージプールの XML 設定の編集
    pool-info                      ストレージプール情報
    pool-list                      プールの一覧表示
    pool-name                      プール UUID からプール名への変換
    pool-refresh                   プールのリフレッシュ
    pool-start                     (以前に定義した)停止状態のプールの起動
    pool-undefine                  停止状態のプールの定義解除
    pool-uuid                      プール名からプール UUID への変換

 Storage Volume (ヘルプのキーワード 'volume'):
    vol-clone                      ボリュームのクローン
    vol-create-as                  一組の引数からボリュームの作成
    vol-create                     XML ファイルによるボリュームの作成
    vol-create-from                別のボリュームを入力として使用したボリューム の作成
    vol-delete                     ボリュームの削除
    vol-download                   ボリュームのファイルへのダウンロード
    vol-dumpxml                    XML 形式のボリューム情報
    vol-info                       ストレージボリューム情報
    vol-key                        任意のボリューム名またはパスのボリュームキー の表示
    vol-list                       ボリューム一覧の表示
    vol-name                       任意のボリュームキーまたはパスのボリューム名 の表示
    vol-path                       任意のボリューム名またはキーのボリュームパス の表示
    vol-pool                       任意のボリュームキーまたはパスのストレージプ ールの表示
    vol-resize                     ボリュームの容量変更
    vol-upload                     ボリュームへのファイルのアップロード
    vol-wipe                       ボリュームの完全消去

 Virsh itself (ヘルプのキーワード 'virsh'):
    cd                             カレントディレクトリーの変更
    connect                        ハイパーバイザーへの(再)接続
    echo                           引数のエコー
    exit                           対話式ターミナルの終了
    help                           ヘルプの表示
    pwd                            カレントディレクトリーの表示
    quit                           対話式ターミナルの終了

ダメだ。ぜんぜんまとまってない・・・

 

 

[NNMi]監視対象のホスト名を変更する

NNMiにおいて、監視対象のホスト名を変更する方法。

これが厄介!NNMiに表示されるホスト名はノード検出時(検出シードに登録した直後)に決まってしまうので、ホスト名を変更したときは、

ノードの削除→検出シードの削除→検出シードに登録→(ノード作成)→ノードグループ登録

をしてあげないといけない・・・

[solaris] ディスクのミラーリング(ソフトウェアRAID)

solarisでのディスクミラーリング方法

ルート領域と、swap領域、その他の領域で手順が若干異なる

0.metadb作成

metadbの複製のガイドラインは

  • ディスクが1つの場合は3つの複製を作成
  • ディスクが2~4つの場合は2つの複製を作成
  • ディスクが5つ以上の場合は1つの複製を作成

1つのmetadbが論理破損しても、過半数のメタ情報が1つのmetadbに残るようにすることから。(要するに2つのmetadbが残っていれば過半数残っているだろう、という考えから)

# metadb -a -f -c 2 c1t0d0s4 c1t1d0s4

1.ルート領域

# metainit -f d10 1 1 c1t0d0s0
d10:連結/ストライプがセットアップされます
# metainit d20 1 1 c1t1d0s0
d20:連結/ストライプがセットアップされます
# metainit d0 -m d10
d0:ミラーがセットアップされます
# cp -p /etc/vfstab /etc/vfstab.bak
# metaroot d0
# vi /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/c1t0d0s1 – – swap – no –
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no –
/dev/dsk/c1t0d0s3 /dev/rdsk/clt0d0s3 /usr ufs 1 no –
/dev/dsk/c1t0d0s6 /dev/rdsk/c1t0d0s6 /var ufs 1 no –
/dev/ask/c1t0d0s7 /dev/rdsk/c1t0d0s7 /export/home ufs 2 yes –
/dev/dsk/c1t0d0s5 /dev/rdsk/c1t0d0s5 /opt ufs 2 yes –
swap – /tmp tmpfs – yes –
# lockfs -fa
# sync;sync;sync
# /usr/sbin/shutdown -y -g0 -i6

2.swap領域

# metainit -f d11 1 1 c1t0d0s1
d11:連結/ストライプがセットアップされます
# metainit -f d21 1 1 c1t1d0s1
d21:連結/ストライプがセットアップされます
# metainit d1 -m d11
d1:ミラーがセットアップされます
# metattach d1 d21
d1:サブミラーd21 is attached
# vi /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/md/dsk/d1 – – swap – no –
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no –
/dev/dsk/c1t0d0s3 /dev/rdsk/clt0d0s3 /usr ufs 1 no –
/dev/dsk/c1t0d0s6 /dev/rdsk/c1t0d0s6 /var ufs 1 no –
/dev/ask/c1t0d0s7 /dev/rdsk/c1t0d0s7 /export/home ufs 2 yes –
/dev/dsk/c1t0d0s5 /dev/rdsk/c1t0d0s5 /opt ufs 2 yes –
swap – /tmp tmpfs – yes –

3.その他の領域
長くなるので1領域だけ

# metainit -f d13 1 1 c1t0d0s3
d13:連結/ストライプがセットアップされます
# metainit d23 1 1 c1t1d0s3
d23:連結/ストライプがセットアップされます
# metainit d3 -m d13
d3:ミラーがセットアップされます
# metattach d3 d23
d1:サブミラーd21 is attached
# vi /etc/vfstab
# vi /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/md/dsk/d1 – – swap – no –
/dev/md/dsk/d0 /dev/md/rdsk/d0 / ufs 1 no –
/dev/md/dsk/d3 /dev/md/rdsk/d3 /usr ufs 1 no –
/dev/dsk/c1t0d0s6 /dev/rdsk/c1t0d0s6 /var ufs 1 no –
/dev/ask/c1t0d0s7 /dev/rdsk/c1t0d0s7 /export/home ufs 2 yes –
/dev/dsk/c1t0d0s5 /dev/rdsk/c1t0d0s5 /opt ufs 2 yes –
swap – /tmp tmpfs – yes –

[windows]インストール後に使用者名を変える方法

Windowsのインストール後に「使用者名」を変更する方法
どこかのメーカーのインストールガイドCDが”使用者名”に半角英数しかうけつけてくれなくて日本語の名前が入力っできなかったとか、名前を間違っちゃったなんていうときの、”使用者名”の変更方法。

レジストリをいじります。

regeditを起動して([ファイル名を入力して実行]で「regedit」を入力してEnter)、ツリーで次を辿る[HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersion](CurrentVersionまで着たら、CurrentVersionをクリック)。

すると右側に[RegisteredOwner]や[RegisteredOrganization]がある。

この[RegisteredOwner]が”使用者名”、[RegisteredOrganization]が”組織名”。ダブルクリックして値を変更する。

IPVS-NATでリアルサーバーから応答がない事象の解決方法

○ 事象
IPVS(LVS)(NAT/マスカレード構成)環境にて、端末からサービスIPにアクセスするとサーバーからの応答がない。
tcpdumpで調べると、応答パケットがリアルサーバーからアクセス元端末に戻っておらず、さらに調べると、IPVSを構築しているサーバーで応答パケット(戻りの通信)が破棄(遮断)されている。

□ アクセス端末
↓|
■×IPVS・ファイアーウォール
↓|↑
□ リアルサーバー

○原因

ファイアーウォールがIPVSを経由した応答パケットを認識していない!

ファイアウォールのルールが

iptables -P FORWARD DROP

iptables -A INPUT -i eth0 -p tcp –dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp –dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -m state –state ESTABLISHED,RELATED -j ACCEPT
(eth0・・・WAN(入り口) eth1・・・LAN(リアルサーバー側)

であったりすると、通常のルーティングならファイアーウォールがアクセス先にHTTPアクセスがあったこを記憶して転送し、の応答が戻ってきたときにアクセス端末側に返す。

しかし転送にIPVSを噛ますとアクセスがあったという記憶をしていないらしい。

※正確に言うと、記憶している場所が違うので情報を取り出せない。
端末→IPVS→リアルサーバー・・・INPUTチェイン
端末←IPVS←リアルサーバー・・・FORWARDチェイン

なので、応答パケット(戻りのパケット)のダイナミックフィルタリングで許可がでず、PVSを構築しているサーバー上でパケットが破棄されてしまう・・・

詳細はこのURLのイントロダクション参照(英文)

http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.filter_rules.html
※要訳
IPVS-NATはnetfilter(iptables)の仕様上、経路追跡に問題がある。
カーネルにパッチを適用することによって問題が解決するらしい。
またはDSR構成にする。

と言われても、素のカーネルをコンパイルして(しかもパッチ適用)使用するのはすがに怖い!
かといてDSR構成にもできない(並行して、SSL証明書などの問題で
PoundやApacheをつかってURLベースのバランシングをしているなど・・・)

ではどうするか?

○解決方法
ダイナミックフィルタリングができないなら、静的フィルタリングで無理やり許可する!

IPVSサーバー上で、リアルサーバーからの転送通信を送信元のポートを特定して許可る。
たとえばSMTPなら

iptables -A FORWARD -i eth1 -o eth0 -p tcp –sport 25 -j ACCEPT

(eth0・・・WAN(入り口) eth1・・・LAN(リアルサーバー側)

これでめでたく開通。
セキュリティー上ちょっと怖いが・・・