2010/09/27

Windows 展開サービスの VHD 対応機能を試してみた (その 1)

Windows Server 2008 R2 の Windows 展開サービス (WDS) は、従来の WIM (Windows IMaging 形式) に加えて、VHD (Virtual Hard Disk) 形式のイメージ展開にも対応しています。「Windows Server 2008 R2 テクノロジ入門」でも、「14.3 Windows 展開サービスの使用 - 14.3.1 VHD ファイル展開のサポート」としてこのトピックに触れていますが、時間がなかったので書籍の中では以下の URLの紹介までになってしまいました。

ちょいと時間ができたので、この URL の内容を参考に、実際に試してみました。

Deploying Virtual Hard Disk Images (仮想ハードディスク イメージを展開する)
http://technet.microsoft.com/ja-jp/library/dd363560(WS.10).aspx


上記のドキュメントをよく読んで見てください。手順も分かり難いですし、どのようなものが出来上がるのかも想像できません (“どのようなもの”については次回 (その 2) で...)。

私の場合は、Windows 7 Enterprise x86 を VHD ファイルを用いて、PXE ブートしたベアメタル マシンに OS をイメージ展開し、OS の最終構成 (Sysprep イメージの Mini-Setup) を自動セットアップするというシナリオについて、次の手順で動作確認をしました。ちなみに VHD イメージの展開は、Windows 7 Enterprise 以上のエディション、および Windows Server 2008 R2 のみに使用できます。

(1) Windows Virtual PC (または Hyper-V) の仮想マシンに Windows 7 Enterprise を新規インストールし、コマンドプロンプトから Sysprep を実行ます。

cd C:\Windows\System32\Sysprep
sysprep /oobe /generalize /shutdown

インストール先の VHD ファイルは、容量可変タイプで 15 GB のサイズで作成しました。VHD のサイズは非常に重要です。展開先のベアメタル マシンには、15 GB 以上の空き領域 (15 GB 以上のサイズの物理ハードディスク) が必要になります。。

(2) Sysprep が完了すると、仮想マシンがシャットダウンして停止します。この仮想マシンから VHD を取り出し (単にコピーするだけです) ておきます。ここでは、win7ent15gb_sysprep.vhd というファイル名を使用します。これで、WDS によるイメージ展開で使用する VHD ファイル (win7ent15gb_sysprep.vhd) は完成です。

(3) Active Directory 環境と WDS の環境を準備します。OS 展開先のベアメタル クライアントを PXE ブートで起動するために、DHCP サーバーも必要です。DHCP は WDS と同じサーバーだと都合が良いようです。このあたりは、WDS の話ですので、次に進みます。

(3) WDS が扱える標準のイメージ形式は WIM ファイルであり、WDS の コンソール UI を使用する場合は、WIM ファイルしか選択できません。VHD はコマンドライン (WDSUTIL) でのみサポートされます。先ほどの VHD ファイルを WDS のサーバーのローカル ファイルシステムにコピーして、次のようなコマンドラインを実行します。

WDSUTIL /Add-ImageGroup /ImageGroup:”VHD Image Group”
 

WDSUTIL /Verbose /Progress /Add-Image /ImageFile:”(VHD ファイルへのローカルパス)\win7ent15gb_sysprep.vhd” /ImageType:Install /ImageGroup:"VHD Image Group" /UnattendFile:"(応答ファイルへのローカルパス)\unattend.xml"

1 行目のコマンドラインでイメージ グループを作成し、2 行目のコマンドラインでそのイメージ グループに対して VHD ファイルを応答ファイル (Unattend.xml) とともに登録しています。ここで指定する応答ファイルは、VHD ファイル内の Sysprep 済みイメージを自動構成するための応答ファイルになります。

指定した応答ファイルは、RemoteInstall(reminst共有)\Images\ImageGroupName\win7ent15g_sysprep (VHD 名)\Unattend\ImageUnattend.xml にアップロードされるので、ファイルのパスやファイル名 (Unattend.xml である必要なし) は気にしなくてかまいません。また、/UnattendFile オプションをコマンドラインで指定しなかった場合でも、WDS のコンソールでイメージ (WDSUTIL で登録した VHD のイメージはコンソールから操作できます) のプロパティを開き、「全般」タブの「ファイルの選択」で指定することもできます(イメージを無人モードでインストール可能にするもチェック)。

使用した Unattend.xml を、サンプルとして掲載しておきます。ドメイン参加設定 (CONTOSO) とローカル管理者 (localadmin) の作成を含む、Windows 7 の標準的な Unattend.xml です。Sysprep と Unattend.xml については、COMPUTERWORLD BLOG の投稿 「仮想マシンの準備は簡単 (その 1)」「仮想マシンの準備は簡単 (その 2)」を見ていただけるとうれしいです。恥ずかしながら私、Windows AIK の Windows システム イメージ マネージャーの使い方はいまいちわかりません。

[Unattend.xml (Sysprep 済み OS の自動構成用)]
<?xml version="1.0" ?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="specialize">
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <ComputerName>*</ComputerName>
            <ProductKey>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</ProductKey>
        </component>
        <component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <Identification>
                <JoinDomain>CONTOSO</JoinDomain>
                <Credentials>
                    <Domain>CONTOSO</Domain>
                    <Username>administrator</Username>
                    <Password>P@ssword</Password>
                </Credentials>
            </Identification>
        </component>
    </settings>
    <settings pass="oobeSystem">
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <UserAccounts>
                <LocalAccounts>
                    <LocalAccount>
                        <Name>localadmin</Name>
                        <Password>
                            <Value>P@ssword</Value>
                            <PlainText>true</PlainText>
                        </Password>
                        <Group>Administrators</Group>
                    </LocalAccount>
                </LocalAccounts>
            </UserAccounts>
            <TimeZone>Tokyo Standard Time</TimeZone>
            <OOBE>
                <HideEULAPage>true</HideEULAPage>
                <SkipUserOOBE>true</SkipUserOOBE>
                <NetworkLocation>Work</NetworkLocation>
                <ProtectYourPC>1</ProtectYourPC>
            </OOBE>
        </component>
        <component name="Microsoft-Windows-International-Core" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <UserLocale>ja-JP</UserLocale>
            <SystemLocale>ja-JP</SystemLocale>
            <InputLocale>0411:00000411</InputLocale>
            <UILanguage>ja-JP</UILanguage>
        </component>
    </settings>
    <cpi:offlineImage cpi:source="" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

※ (3) の手順は、ドキュメントの「仮想ハード ディスク イメージをサーバーに追加する > 仮想ハード ディスク イメージをサーバーに追加するには)」「仮想ハード ディスク イメージの無人インストールを構成する > イメージの無人セットアップ ファイル > イメージの無人セットアップ ファイルをイメージに関連付けるには」の部分に相当します。

(4) WDS への VHD イメージの登録は以上で完了。続いて、ベアメタル マシンを PXE ブートするための Windows PE (プリインストール環境) のブート イメージとして、Windows 7 Enterprise x86 DVD の Sources\Boot.wim を選択して WDS に登録します。この作業は、WDS のコンソール UI から行えます。

(5) 続いて、PXE ブートの方法や PXE ブート後の Windows PE のタスク自動化について設定します。さまざまな方法がありますが、話を簡単にするため、WDS サーバーの既定の動作として、すべての PXE ブート要求を受け付け、Windows 7 Enterprise x86 の Boot.wim でクライアントを起動し、自動化のための応答ファイル (先ほどのとは異なる Unattend.xml) を指定することにします。まず、WDS のコンソール UI でサーバーのプロパティを開き、「ブート」タブで「既定のクライアント」および「不明なクライアント」の両方で「常に PXE ブートを続行する」を選択し、「既定のブート イメージ (省略可能)」の「x86 アーキテクチャ」のところで、「参照」をクリックして (4) で登録した Boot.wim を選択します。

(6) 続いて、Windows PE 用の Unattend.xml を登録します。まず、「仮想ハード ディスク イメージを展開する > .vhd 展開用のクライアント無人セットアップ ファイルの例」を参考にテキスト ファイルを記述し、Unattend.xml というファイル名で保存します。この Unattend.xml ファイルは、WDS の RemoteInstall(reminst共有)\WDSClientUnattend フォルダーに格納しておきます。その上で、WDS のコンソール UI でサーバーのプロパティを開き、「クライアント」タブに切り替え、 「無人インストールを有効にする」をチェックし、「x86 アーキテクチャ」の横の「参照」ボタンをクリックして (WDSClientUnattend フォルダー内の) Unattend.xml を指定します。使用した Unattend.xml をサンプルとして掲載しておきます。太字斜体部分は、「クライアント無人セットアップ ファイルの例」との差分です。

[Unattend.xml (Windows PE 用)]
<?xml version="1.0" ?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
   <settings pass="windowsPE">
      <component name="Microsoft-Windows-Setup" publicKeyToken="31bf3856ad364e35"
language="neutral" versionScope="nonSxS" processorArchitecture="x86">
         <WindowsDeploymentServices>
            <Login>
               <WillShowUI>OnError</WillShowUI>
               <Credentials>
                     <Username>administrator</Username>
                     <Domain>CONTOSO</Domain>
                     <Password>P@ssword</Password>
                  </Credentials>
               </Login>
            <ImageSelection>
               <WillShowUI>OnError</WillShowUI>
               <InstallImage>
                  <ImageName>Enterprise_6.1.7600</ImageName>
                  <ImageGroup>VHD Image Group</ImageGroup>
                  <Filename>win7ent15g_sysprep.vhd</Filename>
               </InstallImage>
                  <InstallTo>
                  <DiskID>0</DiskID>
                  <PartitionID>1</PartitionID>
               </InstallTo>
            </ImageSelection>
         </WindowsDeploymentServices>
         <DiskConfiguration>
            <WillShowUI>OnError</WillShowUI>
               <Disk>
                  <DiskID>0</DiskID>
                  <WillWipeDisk>true</WillWipeDisk>
                  <CreatePartitions>
                     <CreatePartition>
                        <Order>1</Order>
                        <Type>Primary</Type>
                        <Size>30000</Size>
                     </CreatePartition>
                  </CreatePartitions>
                  <ModifyPartitions>
                     <ModifyPartition>
                        <Order>1</Order>
                        <PartitionID>1</PartitionID>
                        <Letter>C</Letter>
                        <Label>winboot</Label>
                        <Format>NTFS</Format>
                        <Active>true</Active>
                        <Extend>false</Extend>
                     </ModifyPartition>
                  </ModifyPartitions>
            </Disk>
         </DiskConfiguration>
      </component>
      <component name="Microsoft-Windows-International-Core-WinPE" publicKeyToken="31bf3856ad364e35"
language="neutral" versionScope="nonSxS" processorArchitecture="x86">
            <SetupUILanguage>
                <UILanguage>ja-JP</UILanguage>
            </SetupUILanguage>
            <InputLocale>ja-JP</InputLocale>
            <SystemLocale>ja-JP</SystemLocale>
            <UILanguage>ja-JP</UILanguage>
            <UserLocale>ja-JP</UserLocale>
      </component>
   </settings>
</unattend>

この Unattend.xml では、WDS の reminst 共有に接続するための資格情報 (<Credentials>~</Credentials>)、 展開イメージの選択 (<InstallImage>~</InstallImage>)、インストール先パーティションの指定 (<InstallTo>~</InstallTo>)、ディスクのパーティショニングとフォーマット (<DiskConfiguration>~</DiskConfiguration>) を設定しています。

この Unattend.xml を記述する際には、いくつか注意点があります。まず、展開イメージである VHD の指定部分は、イメージ名 (イメージ名は WDS のコンソールで確認のこと) とイメージ グループ名、VHD ファイル名を正しく記述することです。また、ディスクのパーティショニングの部分を「仮想ハード ディスク イメージを展開する > .vhd 展開用のクライアント無人セットアップ ファイルの例」のとおりに記述すると、右のようなエラーが発生してインストールが失敗してしまいます。私の場合は、<WillWipeDisk>true</WillWipeDisk> の指定と <CreatePartitions>~</CreatePartitions>の追加でエラーを回避することができました。

※ 私の Unattend.xml の例では、<Size>30000</Size> で30GBのパーティション作成を指示していますが、ディスク全体を 1 パーティションにするには <Size>30000</Size> の部分を <Extend>true</Extend> に置き換えます。なお、パーティションサイズは、VHD の割り当てサイズ (容量可変の場合は最大サイズ)より大きくすることが重要です。

※ (4) (5) (6) の手順は、ドキュメントの「仮想ハード ディスク イメージの無人インストールを構成する > Windows 展開サービス クライアント無人セットアップ ファイル」「仮想ハード ディスク イメージの無人インストールを構成する > Windows 展開サービス クライアント無人セットアップ ファイル > すべてのアーキテクチャに対してクライアント無人セットアップ ファイルを関連付ける」に相当します。

以上で VHD イメージを WDS でベアメタル マシンに展開する準備ができました。あとは、ベアメタル マシンの電源をオンにし、ネットワークから PXE ブートするだけで、Windows 7 Enterprise x86 のイメージ展開と無人インストール (ドメイン参加設定まで) が自動実行されるはずです。

次回 (その 2) に続く...

0 件のコメント: