

堂々の完結編です。感動してモニタが見えなくなるかも。
昔の記事(妥協した結果)
http://rhiz.jp/id/111.html
hamachi のセキュリティが信頼できるかが不透明なので、本番で使うのが怖い。
とも書いてあるし、
やはりhamachiにしようかとも考えたが、Hyper-Vにインストール出来ないので厳しいと思う。
とも書いてある。
ゲストOSに入れて、本来のサブネットにブリッジさせれば動くかも知れないが・・・。
という風にも書いてあるけど、このアプローチは意味が無い気がする。
やりたいこと
Hyper-Vマネージャをリモートで安全に使うために、
インターネット上に存在する管理PCとHyper-VサーバをVPNで繋げる!
セキュリティには不安があるが、とりあえずHamachiを使う。
Hamachiのセキュリティを疑問視するべきなのは変わらないので、極力安全な設定をする。
試す場合は自己責任で。
シチュエーション
導入済みのHyper-V Serverがすでにあり、ローカルには管理PCが存在する。
これらはすでに設定が完了しており、リモートデスクトップも使える状態になっている。
また、リモートデスクトップはsshトンネルによってインターネット経由でも使用可能な状態になっている。
(RDP 7.0の暗号化が信頼出来るのであれば、sshトンネルはしなくても良い)
scpやftpなどのファイルの転送手段がある。
IISのFTPはパフォーマンス的な観点ではFileZillaよりずっと早いのでおすすめ。セキュリティは・・・。
インターネット経由で新しい管理PCを稼働させて、ローカルの管理PCを廃止したい。
サーバのユーザアカウントにはパスワードがかかっており、ゲストアカウントがオンになっていたりしないこと。
firewallはoffにしなくても、onのままで設定可能なので、offにするのはうまくいかない時の動作確認に限るべし。
導入
サーバにHamachiをインストールする。
現在公式から配布されているインストーラは、x86版ではあるようだが、それでインストールできる。
https://secure.logmein.com/products/hamachi2/
試したバージョンは2.0.2.85
しかし、インストール後の起動は「oledlg.dll が存在しない」というエラーを吐いて、うまくいかない。
Windows Web Server 2008 R2があれば、system32の中にある同名のファイルを、hamachi本体のあるディレクトリにコピーすれば、このエラーを回避する事が出来る。
起動が完了したら、「システム」「設定」「セキュリティ」で「デフォルトで新しいネットワークメンバをブロックする」にチェックを入れる。
「ネットワーク」「新規ネットワークの作成」で、IDとパスワードを設定する。
Hamachiの設定
管理PCにもHamachiを導入し、サーバとの接続を行う。
サーバ側で、接続してきたIDを「セキュリティ」画面で探し出し、右クリックして「信頼する」。
管理PCに戻り、右クリックでpingが打てる事を確認する。
共有フォルダにアクセス出来ないor適切な制限がかかっていることも確認すると良い。
管理PCの設定
従来通り。
http://blogs.technet.com/hirookun/archive/tags/Maniax/default.aspx
【仮想】Hyper-V Serverを使ったこんな環境を作りたい(4) まで手順を進める。
元サイトが消えたら悲しいので一応要約しておく。
- Windows 7 Pro or Ult をインストールする
- Hyper-Vマネージャをインストールする
- コントロールパネルのプログラムの「Windows の機能の有効化または無効化」で、Hyper-Vツールにチェックを入れる
- HVRemote.wsfをダウンロードする
- コマンドプロンプトを右クリックして「管理者として実行する」
- ダウンロードしたHVRemote.wsfのあるディレクトリに移動し、次のコマンドを打つ。
- 管理ツールのHyper-Vマネージャを開いて接続を確認する。だめなら再起動してもう一度試してみる。
cscript.exe hvremote.wsf /mmc:enable
cscript.exe hvremote.wsf /anondcom:grant
セキュリティへの配慮
安全なリモートデスクトップが利用できているなら、
「Hyper-Vマネージャを使いたいときだけサーバでHamachiを起動する」のがベストである。
使わないときはオフにしておく。

結構古い情報なのに気づかなかった。
高添はここにいます : Windows XP と Windows Vista 用の RDP 7.0 提供開始!!
http://blogs.technet.com/osamut/archive/2009/10/31/3290516.aspx
サーバ側で、RDPのセキュリティを「低」にする必要は無いし、高速に接続できていい感じ。
動画再生機能はあてにならないけど、音楽は仮想サウンドドライバを入れれば一応聴ける。

管理PCで管理したい場合は「Hyper-V Server R2導入 3時間クッキング」の記事でも見てください。
シチュエーション
- このサーバはインターネット(sshトンネルされたrdp 7.0)経由で管理できるようにする。
- sshdは別途用意されており、インターネット経由でログイン可能になっているものとする。
- 用意出来ないならルータを設定してRDPポートを直接開放しても良いがセキュリティに十分注意する。
- 管理用の端末はrdp 6.0にも対応出来るようにする(MSは非推奨だがsshを経由しているので良しとする)
- Windows XPはrdp 7.0に対応していない。
- 管理PCはサーバと同一のサブネットには存在しない。よってHyper-Vマネージャも使えない。
- Windows 7が無いとHyper-Vマネージャが用意できないのでRDPに頼ることになる。
- 仮想環境ももちろん管理できるようにする。今回は以下の仮想環境を導入した。
- Windows Web Server 2008 R2(常時起動)
- Windows Web Server 2008 R1 x64(正式名称ではないが便宜上R1と記載)
- CentOS 5.4 x64(常時起動)
- CentOS 5.4 x86(常時起動)
- Windows 7(後に撤回)
- Windows Vista(今回は用意しなかった)
- Windows XP(後に撤回)
- ディスク構成の要件
- ディスクの故障によりシステムが停止しないよう、システムディスクはRAID1で構築する。
- パフォーマンスの確保のためにVHDは固定ディスクとする。
- VHDを配置するディスクに十分な空き容量を確保する。
- 物理メモリを8GB実装する。また、Hyper-Vの都合により、メモリと同容量のハードディスク領域を確保する。
- システム用のハードディスクの他にデータ用のディスクを接続する。これは仮想環境からのみアクセスする。
- ディスク構成
- C: (1TBx2 ハードウェアRAID1)
- D: (データ用のディスク。Hyper-Vからはオフラインとする)
- DVDドライブ(OSインストール後は物理的に取り外す)
導入の初期設定
- ホストOS用の GRMHVxFRE1_DVD.iso ダウンロード。
- http://technet.microsoft.com/ja-jp/evalcenter/dd776191.aspx
- DVDへの書き込み。InfraRecorderの出番か。
- ホストOSをインストールする。2~3回再起動。パスワードの設定。
- コンピューター名(hypervhost)の変更。再起動。
- ローカル管理者(hyperv)の追加。パスワードの設定。
- リモートデスクトップ。有効。RDP 6.0に対応させるなら「低」。さもなくば「高」。
- ここからは同一サブネット内からリモートで作業可能。
- リモート管理の構成。 Windows PowerShell を有効にする。再起動。
- 更新プログラムのダウンロードとインストール。a。a。(すべて適用)。再起動。
- ネットワーク設定。DHCPを無効。IPアドレスを設定。DNSサーバを指定。
ホスト管理のための設定
コマンドはすべて黒い窓に打つ。
// firewallを全部offにする(必要ないかも。offにしなくてもrdpとファイル共有は使える)
netsh advfirewall set currentprofile state off
// 共有フォルダ share を作成する
mkdir c:\share
net share share=c:\share /grant:hyperv,full
// 共有フォルダ share の共有を解除する
net share share /delete
// ユーザーのパスワードの有効期限を無期限にする
wmic useraccount where (Name = "Administrator") set PasswordExpires=False
wmic useraccount where (Name = "hyperv") set PasswordExpires=False
// ユーザーのパスワードの有効期限を確認する
wmic useraccount where (Name = "Administrator") get PasswordExpires
wmic useraccount where (Name = "hyperv") get PasswordExpires
VMを管理する
PowerShell Management Library for Hyper-V
http://www.codeplex.com/PSHyperv
PDFと本体の両方をダウンロードしておく。コマンドが多すぎる上にメニューが無いので使い勝手は悪い。
ところで、今回はWMIの設定もfirewallの設定もしてないのに、管理PCから接続できた。なんでだろ・・・。
PowerShellで打つコマンド
// ダウンロードして展開したPowerShell Management Library for Hyper-Vのインストール
cd (共有フォルダのパス)
cd HyperV_Install
install
// PowerShellを起動する
powershell
// スクリプトを読み込むためのセキュリティ設定の緩和
Set-ExecutionPolicy Unrestricted
// スクリプトを読み込む(毎回必要?)
Import-Module 'C:\Program Files\modules\HyperV\HyperV.psd1'
// VMの一覧を取得
get-vm
// VMの新規作成
new-vm -name "hoge"
// VHDを容量固定に変換
PS E:\g> convert-vhd -VHDPaths "変換元" -type "Fixed" -DestPath "変換先"
// w2k8r2の事例
new-vm -name "w2k8r2"
set-vmmemory "w2k8r2" -memory 2048MB
set-vmcpucount "w2k8r2" -CPUCount 1
set-vm -vm "w2k8r2" -autoStart AlwaysStartup
add-vmdisk "w2k8r2" 0 0 'VHDのパス'
add-vmnic "w2k8r2"
start-vm "w2k8r2"
get-vmsummary "w2k8r2"
// 終わり
exit
現時点でわからないこと。
- 「仮想ネットワークマネージャ」の「新しい仮想ネットワーク」に相当するコマンド操作。たぶんSwitchに関係するのだと思う が・・・。
- VMの設定で上記仮想ネットワークに接続する方法。たぶんSet-VMNicSwitchだと思うが設定しても変化がない。
- 仮想環境に「接続」する方法。
- vmconnect.exeをサーバにコピーしたら、起動したが接続できずに待たされ続ける。
- Windows 7 amd64用のHyper-Vマネージャをインストールしようとしたが拒否された。
仮想ネットワークを増やすような運用はいまのところ予定していないからいいが、VMの追加は普通に想定される。
その都度、管理PCを用意して運用しなければいけないとしたら苦痛にもほどがある。
物理ディスクを管理する
LSI MegaRAIDみたいなサードパーティ製ソフトウェアRAIDを使うと苦労する。
Hyper-V R2に監視ツールをインストール出来て、RAIDの状態を自動通知出来るハードウェアRAIDを探すか、
さもなくばWindowsの標準機能でお茶を濁す方が無難。
また、仮想環境から物理ディスクにアクセスするためには、事前に物理ディスクをオフラインにする必要がある。
これらは diskpart というコマンドで操作する。
// diskpartを起動する。
diskpart
// ディスクの一覧を出す
list disk
// ディスクを選択する
select disk 1
// 選択したディスクをオフラインにする
offline disk
// 別のディスクをミラーするために追加する
add disk 2
// 終わり
exit
// 以下はコマンドプロンプトで実行
// ボリュームの状態を標準出力に吐き出す(都合上diskpart.txtというファイルが生成されるので注意)
// あとはこのファイルを解析して処理するスクリプトなどを別途作成すれば良いはず。
echo list volume > diskpart.txt
diskpart /s diskpart.txt
2010-03-08 19:39:02
Maniax
Comments: 0
先月の頭にHyper-Vサーバが起動しなくなった。
リモートで症状が確認できない深刻な状態だったので、ローカルで電源投入すると、なぜか無事に起動した。
しかし、筐体からジジジジジジ、キュッキュッ、というひどい音がする。
そしてすべてのレスポンスが異様に遅い。
ローカルだとすぐに気づくのに、リモートだと気づかない罠。ハードディスクの経年劣化だ。
どうやってこういうのをリモートから判定すればいいんだろう。
Hyper-VホストにS.M.A.R.T.監視ツールとか、そういうのを入れられるんだろうか?
仮想ディスクに対してはそういった監視は一切出来ないから、ゲストOSじゃ対処しようがないし。
参考までに、ベンチをとってみた。まずは一番最近増設したデータ用のSATA2物理ドライブ。
--------------------------------------------------
CrystalDiskMark 2.2 (C) 2007-2008 hiyohiyo
Crystal Dew World : http://crystalmark.info/
--------------------------------------------------
Sequential Read : 123.145 MB/s
Sequential Write : 100.825 MB/s
Random Read 512KB : 28.576 MB/s
Random Write 512KB : 82.514 MB/s
Random Read 4KB : 0.616 MB/s
Random Write 4KB : 1.998 MB/s
Test Size : 100 MB
Date : 2010/03/08 13:23:49
で、次が問題のブートディスク上にある仮想ディスク。
--------------------------------------------------
CrystalDiskMark 2.2 (C) 2007-2008 hiyohiyo
Crystal Dew World : http://crystalmark.info/
--------------------------------------------------
Sequential Read : 4.388 MB/s
Sequential Write : 1.896 MB/s
Random Read 512KB : 3.612 MB/s
Random Write 512KB : 1.301 MB/s
Random Read 4KB : 0.089 MB/s
Random Write 4KB : 0.120 MB/s
Test Size : 100 MB
Date : 2010/03/08 12:42:29
格安のUSBメモリよりひどい。
ハードディスクだけNECに送れば無償交換に応じてくれるんだろうか。
本体送るのはめんどくさすぎて嫌なので、パーツ単位の交換がダメなら泣き寝入りするしかないけど。
VMWareみたいにUSBメモリでブート出来たりすると便利なのになあ。
2本さしておいて非常事態に備えるとか、そういう使い方まで出来れば尚更良い。
さもなくば、ブートディスクをRAID1にするとか、そういう必要性が生じてくるのかも知れない。
Hyper-Vマネージャの「RPCエラー」みたいなのは、実はユーザのパスワードの有効期限切れらしい。
設定方法
wmic useraccount where (Name = "Administrator") set PasswordExpires=False
wmic useraccount where (Name = "hyperv") set PasswordExpires=False
確認方法
wmic useraccount where (Name = "Administrator") get PasswordExpires
wmic useraccount where (Name = "hyperv") get PasswordExpires
リモートデスクトップを開放していないと設定すら出来ないので、導入直後に設定したほうがいいかも。

「まとも」の定義。
仮想化で得られる利点は、信頼性、冗長性、保守性、利便性、コストパフォーマンスである。
- ゲスト環境と物理ハードウェアの相性問題に悩む必要がなく、環境を構築できる。
- ゲスト環境を複製したり増設したり出来る。バックアップも出来る。
- ゲスト環境がたとえフリーズしても、リモートで診断や電源断や再起動が安全に行える。
- リモート管理画面が備わっており、物理的な操作よりも管理がしやすい。
- 1台のPCで複数の環境を同時実行出来る。
デメリットはパフォーマンスの低下。
選択肢は、仮想化専用OSで動く、VMWare ESXi、Hyper-V、Xen、KVMと、
普通のOS上で動く、VMWare Server、Microsoft Virtual PCのようなもの。
ホストOSを通常使用した結果フリーズさせたりするのはナンセンスなので、
ホストOSが仮想化専用に特化している事は良い事だと思う。
VMWareも、VMWare Serverは開発やテスト用でありパフォーマンスも低下するとアナウンスしている。
クライアントOSをゲストにするのに最も有力な選択肢はVMWare ESXiだ。
Hyper-Vと比べて管理PCが不要でグラフィック描画が優れている。
しかし、WindowsをゲストにするのであればHyper-VのブランドとRDP 7.0の機能があれば、上記のメリットを十分補える。
とはいえ、管理PCが別途必要になる事はとても煩わしい。
Hyper-VマネージャのWMIポートについては、まず135/tcpで通信して、それから1024-1034を使うらしい。
トンネルを設定し づらいことこの上ない。
たぶん、Hyper-Vマネージャは諦めて、RDPとPowerShellで運用したほうがいいんだろうな。
もしもゲストOSがGUI無しのLinuxだけでいいなら、XenやKVMも良い選択肢になると思う。
もっとも、その場合はエミュレーションより効率的な、環境の仮想化が将来的に出来るはずだとも思うが。
というわけで、(ちょっと苦しいけど)Hyper-Vという選択肢も十分考えられるわけです。
Hyper-V のパフォーマンスおよび容量の要件
http://technet.microsoft.com/ja-jp/library/dd277865.aspx
Hyper-VのCPUリソース管理について - Windows Server Insider - @IT
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=46307&forum=6
Hyper-V Tipsその1 仮想OSにまつわるHDD容量設計 - 戦艦ゆにっき
http://techbank.jp/Community/blogs/nora/archive/2009/11/27/22838.aspx
記事の話をまとめると、こういうことになりそうだ。
- NUMAアーキテクチャの場合、1ゲストあたりのメモリ容量は、物理容量をコア数で割った数以下が良い。
- OpteronとかXeonとか一部のCore i7/i5がNUMAアーキテクチャらしい。
- Core 2 Duo E6300はNUMAアーキテクチャではないので関係無い。
- HTのスレッド数の事をLPと呼び、仮想プロセッサをVPと呼ぶ。同時起動するのはLP>=VPが良い。
- LPとVPは別物なので、LPを超えるVPを設定しても起動出来るが遅くなるらしい。
- LPは必ず最低一つのVPを持ち、必要次第VPを増やしていく仕組みらしい。
- きちんとホストとゲストの両方に更新プログラムを適用しないとパフォーマンスが出ない。
- IPv6を使わないならオフにしたほうがパフォーマンスは伸びる。
- ディスクは、容量固定のVHDを使うか物理ディスクを割り当てる。
- 2つのゲストを同時起動した時のパフォーマンスが良いので、それを前提にした運用をしたほうが得。
- ゲストOSに割り当てたメモリ容量と同様の容量かホストのディスク内に必要となる。
あと、ここには書いてないけど、曖昧な根拠で書いてあったこと。
- Hyper-V自身もCPUとメモリを食っているため、それなりに余裕もった方ががいい。
- ゲストに割り当てたメモリの量が不足すると、ホストOS上でスワップアウトが行われる。
- ゲストに割り当てたメモリの量が不足すると、そもそもゲストの起動時にエラーが表示されて起動できない。
それぞれの情報は一部矛盾してるんだけど、たぶんホストOSの負荷がある程度高いのだろう。
VMWare ESXiでは、USBメモリからのブートも出来るので、少なくともswapが肥大化してホストが落ちる事は無さそう。
少なくとも再起動には成功しそう。
ゲストOSのメモリが肥大化した事によりメモリ不足に陥りそうな場合は、ゲストOSを強制終了して生き延びるのが適切だと思うけど。(それはそれで問題あるんだけど)それに加えてメールで通知してくれたりしたらなんも文句ない。
まとめ。
- 物理コアと物理メモリのすべてを仮想環境に割り当ててはいけない。ホスト用の余裕を残す。
- 仮想CPUは物理コア数より増やしてもエラーの原因にはならないが、仮想メモリはエラーの原因になる。パフォーマンス的には物理コア数-1までに留めるほうが無難。
- Hyper-Vホストの入ったパーティションは、VHDも含めて容量のかさむものを入れてはならない。
- どこまで肥大化するかわからないホストOS用のswapファイルを受容出来る程度の空き容量を作っておく。(物理メモリの2倍? 固定化できないのかしら?)
- 運用環境に対しては、VHDは容量固定にして、スナップショット機能を使ってはいけない。容量が可変になってもいいのは、目の届くところで操作している開発時やテスト目的での使用だけ。
- 容量固定にしたVHDの中でスワップが発生してもホストOSのエラーには影響しない・・・はず・・・。
割り当て例
E6300(4LP)、2GBの物理メモリ、160GBの物理ハードディスクのサーバにHyper-Vを入れる場合
- Cドライブ(20GB)
- Hyper-VホストOS(1VP, 空きメモリ512MB, 16GBのシステムファイル)
- swapファイル用の空き容量(4GB)
- Dドライブ(42GB以上)
- Windows Web Server 2008 R2(2VP, メモリ1GB, 32GB固定VHD+1GB仮想メモリファイル)
- Linux (1VP, メモリ512MB, 8GB固定VHD+512MB仮想メモリファイル)
あなたが不安であればあるほど、Cドライブの容量は大きめにとったほうがいいです。
あと、VHDファイルを物理パーティションにしない理由は、冒頭に述べた「バックアップ出来る」保守性に障るから。
PowerShellで物理パーティションとVHDファイルの相互変換が出来たりするようなら、物理的に分けてもいいかも。

1
2
3
4
次へ
20 件中 1 ~ 5 件目