HYPER-V で Linux を実行するためのベスト プラクティス
このトピックには、Hyper-V で Linux 仮想マシンを実行する場合の推奨事項の一覧が含まれています。
動的 VHDX ファイルでの Linux ファイル システムの調整
一部の Linux ファイル システムでは、ファイル システムがほとんど空の場合でも、実際のディスク領域が大量に消費される場合があります。 動的 VHDX ファイルの実際のディスク領域の使用量を減らすために、次の推奨事項を検討してください。
- VHDX を作成するときに、PowerShell で (既定の 32 MB から) 1 MB の BlockSizeBytes を使用します。以下に例を示します。
PS > New-VHD -Path C:\MyVHDs\test.vhdx -SizeBytes 127GB -Dynamic -BlockSizeBytes 1MB
動的 VHDX ファイルで使用する場合、ext4 は ext3 よりも領域効率が高いので、ext4 形式が ext3 よりも優先されます。
ファイル システムを作成するときに、グループの数を 4096 に指定します。以下に例を示します。
# mkfs.ext4 -G 4096 /dev/sdX1
第 2 世代仮想マシンの grub メニュー タイムアウト
レガシ ハードウェアは第 2 世代仮想マシンでのエミュレーションの対象から除外されるため、grub メニューのカウントダウン タイマーのカウント ダウンが速すぎて grub メニューを表示できず、既定のエントリがすぐに読み込まれます。 grub が EFI でサポートされているタイマーを使用するように修正されるまで、/boot/grub/grub.conf、/etc/default/grub、または同等のものを、既定の "timeout=5" ではなく "timeout=100000" に変更します。
第 2 世代仮想マシンでの PxE ブート
PIT タイマーは第 2 世代仮想マシンに存在しないので、PxE TFTP サーバーへのネットワーク接続が途中で終了し、ブートローダーによって Grub 構成が読み取られて、サーバーからカーネルが読み込まれるのが妨げられる可能性があります。
RHEL 6.x では、次の説明に従って、grub2 の代わりにレガシ grub v0.97 EFI ブートローダーを使用できます。https://access.redhat.com/documentation/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-netboot-pxe-config-efi.html
RHEL 6.x 以外の Linux ディストリビューションでは、同様の手順に従って、PxE サーバーから Linux カーネルを読み込むように grub v0.97 を構成できます。
さらに、RHEL/CentOS 6.6 のキーボードおよびマウス入力は、メニューでインストール オプションを指定できないプレインストール カーネルでは機能しません。 インストール オプションの選択を許可するようにシリアル コンソールを構成する必要があります。
PxE サーバーの efidefault ファイルに、次のカーネル パラメーター "console=ttyS1" を追加します
Hyper-V の VM で、この PowerShell コマンドレットを使用して COM ポートを設定します。
Set-VMComPort -VMName <Name> -Number 2 -Path \\.\pipe\dbg1
プレインストール カーネルに kickstart ファイルを指定すると、インストール時のキーボードとマウスの入力の必要もなくなります。
フェールオーバー クラスタリングで静的 MAC アドレスを使用する
フェールオーバー クラスタリングを使用してデプロイされる Linux 仮想マシンは、仮想ネットワーク アダプターごとに静的メディア アクセス制御 (MAC) アドレスを使って構成する必要があります。 一部のバージョンの Linux では、新しい MAC アドレスが仮想ネットワーク アダプターに割り当てられているため、フェールオーバー後にネットワーク構成が失われる可能性があります。 ネットワーク構成が失われないようにするには、各仮想ネットワーク アダプターに静的 MAC アドレスがあることを確かめます。 MAC アドレスは、Hyper-V マネージャーまたはフェールオーバー クラスター マネージャーで仮想マシンの設定を編集することで構成できます。
レガシ ネットワーク アダプターではなく、Hyper-V 固有のネットワーク アダプターを使用する
パフォーマンスが向上した Hyper-V 固有のネットワーク カードである、仮想イーサネット アダプターを構成して使用します。 レガシおよび Hyper-V 固有の両方のネットワーク アダプターが仮想マシンに接続されている場合、ifconfig -a の出力のネットワーク名に、_tmp12000801310 などのランダムな値が示される場合があります。 この問題を回避するには、Linux 仮想マシンで Hyper-V 固有のネットワーク アダプターを使用するときにすべてのレガシ ネットワーク アダプターを削除します。
I/O スケジューラ noop または none を使用してディスク I/O パフォーマンスを向上させる
Linux カーネルでは、要求の順序を変更するための 2 セットのディスク I/O スケジューラが提供されます。 1 つのセットは古い 'blk' サブシステム用で、1 つのセットは新しい 'blk-mq' サブシステム用です。 いずれの場合も、現在のソリッド ステート ディスクでは、基になる Hyper-V ハイパーバイザーにスケジュールの決定を渡すスケジューラを使用することをお勧めします。 'blk' サブシステムを使用する Linux カーネルの場合、これは "noop" スケジューラです。 'blk-mq' サブシステムを使用する Linux カーネルの場合、これは "none" スケジューラです。
特定のディスクの場合、使用可能なスケジューラは、/sys/class/block/<diskname>
/queue/scheduler というファイル システムの場所で確認できます。現在選択されているスケジューラは角かっこで囲まれます。 このファイル システムの場所に書き込むことで、スケジューラを変更できます。 再起動後も保持されるようにするには、変更を初期化スクリプトに追加する必要があります。 詳細については、Linux ディストリビューションのドキュメントを参照してください。
NUMA
2\.6.37 未満の Linux カーネル バージョンは、HYPER-V で大きい VM サイズの NUMA をサポートできません。 この問題は、主に、アップストリームの Red Hat 2.6.32 カーネルを使用した古いディストリビューションに影響し、Red Hat Enterprise Linux (RHEL) 6.6 (kernel-2.6.32-504) で修正されました。 2\.6.37 より古いカスタム カーネルまたは2.6.32-504 より古い RHEL ベースのカーネルを実行しているシステムでは、grub.conf のカーネル コマンドラインで、ブート パラメーター numa=off
を設定する必要があります。 詳細については、Red Hat KB 436883 を参照してください。
kdump 用により多くのメモリを予約する
ダンプ キャプチャ カーネルの起動時にパニックが発生した場合は、カーネル用により多くのメモリを予約します。 たとえば、Ubuntu grub 構成ファイルのパラメーター crashkernel=384M-:128M を crashkernel=384M-:256M に変更します。
VHDX を縮小したり、VHD および VHDX ファイルを拡大したりすると、GPT パーティション テーブルに誤りが生じる可能性がある
Hyper-V を使用すると、ディスク上に存在する可能性があるパーティション、ボリューム、またはファイル システムのデータ構造に関係なく、仮想ディスク (VHDX) ファイルを縮小できます。 VHDX の最後がパーティションの最後の前に来る場所まで VHDX が縮小された場合、データが失われるか、そのパーティションが破損するか、パーティションの読み取り時に無効なデータが返される可能性があります。
VHD または VHDX のサイズを変更した後、管理者は fdisk や parted のようなユーティリティを使用してパーティション、ボリューム、およびファイル システムの構造を更新し、ディスクのサイズの変更を反映する必要があります。 GUID パーティション テーブル (GPT) を持つ VHD または VHDX のサイズを縮小または拡大すると、パーティション管理ツールを使用してパーティション レイアウトを確認するときに警告が示され、管理者に最初と 2 番目の GPT ヘッダーを修正するように警告が示されます。 この手動の手順は、データを失わずに安全に行うことができます。