2018年6月18日月曜日

ESXi 6.7の仮想マシンのネットワークアダプタで、ポートグループが設定できなくなる問題

ESXi 6.7において、仮想マシンのネットワークアダプタに対してポートグループを設定しようとした際に、以下画面のように本来存在するはずのポートグループが表示されず、設定ができなくなる事象が発生した。


いろいろ調べると発生する原因がわかったので、発生原因と対策について記載することにする。

発生原因

本事象を発生させる手順を説明することにする。まず、ポートグループが以下2つある状態から作業を実施する。
  • VM Network : 仮想マシン用ポートグループ
  • Management Network : VMkernel用ポートグループ


作業前のvSwitchの状態は以下の通り。 ポートグループ「VM Network」に「test」という仮想マシンが1台存在する状況となっている。


ここで、VMkernel NICを追加してみる。その際に、ポートグループを「VM Network」に設定する。


作成後のVMkernel NICの状態は以下の通り。


設定後のvSwitchの状態は以下のようになる。


ポートグループ「VM Network」にVMkernelポートが設定されることにより、仮想マシンのポートが消えしまっている。これが原因で、仮想マシンの設定画面においてもポートグループの設定ができなくなってしまうようだ。
※ただし、設定ができなくなるだけで、仮想マシンの通信には影響はなかった。

どうやら、1つのポートグループにVMkernelポートと仮想マシンのポートの共存はできないようだ(であれば、共存設定ができてしまうこと自体が問題な気がするが)。

回避策

VMkernel NIC作成の際に、VMkernel NIC専用の「新規ポートグループ」を作成すればよい。


この場合のvSwitchの状態は以下の通りとなる。


上記設定に変更した場合、以下の通り、仮想マシンからも正常にポートグループが選択できるようになった。


2018年6月12日火曜日

ESXiのVMware Host Clientの自動ログアウトの無効化と、コンソールのキーボードレイアウトを設定する

ESXi 6.5以降は、正式にvSphere Clientがサポートされなくなり、操作はブラウザから実施することが必須となった。vCenter Serverがある場合は、vSphere Web Clientを利用し、ESXiを直接操作する場合は、VMware Host Clientを利用する。

VMware Host Clientは、ログインした後、一定期間操作をしないと自動ログアウトしてしまう。セキュリティ面ではよい設定ではあるが、自宅検証環境で利用するには不便な設定であるため、この設定を解除することにした。

また、ブラウザで利用する仮想マシンのコンソール(ブラウザコンソール)でキーボードレイアウトが正しく認識できない事象も発生したため、キーボードレイアウトの変更方法についても記載する。

タイムアウト設定

左上の「アカウント名@ログイン先」から、「設定」→「アプリケーションのタイムアウト」で選択することができる。デフォルトが15分となっているので、任意の時間に変更すればよい。


今回は「オフ」に設定した。その場合は以下のようなセキュリティに関する警告が表示されるが、「はい」を選べば問題なく設定が完了する。


ブラウザコンソールのキーボードレイアウトの変更

左上の「アカウント名@ログイン先」から、「設定」→「コンソール」→「キーボードレイアウト」から設定できる。デフォルトでは「英語」になっている。


あるいは、ブラウザコンソールを開き、右上の国旗マークからも選択できる。


日本語キーボードの場合は、「日本語」にしておけば問題はないと思われがちだが、OSによっては「英語」にしておかなければうまく記号が入力できない場合がある(「"」を入力しようとしたら「@」になったりする)。そのため、キーボードレイアウトの設定は、状況に応じて随時切り替えて使う方がよさそうだ。

あるいは、ブラウザコンソールではなくVMware Remote Consoleをインストールして利用する方が、操作性の観点からもメリットがあるのでお勧めとなる。

2018年6月5日火曜日

vCenter Convertor Standaloneを使ってHyper-Vの仮想マシンをvSphere環境に移行する

Hyper-VからvSphere環境に仮想マシンを移行するために、無償で利用できるvCenter Converter Standaloneを試してみた。

vCenter Converter Standaloneとは

vCenter ConverterはVMwareが昔から無償で提供しているvSphere環境へのサーバー移行ツールとなり、P2VやV2Vで利用することができる。

2018年5月時点の最新バージョンは6.2となり、ダウンロードは以下URLから可能となる。

ダウンロード VMware vCenter Converter Standalone 6.2
https://my.vmware.com/web/vmware/details?productId=701&downloadGroup=CONV62

vCenter Converter Standaloneの特徴は以下の通り。
  • 無償で利用できる
  • Windows PCまたはWindows Server製品にインストール可能
  • 移行時は、変換元と変換先の両方にネットワーク接続できる必要がある
  • WAN越しでのデータ移行はサポート対象外
  • Hype-VおよびESXiを移行元に指定する場合は、仮想マシンが電源OFF状態のオフライン移行のみサポート
移行元のデータをファイル等に出力することができず、WAN越しの移行もできないことから、同一データセンター内でLAN接続ができる環境で移行するためのツールとなる。逆にデータセンターをまたぐような環境の移行においては、ZertoやAcronisなどの有償の移行ツールを選定する必要がある。

環境

今回はHyper-Vの仮想マシンをvSphere環境に移行する手順を確認してみた。環境は以下の通り。
  • 移行ツール:vCenter Converter Standalone 6.2
  • 移行元:Hyper-V 2012 (R2なし) 上のWindows Server 2012 (R2なし)
  • 移行先:vSphere ESXi 6.0 Update 3a
図示すると以下のようになる。


今回は同一セグメントでの接続をしているが、ネットワーク経路上にFirewallが存在する場合は、以下URLを参考に必要なポートの開放が必要となる。

必要な VMware vCenter Converter ポート (2078649)
https://kb.vmware.com/s/article/2078649

Hyper-V仮想マシンをvSphere環境に変換する手順

手順自体はウィザードに従って選択をしていくだけなので、それほど難しい手順ではない。

1. vCenter Converter Standaloneの起動

通常はインストールするとデスクトップにショートカットがあるはずなので、ダブルクリックして起動する。


2. 仮想マシン移行のウィザードを開始

画面左上の「Convert machine」を選択する。


3. 移行元ホストの指定

Source Systemは「Hyper-V Server」を選択し、IPアドレス、ユーザー名、パスワードを入力する。Administrator権限を持つユーザーを指定しておけば問題ないだろう。


4. 移行元ホストにエージェントをデプロイ

移行元のHyper-V環境にエージェントをデプロイするためのダイアログボックスが表示される。移行成功後に自動でエージェントをアンインストールするかどうかの設定となるので、今回は「I will manually uninstall the files later (後で手動でアンインストール)」を選択する。


エージェントのデプロイが始まるのでしばらく待つ。


なお、デプロイ後に移行元のHyper-Vでプログラムの一覧を確認すると、「vCenter Converter Standalone Agent」がインストールされていることを確認できる。不要になった場合は、別途ここからアンインストールすればよい。


5. 移行対象仮想マシンの指定

エージェントのデプロイ完了後、Hyper-V上の仮想マシン一覧が表示される。移行対象のVMが「Powered off」になっていることを確認し、選択する。


6. 移行先ホストの指定

Destination Systemでは、「VMware Infrastructure virtual machine」を選択し、IPアドレス、ユーザー名、パスワードを選択する。rootを選んでおけば問題ないだろう。


7. 移行先ホストの確認

移行先のESXi上の仮想マシン一覧が表示される。仮想マシン名が重複する場合はエラーとなるため、重複しない名前で「Name」を設定する。


8. 仮想マシンの各種設定

仮想マシン移行時の各種設定が行える。設定項目は以下の通り。
  • Data to coy : 移行対象のディスクとディスクタイプ(Thin、Thick)を設定できる
  • Devices : CPUやメモリを設定できる
  • Networks : NICの接続先ポートグループや仮想NICタイプを設定できる
  • Services : 移行対象仮想マシンのWindowsサービスの自動起動設定を変更できる
  • Advanced options : 移行対象仮想マシンの移行後の処理を設定できる。たとえば、移行後に仮想マシンを起動する、VMware Toolsをインストールする、といった設定ができる
  • Throttling : 移行時に使用できるCPU優先度、ネットワーク帯域を設定できる


今回は、ディスクをデフォルトのThickからThinに変更して移行を行うことにした。


9. 仮想マシンの移行の開始と完了

移行が開始すると、Status欄に進捗状況が表示されるので、完了するまで待機する。


問題なく移行が完了すると、Status欄にCompletedと表示される。


10. 移行直後のスナップショットを取得

このタイミングで一度仮想マシンのスナップショットを取得することを推奨する。というのも、移行後の仮想マシンの初回起動では、環境変更に伴うデバイスの再認識やドライバの更新が実施される。さらに、VMware Toolsの再インストールやNICの再設定も実施が必要となることから、万が一初期設定時に想定外事象が発生しても、移行直後の状態に戻せるようにしておくとリカバリが簡単になる。


11. 仮想マシンの起動

移行対象のWindows Server 2012は、特に何事もなかったように起動した。


12. 起動後の仮想マシンの設定

初回起動直後にデバイスマネージャーを確認すると、1つだけ認識に失敗しているデバイスが存在していた。こちらはVMware Toolsをインストールすることで解消した。


また、ネットワークインターフェースの情報はすべてリセットされてしまうため、再度IPアドレス等の設定を実施する必要がある。


ディスクに関しては、OSがインストールされているディスクに関しては正常に認識するようだが、それ以外のディスクはオフラインとなっているので、一度「ディスクの管理」からオンラインにする必要があった。


オンラインにすれば、ドライブレター含めて、正常に認識しなおしてくれた。


以上のように、そこまで難しい操作をすることなくHyper-VからvSphere環境への仮想マシン移行に成功した。同じような手順で物理サーバーのWindowsやLinuxからもvSphere環境の仮想マシンへ変換できるため、費用をかけずにP2VやV2Vを実施したい場合は、VMware vCenter Converter Standaloneの利用を検討するとよいだろう。

参考

VMware vCenter Converter Standalone 6.2 Release Notes
https://docs.vmware.com/en/vCenter-Converter-Standalone/6.2/rn/conv_sa_62_rel_notes.html

2018年5月26日土曜日

RealtekのNICのドライバーを組み込んだESXi 6.7のカスタムイメージを作成する


2018年4月17にVMwareよりvSphere 6.7が発表された。vSphere 6.5の次期バージョンとなり、7ではなく6.7というバージョンで登場した。

私は自宅の検証環境として、ESXi 6.0を無償ライセンスにて利用している。ESXi 6.7が登場したので、これを機にバージョンアップをすることにした。自宅検証環境は、Realtek 8168のNICが搭載されており、そのままではESXiが認識しないため、NICドライバーを組み込んだカスタムイメージを作成する必要がある。

↓★前回のカスタムイメージ作成の記事
https://tech-mmmm.blogspot.jp/2016/03/shuttle-ds81esxi-60-esxi-custom-image.html

しかし、前回と同様の手順にてRealtekのNICのドライバーを組み込んだカスタムイメージを作成しようとしたが、以下の警告メッセージが表示されてしまった。

------------------------------
警告: The image profile fails validation.  The ISO / Offline Bundle will still be generated but may contain errors and may not boot or be functional.  Errors:
警告:   VIB VFrontDe_bootbank_net51-drivers_1.0.0-1vft.510.0.0.799733 requires vmkapi_2_1_0_0, but the requirement cannot be satisfied within the ImageProfile. However, additional VIB(s) VMware_bootbank_esx-base_5.5.0-0.14.1598313,
VMware_bootbank_esx-base_5.1.0-3.52.2575044, VMware_bootbank_esx-base_6.0.0-2.37.3825889,
VMware_bootbank_esx-base_5.1.0-0.5.838463, VMware_bootbank_esx-base_6.0.0-3.57.5050593,

~(中略)~

VMware_bootbank_esx-base_5.1.0-1.12.1065491 from depot can satisfy this requirement.
------------------------------

警告メッセージが出力されるものの、カスタムイメージ自体は作成されたため、インストールできることを期待したのだが、「Operation failed」と表示されインストールに失敗してしまった。


本記事ではこのエラーを解消することを目的として、正常にRealtekのNICのドライバーを組み込んだESXi 6.7のカスタムイメージ作成方法について記載する。

ESXi 6.7に対応したドライバーを入手する

RealtekのESXi用ドライバーは、実は以下サイトからダウンロードできる。

List of currently available ESXi packages
https://vibsdepot.v-front.de/wiki/index.php/List_of_currently_available_ESXi_packages

ESXi 6.7に対応したRealtek 8168のドライバーは以下URLからダウンロードができる。「Direct Download links」より、VIBファイルをダウンロードする。

・ファイル名:net55-r8168-8.045a-napi.x86_64.vib

【注意】
以下は旧バージョンとなり、ESXi 6.7では利用できないので注意。前述した警告メッセージは、このドライバーを組み込もうとしたことが原因となる。
https://vibsdepot.v-front.de/wiki/index.php/Net51-drivers
・ファイル名:net51-drivers-1.1.0-1vft.510.0.0.799733.x86_64.vib

ESXi-Customizer-PSとPowerCLIを入手する

ESXiのカスタムイメージを作成するため、以下2つのツールを入手しておく。

ESXi-Customizer-PS 2.6
https://www.v-front.de/p/esxi-customizer-ps.html
・ファイル名:ESXi-Customizer-PS-v2.6.0.ps1

PowerCLI 6.5
https://my.vmware.com/jp/group/vmware/details?downloadGroup=PCLI650R1&productId=614
・ファイル名:VMware-PowerCLI-6.5.0-4624819.exe

PowerCLIは、インターネットに接続可能なPC等にあらかじめインストールをしておくこと。ダウンロードしたファイルは、以下フォルダを作成し配置しておこう。

・フォルダ:C:\ESXi-Customizer
 - ファイル名:ESXi-Customizer-PS-v2.6.0.ps1
 - ファイル名:net55-r8168-8.045a-napi.x86_64.vib

カスタムイメージを作成する

ESXi-Customizer-PSはPowerCLIのスクリプトとなっているが、PowerShellの実行ポリシーを変更しなければ実行できないため、PowerShellにて実行ポリシーの変更を行う。

PS C:\> Set-ExecutionPolicy Unrestricted
------------------------------
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policiesのヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y   ←★"Y"を入力
------------------------------

これで準備が整った。それでは、カスタムイメージを作成するために、PowerCLIを開き、ESXi-Customizer-PSを実行してみよう。

PowerCLI C:\> cd C:\ESXi-Customizer
PowerCLI C:\ESXi-Customizer> .\ESXi-Customizer-PS-v2.6.0.ps1 -v67 -pkgDir C:\ESXi-Customizer\
------------------------------
セキュリティ警告
信頼するスクリプトのみを実行してください。インターネットから入手したスクリプトは便利ですが、コンピューターに危害を及ぼす可能性があります。このスクリプトを信頼する場合は、この警告メッセージが表示されないように、Unblock-Fileコマンドレットを使用して、スクリプトの実行を許可してください。C:\ESXi-Customizer\ESXi-Customizer-PS-v2.6.0.ps1を実行しますか?
[D] 実行しない(D)  [R] 一度だけ実行する(R)  [S] 中断(S)  [?] ヘルプ (既定値は "D"): R   ←★"R"を入力

This is ESXi-Customizer-PS Version 2.6.0 (visit https://ESXi-Customizer-PS.v-front.de for more information!)
(Call with -help for instructions)

Logging to C:\Users\admin\AppData\Local\Temp\2\ESXi-Customizer-PS-1900.log ...

Running with PowerShell version 5.1 and VMware PowerCLI version 6.5.0.2604913

Connecting the VMware ESXi Online depot ... [OK]

Getting Imageprofiles, please wait ... [OK]

Using Imageprofile ESXi-6.7.0-8169922-standard ...
(dated 04/03/2018 22:07:05, AcceptanceLevel: PartnerSupported,
The general availability release of VMware ESXi Server 6.7.0 brings whole new levels of virtualization performance to datacenters and enterprises.)

Loading Offline bundles and VIB files from C:\ESXi-Customizer\ ...
   Loading C:\ESXi-Customizer\net55-r8168-8.045a-napi.x86_64.vib ... [OK]
      Add VIB net55-r8168 8.045a-napi [New AcceptanceLevel: CommunitySupported] [OK, added]   ←★ドライバーが追加された

Exporting the Imageprofile to 'C:\ESXi-Customizer\ESXi-6.7.0-8169922-standard-customized.iso'. Please be patient ...


All done.   ←★途中にエラー等なく「All done.」が表示されればOK。
------------------------------

これで、同一フォルダ内に「ESXi-6.7.0-<ビルド番号>-standard-customized.iso」というカスタムイメージのISOファイルが作成されるはずである。

実際にESXiをインストールして確認してみる

インストール手順の詳細は割愛するが、実際にESXi 6.7をインストールした際のNIC認識状況は以下の通り。



ドライバーが組み込まれ、Realtek 8168のNICが正常に認識できていることが確認できた。

2018年5月21日月曜日

for文やwhile文を使うとLinux操作が捗る話


LinuxはCUIでの操作が基本となり、GUIでは簡単にはできない繰り返し処理をfor文やwhile文を使うことで、容易に実現できる。

for文やwhile文はシェルスクリプトで使うものと思われがちだが、構文を覚えておけば、ちょっとした繰り返し処理を行う際に、いちいちシェルスクリプトを作らなくても、ターミナルから直接繰り返し処理を実行できるため、効率よく作業ができる。

今回はそんなfor文とwhile文の使い方について記載する。

一定回数繰り返す系

この使い方は、vmstatやiostat等の、繰り返し実行の機能のない性能情報取得コマンドを定期間隔で実行することができるので、パフォーマンス分析を行う際に便利である。

構文は以下の通り。

------------------------------
for i in {1..<繰り返し回数>} ; do <実行コマンド> ; sleep <繰り返し間隔(秒)> ; done

※実行コマンドに日時情報が含まれない場合は、以下の通りdateコマンドを合わせて実行するとよい。
for i in {1..<繰り返し回数>} ; do date ; <実行コマンド> ; sleep <繰り返し間隔(秒)> ; done
------------------------------

以下に、vmstatとiostatを5秒間隔で120回実行した際の実行例を記載する。なお、vmstatはバージョンによっては-tオプションが使えないようなので、その場合はdateを挟んで時刻を表示させるようにすること。

# for i in {1..120} ; do vmstat -t ; sleep 5 ; done
------------------------------
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st                 JST
 3  0      0 1372548   1260 392356    0    0     0     0    4    6  0  0 100  0  0 2018-04-30 14:43:38
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st                 JST
 3  0      0 1372672   1260 392356    0    0     0     0    4    6  0  0 100  0  0 2018-04-30 14:43:43

~(以下略)~
------------------------------

# for i in {1..120} ; do iostat -t -d -x ; sleep 5 ; done
------------------------------
Linux 3.10.0-327.el7.x86_64 (t1110rh72)         2018年04月30日  _x86_64_        (1 CPU)

2018年04月30日 14時44分56秒
Device:  rrqm/s  wrqm/s    r/s    w/s   rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
fd0        0.00    0.00   0.00   0.00    0.00     0.00     8.00     0.00   62.00   62.00    0.00  62.00   0.00
sda        0.00    0.01   0.00   0.06    0.04     0.32    10.96     0.00    0.25    0.38    0.25   0.05   0.00
dm-0       0.00    0.00   0.00   0.07    0.03     0.32     9.68     0.00    0.27    0.44    0.27   0.04   0.00
dm-1       0.00    0.00   0.00   0.00    0.00     0.00    17.99     0.00    0.16    0.16    0.00   0.13   0.00

Linux 3.10.0-327.el7.x86_64 (t1110rh72)         2018年04月30日  _x86_64_        (1 CPU)

2018年04月30日 14時45分01秒
Device:  rrqm/s  wrqm/s    r/s    w/s   rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
fd0        0.00    0.00   0.00   0.00    0.00     0.00     8.00     0.00   62.00   62.00    0.00  62.00   0.00
sda        0.00    0.01   0.00   0.06    0.04     0.32    10.96     0.00    0.25    0.38    0.25   0.05   0.00
dm-0       0.00    0.00   0.00   0.07    0.03     0.32     9.68     0.00    0.27    0.44    0.27   0.04   0.00
dm-1       0.00    0.00   0.00   0.00    0.00     0.00    17.99     0.00    0.16    0.16    0.00   0.13   0.00

~(以下略)~
------------------------------

なお、watchコマンドを使えば、もっと簡単にコマンドの繰り返し実行ができる。ただし、watchコマンドでは、Tera Term等のターミナルソフトのログに実行結果の情報が残らないというデメリットがあるので、きちんとログを残したい場合はfor文で実行する方がよいだろう。

一覧に対してコマンドを実行する系

一覧出力コマンドの結果を引数として、詳細な情報を表示させる際に利用する。たとえば、chageコマンドで各ユーザーのパスワード期限を見る、ethtoolコマンドで各インターフェースの詳細情報を確認する、といった使い方ができる。

構文は以下の通り。

------------------------------
for i in `<一覧出力コマンド>` ; do <実行コマンド> $i ; done
------------------------------

以下にfor文を使って、ユーザーごとにchageコマンドを実行し、パスワード期限設定の一覧を出力させてみる。

# for i in `cat /etc/passwd | cut -d":" -f 1` ; do echo $i ; chage -l $i ; done
------------------------------
root
最終パスワード変更日                         :なし
パスワード期限:                             : なし
パスワード無効化中                           : なし
アカウント期限切れ                           : なし
パスワードが変更できるまでの最短日数         : 0
パスワードを変更しなくてよい最長日数         : 99999
パスワード期限が切れる前に警告される日数         : 7
bin
最終パスワード変更日                         : 5月 24, 2015
パスワード期限:                              : なし
パスワード無効化中                            : なし
アカウント期限切れ                            : なし
パスワードが変更できるまでの最短日数         : 0
パスワードを変更しなくてよい最長日数         : 99999
パスワード期限が切れる前に警告される日数          : 7

~(以下略)~
------------------------------

以下は、ethtoolで同様にインターフェースごとの詳細設定を出力させる構文となる。for文の変数に代入する値は、grepやcutコマンドを使って、必要な箇所(今回でいえばインターフェース名)を取り出すことが重要となる。

# for i in `ifconfig -a | grep "mtu" | cut -d":" -f 1` ; do ethtool $i ; done
------------------------------
Settings for eno16780032:
        Supported ports: [ TP ]
        Supported link modes:   1000baseT/Full
                                10000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: No
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Speed: 10000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: off
        MDI-X: Unknown
        Supports Wake-on: uag
        Wake-on: d
        Link detected: yes
Settings for lo:
        Link detected: yes

~(以下略)~
------------------------------

負荷をかける系

性能試験などで負荷をかける際にも利用できる。

構文は以下の通り。sleepを入れずに最短でコマンド実行を繰り返すようにする。

------------------------------
for i in {1..<繰り返し回数>} ; do <実行コマンド> ; done

※無限に繰り返したい場合はwhile文を使う。
while : ; do <実行コマンド> ; done
------------------------------

たとえば、メールサーバーの性能を確認するため、一気にメールを1000通送りたい場合は、以下のように実行する。

# for i in {1..1000} ; do echo "テスト" | mail -s "test subject" -r ex-1@example.com ex-2@example.com ; done

人気の投稿