WIN1@Codename

Codename

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Hyper-VのサーバーでWindows Server バックアップをしてみると・・・

Windows Server 2008 R2 から搭載されて Windows Server バックアップ ですがこれまでより機能アップしており以前にも
http://codename2010.blog11.fc2.com/blog-entry-52.html
で紹介しましたが、ファイル単位でバックアップできたらり、シャドーコピーを利用してオープンファイルもバックアップ可能となっています。

そんな便利なWindows Server バックアップですが、Hyper-Vの親サーバー上でゲストOSのvhdファイルのバックアップを行ってみるとこんなことがおきます。
ファイルのコピー前に、シャドウコピーを作成中とのメッセージが・・・
20095027101101

このときに、Hyper-Vマネージャーを見てみると・・・
20094927101130

なんといっせいにスナップショットを作成しておりました。

なーるほど!といった感じですね。

スポンサーサイト

vssadminを使用しての個別バックアップ方法

Windows2008ServerR2より前のバージョンでは、バックアップではファイル単位の指定ができませんでした。
そこでvssadminコマンドを利用してファイル単位のバックアップの実現方法を紹介します。

設定はCドライブにあるWin7.vhdファイルをオンライン状態でバックアップするというものです。

おおまかな説明となりますが、要はシャドウコピーを取得したリストをvssadminコマンドを利用して取得し、最新のシャドウコピーファイルをバックアップファイルとしてコピー保存するものです。

コードは以下のとおり。

Dim strDrive As String = "C"
Dim strFrom As String = "\Hyper-V\Win7\Win7.vhd"
Dim strTo As String = "F\:Backup\Hyper-V\Win7\Win7.vhd"

'シャドウコピーコマンドで取得済みのシャドウコピーリストを取得
Dim objProcessStartInfo As New System.Diagnostics.ProcessStartInfo()
objProcessStartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
objProcessStartInfo.RedirectStandardInput = False
objProcessStartInfo.RedirectStandardOutput = True
objProcessStartInfo.UseShellExecute = False
objProcessStartInfo.CreateNoWindow = True
objProcessStartInfo.Arguments = "/c vssadmin list shadows"
Dim objProcess As System.Diagnostics.Process = System.Diagnostics.Process.Start(objProcessStartInfo)
Dim strCommandRes As String = objProcess.StandardOutput.ReadToEnd
objProcess.WaitForExit()

'最新のシャドウコピーパスを正規表現にて取得
Dim objArrayList As New ArrayList
Dim objRegex As New Regex("作成時刻: (?<Date>\d+/\d+/\d+ \d+:\d+:\d+)\r\n.+\r\n.+\((?<Drive>\w):\).+")
Dim objMatch As Match = objRegex.Match(strCommandRes, RegexOptions.IgnoreCase)
While objMatch.Success
    If strDrive = objMatch.Groups("Drive").Value Then
objArrayList.Add(objMatch.Groups("Date").Value)
    End If
    objMatch = objMatch.NextMatch()
End While

Dim dteNewest As Date
For i As Integer = 0 To objArrayList.Count - 1
    Dim dteUpdate As Date = objArrayList(i)
    If dteNewest < dteUpdate Then
dteNewest = dteUpdate
    End If
Next

'シャドウコピーをバックアップファイルとして保存
Dim dteGMTUpdate As Date = DateAdd(DateInterval.Hour, -9, dteNewest)
Dim strGMTUpdate As String = dteGMTUpdate.ToString("yyyy.MM.dd-HH.mm.ss")
Dim strFolderPath As String = "\\localhost\" & strDrive & "$\@GMT-" & strGMTUpdate
Dim strFilePath As String = strFolderPath & strFrom
My.Computer.FileSystem.CopyFile(strFilePath, strTo, True)

以上となります。

PowerShell をプログラムで実行

便利なPowerShellですが、VB.net や C# から利用したい場合もありますね。
そんなときのためのサンプルです。

今回はドメインの既存ユーザーにExchangeのメールボックスを割り当てるコマンドをVB.netで呼び出してみました。


Imports System.Management.Automation
Imports System.Management.Automation.Runspaces

Dim strAccount As String = "TestUser"
Dim objRunspaceConfiguration As RunspaceConfiguration = RunspaceConfiguration.Create
Dim objPSSnapInException As PSSnapInException = Nothing
Dim objPSSnapInInfo As PSSnapInInfo = objRunspaceConfiguration.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin"Nothing)
Dim objRunspace As Runspace = RunspaceFactory.CreateRunspace(objRunspaceConfiguration)
objRunspace.Open()
Dim objRunspaceInvoke As RunspaceInvoke = New RunspaceInvoke(objRunspace)
Dim strCmdlet As String = "Enable-Mailbox -Identity:'testdomain.local/TestUsers/" & strAccount & "' -Alias:'" & strAccount & "' -Database:'TestExSvr\First Storage Group\Mailbox Database'"
Dim objICollection As System.Collections.ObjectModel.Collection(Of PSObject) = objRunspaceInvoke.Invoke(strCmdlet)
objRunspaceInvoke.Dispose()
objRunspace.Close() 

Outlook Anywhere

OutlookをExchangeに接続する場合社内からなどは通常MAPIを使用しますが、Exchange2007以降ではExchangeAnywhereを利用してHTTPS経由でOutlookからExchangeに接続可能となりました。

今回は覚書として設定方法を記載します。

まずはExchange側の設定です。
事前の設定としてhttpsで構成されたOutlookWebAccessのサイトが存在するものとします。
WindowsServer2008の場合、機能の追加で「HTTPプロクシを経由したRPC」をインストールします。 WindowsServer2003の場合はWindowsコンポーネントの追加と削除から同様に行います。
20093122021110

Exchange管理コンソールより、「サーバーの構成」-「クライアントアクセス」より該当するExchangeServerのクライアントアクセスを右クリックし、「OutlookAnywhereを有効にする」を選択します。
するとウィザードが開始されますので必要な情報を入力します。
設定完了後、15分後に有効になるとのメッセージが。
2009312202112

あと、Exchangeサーバー側で必要なのが、Outlookからの初回の接続時のみExchange管理コンソールより「受信者の構成」-「メールボックス」か該当受信者のメールボックスプロパティーを開きます。 「全般タブ」の「Exchangeアドレス一覧に表示しない」のチェックを外しておきます。 これを最初のときだけ行っておかないと接続できません。
20093822121141

さらに詳細は不明なのですが、Exchangeサーバーのファイヤーウォールの設定をOutlookで初回のときだけ接続するときにすべてOFFにする必要がありました。
どのプロトコルが必要なのか明らかではありませんが、一時的にすべてはずした場合だけうまくいきました。

おそらく、Outlookからの初回の接続時だけグローバルアドレス帳から情報を走査し、接続設定を何かしらの方法で行っているものだと思います。
一度接続が完了してしまえば、先ほどの2つの設定は元にもどしてしまっても大丈夫です。 

一応、これでExchangeServer側の設定は完了です。

次にOutlook側の設定です。
Outlookは起動せず、コントロールパネルの「メール」より「電子メールアカウント」-「新規」を選択します。 ウィザードに従いアカウントの設定を行いますが「サーバーの設定または追加サーバーの種類を手動で構成する」を選択します。
20094622021103

引き続きウィザードに従います。

下記のウィザードの設定の時に「MicorosoftExchangeサーバー」の部分にはExchangeServerのコンピューター名を入力します。
使用者のアカウント名も入力した後に、右下の詳細設定ボタンをクリックします。
20095022021135

接続タブを選択し、「HTTPを使用してMicrosoftExchangeに接続する」にチェックを入れて、「Exchangeのプロキシ設定」をクリックします。
20095422021150

SSLを配置したhttpsから始まるURLと認証方法を選択します。
プロキシサーバーのアドレスはOWAが配置されているサイトと今回は同じです。
20095622021146

ここまで詳細設定を行った後、元に戻り名前の確認をクリックすると以下のダイアログが表示されるので、MicrosoftExchangeServerには先ほど詳細設定で使用した「Exchange用のプロキシサーバー名」を入力し、「名前の確認」ボタンをクリックします。
20090122011132

これで自動的に「Microsoft Exchange Server」の名前の欄に下線が引かれた状態になればOKです。

これで無事https経由でOutlookからExchangeServerに接続することができるようになりました。

Disk2vhd を試してみた

マイクロソフトよりこんな便利ツールがでていました。
http://www.atmarkit.co.jp/fwin2k/win2ktips/1228disk2vhd/disk2vhd.html
http://technet.microsoft.com/en-us/sysinternals/ee656415.aspx

これは、簡単に言うと稼動中のWindowsをそのままvhdにしてしまうツールです。
同じような機能はSystem Center Virtual Machine Manager でも可能ですが、稼働中にできることと、お手軽さを考えるとかなりポイントが高いツールです。

使い方は簡単です、こちらよりダウンロードして、解凍後disk2vhd.exeを実行します。
vhdとして取得したいドライブと保存先を指定して作成するだけです。
20092418121130

たったこれだけで物理マシンがvhdになってしまいました。
もちろん、Hyper-Vで仮想マシンとして実行しても問題ありませんでした。
20093718031123

このツール面白いのは、仮想マシン上で実行した場合でもvhdを作成できるので、まるごとバックアップという使い方もできます。

気をつけなければいけないのは、稼働中にイメージを作成するので(稼働中でなければ実行できない)メモリ内の情報や保存していないドキュメントなどは取得できませんので注意が必要です。

差分仮想ハードディスクは最適化できません

容量可変の仮想ハードディスクはファイルを削除したとしても、vhdファイル自体の容量が減ることはなく増え続けてしまいます。
そのため、ときどきメンテナンスとして最適化(容量の圧縮)が必要です。
Hyoer-Vには当然この機能があるので、容量可変の仮想ハードディスクを使用している場合はたびたび使用することになります。

以前、RAMDiskを使用して気づいたのですが、
20091709021159[2]
差分仮想ハードディスクは自動的に容量可変で作成されてしまいます。
なので、RAMDisk領域が実際の使用量とはことなりどんどん圧迫されていってしまいます。
そこで圧縮(最適化)しようとしたところ・・・
20091809021112[2]
20091809021123[2]
20091809021140[2]

と、なってしましました。
よくよくみると最初のところで
「仮想ハードディスクは、スナップショットがある仮想マシンで使用される場合、または差分仮想ハードディスクと関連付けられている場合は、編集しないようにしてください。編集すると、データが失われる可能性があります。」
とありました。

うーん・・・RAMDISKとの組み合わせはなかなか手ごわいです。   


robocopy の便利な機能

すでにご存知の方もいると思いますが、robocopyに便利な機能があったので覚書として。

スイッチ
/MON:n :: コピー元を監視し、n 回を超える変更があった場合に再度実行します。
/MOT:m :: コピー元を監視し、変更があった場合 m 分間再度実行します。

組み合わせると
robocopy C:\test D:\test /MON:1 /MOT:1

こちらは「1分ごとに1回以上C:\testに変更があった場合、D:\testにコピーを行う」というものです。

ミラー機能のように使えそうなのでメモメモ。


avhd ファイルの保存場所

Hyper-V マネージャーを見てみると、「スナップショットファイルの場所」という項目があります。
 20092504021103[2]

これだけ見てみると、スナップショットを作成するとここで指定したフォルダにスナップショットが作成されると理解してまうのですが、少々認識が異なるようです。

スナップショットを作成するといくつかのファイルが作成されます。
・avhdファイル いわゆる差分ファイルです。
・binファイル スナップショットを作成した時点のメモリ内容が格納されています。
・vsvファイル スナップショットを作成した時点のプロセス情報・デバイス情報(よくわかりません)
・xmlファイル 仮想マシンの構成情報が格納されています。

「スナップショットファイルの場所」というのはこれらのファイルの保存場所を指定するものだと思っていたのですが、実際設定を変えてみると、avhdファイル以外は確かに「スナップショットファイルの場所」に指定した場所に作成されるのですが、avhdファイルだけはオリジナルのvhdファイルと同じフォルダに作成されています。

RAMDISKを使ってみた関係でavhdファイルの場所を変更してみたかったのですが、「スナップショットファイルの場所」の指定だけでは足りないうようでした。

では、avhdの場所を変えたい場合はどうすかといいますと、スナップショット作成後は仮想マシンのハードドライブはavhdファイルを参照しています。
20093804021133[2]

一度仮想マシンをシャットダウンして、任意の場所にavhdファイルを移動します。
移動先のパスをハードドライブのパスに指定して起動すれば変更されることになります。
ですが、これをやってしまうと以後スナップショットが作成されなくなってしまうのであくまでも検証用ということでお願いします。


Hyper-V + RAMDISK

(下記の内容はあくまでも実験ということなので、お試しいただく場合は自己責任にてお願いいたします。)

以前より画策していたのですが、なかなか検証できなかった Hyper-V と RAMDISK のコラボをようやく行うことができましたのでそのレポートです。

Hyper-Vには差分仮想ハードディスクとスナップショットという似たような機能があります。
差分仮想ハードディスクについてはこちらこちらを参照。
スナップショットも差分仮想ハードディスクと同様にオリジナルのvhdと変更分のavhdで構成されています。

この変更分の差分ハードディスク or スナップショットファイルavhdをRAMDISK上に配置してパフォーマンスを上げてみようという試みです。

今回は差分仮想ハードディスクで試してみました。
スナップショットでも基本的な考え方は同じだと思います。

まずはRAMDISKを作成するのですが、今回使用したのはQSoftの64bit対応のEnterprise 版Ramdiskです。
http://members.fortunecity.com/ramdisk/RAMDisk/ramdriv001.htm
ダウンロードした後に、Hyper-Vサーバーのデバイスマネージャーよりサーバー名を右クリックして「レガシハードウェアの追加」を選択します。
200933041111532.jpg

 
ウィザードが起動しますので、下記のようにRAMDISKドライバをインストールします。
指定するドライバファイルはダウンロードした中にある「ENG」フォルダ内の「RAMDriv.inf」になります。
200935041111562.jpg
200938041111192.jpg
200937041111532.jpg
200938041111082.jpg
200938041111592.jpg
200941041111062.jpg

これでRAMDISKが利用可能となりました。

次に領域の割り当てです。
デバイスマネージャより先ほど追加したRAMDriveを右クリックし「プロパティー」を選択します。
200944041111242.jpg

「Ram Disk Propaties」タブを選択し今回は4GのRAMDISKを作成しました。
200945041111592.jpg

これでBドライブとして4GのRAMDISKが作成されました。       

次に差分仮想ハードディスクを作成して仮想マシンを作成ます。(詳細はこちら
もちろん、差分仮想ハードディスクはRAMDISK上に作成します。

いざ、起動! 速い! あっとうまです!!
ブラウザでいくつかサイトを見てみましたが明らかに体感速度は倍以上です。

ここでお約束のベンチマーク。
通常の仮想マシンとRAMDISK上に作成した仮想マシンの比較です。
左が通常、右がRAMDISKを使用したもの。
20095804101117[2]
20090004111114[2]

一目瞭然ですね。
DISKのREADなど桁が一桁違ううようです。

と、爆速を体験できたのですが、実用性はいかに?という感じです。
4G割り当てたRAMDISKの領域ですが、差分仮想ハードディスクにもかかわらず起動してWebをいくつか見ただけなのですがあっという間に容量不足に。。。。
しかも、一旦仮想マシンを終了して、差分仮想ハードディスクを最適化しようとHyper-Vマネージャーから最適化を選んだ瞬間、久々に見ましたぶるーすくりーんってことになりました。
今回は差分仮想ハードディスクを使用しましたが、これがスナップショットの場合はどうなのか、RAMDSIK上のファイルを生かしたい場合、どのタイミングでオリジナルと結合するのかなどなど、まだまだ研究課題は残ります。 


RDP 7.0

これまでWindows Server 2008 R2 と Windows7 のみ搭載されていた RDP 7.0 の XP・Vista バージョンがダウンロードきるようになりました。

http://support.microsoft.com/kb/969084/ja

RDP 7.0 で提供されているすべての機能を使うにはゲスト・ホスト双方がWindows7 もしくは Windows Server 2008 R2 である必要がありますが、
今使っているノートPCがXPなのでお試しがてら早速インストール。
XPにインストールするにはSP3が必要です。

さて、何が変わったのかというと・・・・、正直何も変わってない気がします。
全画面表示のときの画面上の帯が青くなったり、設定内容の項目が増えてはいますがパフォーマンスがよくなったりとかは実感してません。

こんな感じで利用環境による違いがかなりあるようです。

http://blogs.msdn.com/rds/archive/2009/08/21/remote-desktop-connection-7-for-windows-7-windows-xp-windows-vista.aspx

Windows7 もしくは Windows Server 2008 R2 同士であればエアロが使えたり、メディアプレーヤーの再生がスムーズになる Windows Media Player Redirection なるものも使えるようですが、残念です。

余談ですが、リモート デスクトップ接続 7.0(RDP 7.0) と呼ばれていますがmstsc.exeのファイルバージョンは6.1でした(苦笑)。
20091603111108[2]


FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。