2015/05/19

Hyper-V 上の CentOS でコンソールサイズが過大になる

所用にて、Windows 8 で Hyper-V を実行、その上で CentOS 6 をインストールして使っていた。
CentOS は minimal でインストールしたため Xなしなのだが、カーネルがロードされ、 udev がメッセージを出しているあたりで唐突に画面サイズが非常に大きなものになってしまい、少々困っていた。

Hyper-V にて Linux を起動中、出だしはこのサイズなのだが...
起動途中にいきなりここまで大きくなってしまう
どうせ SSH でログインできればいいので、コンソールサイズなんて 800x600 程度でいいのだが、さてどうすれば直るやら...と調べたことのメモ。

結論から言うと、/etc/grub.confkernel= の行に 「video=hyperv_fb:800x600」と記載してリブート、が正解であった。CentOS 6 では統合サービス(IC)がカーネルに組み込み済みのため、適切なフレームバッファドライバとして hyperv_fb が使われる。そのパラメータとして 800x600 と書く、と言うことだ。
(なお、CentOSなど RHEL系では、/etc/grub.conf /boot/grub/menu.lst のシンボリックリンクだ)

検索してると見かけられる vga=771 などではコンソール解像度の拡大を防ぐことはできなかった。そこまで追いかけてはいないが、vga= というオプションを解釈するのはおそらく標準のコンソールドライバなのだろう。

video=hyperv_fb:800x600 を記載後、いったん電源を落として再起動
すると、800x600 サイズまでしか拡大しない
また、どこかで video=800x600 とすればいいような記載もあったが、これも今回は正しく動作しなかった。

5/20: 画像を取り直して追加

2015/05/13

Backdoor!!

ディスクの整理をしていたら、以前、VTCというコミュニティのイベントで話した VMware の VMwareTools と Hyper-V の統合サービスの実装についての話が発掘されたので、SlideShare にアップロードしておいた。

http://www.slideshare.net/tshiroyama/backdoor-vmwaretools

古い話だが、ここら辺の仕組みは現在でもさして変わらないだろう。
なお、PPTXでアップロードするとフォントがおかしくなるのでPDFでアップしたところ、背景の黒が抜けて真っ白になっている。読めなくはないのでそのままにしているが、読みにくい場合はダウンロードしていただければちゃんと背景が黒いPDFが手に入るので、そちらを見て欲しい。(や、フォントずれを探して直すのはさすがに面倒なので...)

対比としては、かなりまじめにハードウェアを再現しており、あまりこうした準仮想化的手法には頼らない VMware と、VMBus という架空のバスすら作ってしまうぐらい割り切ってしまった Hyper-V というのがかなり面白かったのを覚えている。

再現性と性能を両立させているだけあって、VMware の方が技術としては確かに 高いと言えるが、一方で自社のOS(Windows)はもとより、Linux ですらカーネルに仮想化専用の構成を突っ込んでしまって標準化させてしまった Hyper-V はそれはそれで面白いし、何より現実的と言える。

実際、WindowsServer 2008, 2008R2 以降であるならば、どちらで仮想化してもさして変わらないぐらいまではもってこれている。一方がベンチマークを公開する事に対してかなり厳しい姿勢を取っているのでなかなか適切な資料はないが、そうした最近のOSについては、性能についても優位性というのは言えなくなってきている。

聞くところによると、XBox One ではあのカトラーが開発に関わっており、仮想化環境上でゲームが動いているとか。チューニングはされているだろうし描画性能を稼ぐためのそれこそ特別な「バックドア」はあるのだろうが、もはや仮想化が性能に対してそこまでひどいインパクトを与えるものではない、という傍証にはなるかと思われる。

機会があれば最新のソースを引っ張ってどうなってきたかを読み比べてみたいものだ。

2015/05/12

(U)EFI と Mac と Fusion

先日の Windows7 でのシステムパーティションの話の続き。

Mac の場合は商用で販売されたすべての Intel Mac が EFIをファームウェアとしているため必ずこの領域が存在する。かつては100MB程度だったが、現在では 200MB程度を確保しているようだ。一部に、「Macで使ったディスクだと先頭に隠しパーティションがある」と言われているが、別に Mac に限らず、上記のように UEFI を使用した Windows でも作成される。

(U)EFIの実装自体にも 32bit, 64bit の二通りがある。たとえば初期の Intel Mac では 32bit EFI が使われている。32bit EFI の Mac は 64bit Kernel をブートできない。このため、サポートされる OS Xのバージョンは最大でも 10.7 Lion までとなる。
(10.8 Mountain Lion, 10.9 Marvericks, 10.10 Yosemite は 64bit kernel のみ。余談だが 10.6 Snow Leopard と 10.7 だけが 32/64bit 両対応の Kernel で 10.5 Leopard は 32bit Kernel しか存在しない。)

Windows の場合、32bit Windows は PC-BIOS で、64bit Windows から UEFI サポートが入るというのが原則となる。マイクロソフトの記事(日本語で情報が古い英語で最新)によると

  • 64bit で UEFIをサポート、ただしCSM必須
    • Windows 7
    • Windows Vista SP1
    • Windows Server 2008
    • Windows Server 2008 R2

  • 32bit/64bit 双方で UEFIをサポート
    • Windows 8
    • Windows 8.1
    • Windows Server 2012
    • Windows Server 2012 R2

となる。なお、セキュアブート UEFI 2.3.1(エラッタC対応)以降が必要になる。

また、64bit UEFI だけをファームウェアとする PC では 64bit Windows しか起動できない。( 当たり前の事だが 32bit CPU の PC では 64bit の Windows は起動できない )

64bit CPUをもつ PC でも、PC-BIOS をファームウェアとする場合は 32bit Windows が利用できる。

また、UEFI には CSM (Compatibility Support Module)という、UEFI でブートした後に PC-BIOS をエミュレーションするモジュールが定義されているが、これをサポートしている場合は、CSM経由で 32bit Windows を起動する事ができる。

ややこしいのは、Windows 7, 2008R2 など上段の4つのOSは「CSMが必須」であることだ。
これは、Windows 7, 2008 R2 などは起動処理中に INT10H を使ったビデオBIOSを使って画面描画を行うためだ。そう、Windows のロゴやらは旧来のPC-BIOSのもってたビデオBIOSで描画されている。
CSMを持たない UEFI をファームウェアとする PC の場合、INT10Hを処理できないので Windows 7 や 2008 R2 をインストールする事はできない。
なお、CSMをもたない UEFI は「Class 3」と呼ばれており、CSM をもつ UEFI を「Class 2」とよんで区別している。


VMware Fusion 7 では、32bit OSをゲストOSとして指定して仮想マシンを作成しても、一般的な 64bitOS を指定して仮想マシンを作成しても、PC-BIOSをファームウェアとした仮想マシンが作成される。
例外としては、OS XをゲストOSとして指定した場合だ。この場合は、32bit でも 64bit でも EFIをファームウェアとして構成される。
DTKの話で話したように、まっとうな OS X は EFIからしかブートできないからだ。


では、EFIで Windows がインストールできないかというと、そういうわけではない。
VMware Workstation と異なり、VMware Fusion にはファームウェアの BIOSかEFIかを設定する UI はない。が、.vmx ファイルに
firmware="efi"
を追記する事で、EFI をファームウェアとした仮想マシンを起動する事はできる。
(あるいは、ゲストOSをわざと OS X としてもいい)

実際に Windows 8.1 64bit をインストールしてみたが、ごく普通に動作した。

EFIを有効にしてインストールした場合
システム情報のBIOSモードがUEFIになる

普通にインストールした場合
PC-BIOSが有効になり、BIOSモードも「レガシ」となる