2015/04/29

DTK のこと。

たまたま別の事を調べていたときに、「Mac on PC(笑)」なるエントリを見かけて、ああ、もう DTK の事は忘却の彼方なのね、と思ったので少々昔話を残しておく。

なぜなら、先の記事には

『残念ながらVirtualBoxで読み込んで動きませんでしたが、
これを作ったハッカーの人々はすごいものです。』

とあるが、そんなものではなく単に DTK から盗みだしたものだから、っていうのが答えだからだ。

当時 Apple は PowerPC をCPUとする Mac を販売しており、OS X というOS もその上で動くアプリケーションも PowerPC 向けにビルドされていた。

WWDC 2005 にて、 Apple は Intel CPU への移行を宣言、CPUアーキテクチャの変更を強行、成功裏に終わらせたのは知っての通りだ。
( NeXT屋としては Intel Transition は2度目で、「またか」って気分になったのだが...さておき )

円滑な移行の支援のため、 Apple は開発者向けに Intel CPU 搭載の Mac を先行配布をおこなった、これが DTK、 Developer Transition Kit だ。
申し込みは先の WWDC2005 で行われており、その場にいたので申し込むかかなり迷ったのだが、有償(たしか$1000ほど)で、かつ「貸与」で返却が必要だった事からあきらめた記憶がある。
後に、DTKは Intel CPU を搭載した初代 iMac 17inch と無償交換となった。このマシンは $1299 で販売されたので、DTKを申し込んだ方が得だったのだが...まあ、それも後から見ての話。

さて、このDTKだが、実は後の Intel Mac とはアーキテクチャが大きく異なっていた。

Intel Mac は初代が Core Duo, 二代目以降が Core2 Duo で、インテルCoreアーキテクチャを採用した、Core世代前提のハードウェアとなっている。
( 厳密に言うなら、初代の Core Duo 、すなわち Yonah は Coreアーキテクチャではなく、Snow Leopard(10.6.x)までしかサポートされないとか、その次もしばらくは 32bit EFI の制約があり 64bit Kernel オンリーになった Mountain Lion (10.7.x)に移行できない、など移行期のごたごたがあり、ハードウェアが固まったのは 2008年頃からではあるが。)

DTK の Mac は、PowerMac G5 の巨大なアルミ筐体の中に Pentium4 をCPUとする普通のPCのマザーボードを突っ込んだという、なんとも強引なものだった。

そう、この DTK は、EFI ではなく、PC-BIOS をファームウェアとしているのだ。

DTK Mac の貴重な写真がこちらにあるので、見ていただければと思う。


正式にリリースされた Intel CPU向け OS X は EFIでしか起動せず、さらに HFS Plus を読み込める必要がある。なぜなら、OS X のブートローダは EFIシステムパーティションだけにあるとは限らず、HFS Plus のファイルシステム中にもあるからだ。(/System/Library/CoreServices/boot.efi 。むしろこちらがデフォルトか。)

Apple は Mac に搭載した EFI には HFS Plus 向けのドライバーを搭載しているが、普通の EFI にはその手のドライバーは搭載されていない。
(なお、EFI に HFS Plus ドライバを加える事自体は悪い事ではない。EFI はその名の通り拡張可能なファームウェアであり、そうしたベンダーごと必要な機能を加えやすいことが特徴だからだ。ただ、boot.efi とを ファームウェアにも EFIシステムパーティションにも配置しなかった事については行儀がよくないなぁとは思うが。)

しかし、DTKは普通のPCであるため、通常のBIOSからのブートローダを保持していた。

これは Darwin の一部としても配布されていた。Darwin 単体での配布はこれまた 2005年頃に終了しているが、Intel PC上で動作させるため、BIOSからのブートローダを持っていたのだ。


ここまででおわかりだろう、普通のPCで動作する OS X 10.4.x がなぜ存在するか、それは 当時の Darwin のソースコードからブートローダを持ってきたか、あるいは DTK のブートローダをコピーしたか、なのだ。


余談。

なお、この DTK、ハードウェアだけではなく搭載されていた OS X にもいろいろ違いが見られる。
顕著な点としてはメモリマップがあげられる。DTKに搭載されていた OS X 10.4 では仮想メモリのアドレス空間が 1G/3G に分割されていた。32bit の Linux や /3G スイッチを有効にした 32bit の Windows と同じく、プロセスに割り当てられる 4GBの仮想メモリのうち、プロセスが本当に扱う事ができるのは 3G までで、残り1GBはカーネルに固定的に割り当てられていた。

※ 仮想メモリのアドレス空間とは、要するに「アプリから見えるメモリ構成」であり、それに対して物理メモリのアドレス空間は、「実際のメモリとか、PCIバスのデバイスがどこのアドレスに割り当てられているか」を意味する。

別に仮想メモリの 4GB全てをユーザ空間に割り当てる事も不可能ではないのだが、すると、システムコールを発行しカーネルに処理が写る瞬間に、4GBの仮想メモリのレイアウト(実際にどこの物理メモリと対応づけられているか)が全て入れ替わる。システムコールの引数など、ユーザ空間にあるメモリ内容を参照するにはいったんそれをカーネル側の4GBのメモリ空間にコピーする必要があり、システムコールごとの手間がかかるし、何よりメモリマップをごっそり変えてしまうと、CPUのTLBが全て無効化され、メモリのアクセス性能ががたんと落ちてしまう。プロセス切り替えである程度TLBが吹っ飛ぶのは仕方ないとしても、システムコールごとに吹っ飛ばされてはたまったものではないだろう。

※ TLBとは、要するに仮想メモリと物理メモリの対応付けのキャッシュである。歩かそうメモリの内容が、実際に物理のメモリのどこに配置されているかはメモリ上に対応表が存在し、これを参照するが、対応表自体が非常に大きいため、TLBでキャッシュをかけて速度を稼いでいる訳だ。

そこで、32bit のメジャーなOSは、仮想メモリ空間のうち、上位(大きい方から)1GBをカーネル空間に割り当て、残り3GBをユーザ空間に割り当てている。システムコールを発行してカーネル側に処理が切り替わっても、仮想メモリ上の配置は変わらない。TLB が吹っ飛ぶ事もないし、カーネル側からは3GBのユーザ空間を自由にアクセスできるので、システムコールごとの情報の受け渡しも楽になる。

※ もちろんCPUが実行するプロセスが切り替わるとTLBの内容は吹っ飛ぶが、その場合でもカーネルの1GBは共通のため全滅にはならない

その代わり、アプリケーションから見ると上位1GBは「アクセス禁止」となり、3GBまでのメモリしか使えない。

/3G スイッチを入れて起動していない、通常の 32bit Windows の場合は、2G:2Gで分けられており、ユーザプロセスは2GBまでのメモリしか使えず、さらに窮屈な思いになる。
1GBでも貴重なため解放したのが /3G スイッチであり、またアクセスできる 3GBのアドレス空間中の一部を必要に応じて差し替えることで、3GB以上のメモリを使えるようにする、PAE という拡張も用意された。
(要はバンクメモリとかEMSと同じ発想ですよ、PAEって...。 )


ところが、2006年に実際にリリースされた OS Xでは、4G:4G になっている。
そう、ユーザプロセスは4GBの仮想メモリのアドレス空間がほぼ全て使える。最上位 2MBだけはカーネル空間とされ、トラップテーブルなどが用意されている。

こうなったということ自体は Apple の開発者から説明を受けたが、なぜそうしたかの理由はされなかった。おそらく、次に書くように部分的な 64bit 対応がすぐそこに迫っていたため、そちらで解決されるという見込みだったのだろう。

素人考えではその後に出てきた初代 iMac より DTKのアーキテクチャの方がTLBが吹っ飛ばない分性能が良さそうに感じるが、「そんなことよりデバイスドライバのデキの方が性能に影響するだろ」とか、「Pentium4 で動かしても仕方ないだろ」で、さして速度差はなかったかもしれない。

どちらにせよ、$1000に迷って DTKに手を出さなかったのは未だにちょっとした後悔にはなってます、ええ。


● さらに余談

先の完全32bit の OS X は、実は CoreDuo を搭載した初代 Intel Mac でしか起こりえない。

二世代目の、Core2 Duo を搭載した Intel Mac は Intel64(EM64T)対応で、64bitアーキテクチャだったからだ。

Apple はそこに目をつけ、32bit カーネルだが、一部を 64bit で動作させ、(物理、仮想ともに)4GBのメモリ制限を回避するなどの荒技に出たのだ。

OS X のブートローダは CPU が Intel64(EM64T とか x86_64 か呼ばれる)を検出すると、IA-32e モードに切り替えた後に、32bit のカーネルを起動する。

IA-32e モードでは「互換モード」と「ロングモード」の二つのモードがあり、互換モードでは従来の x86のコードのほとんどを動作させる事ができ、ロングモードでは64bit のコードを実行する事ができる。IA-32eモードにさえ切り替えておけば、この二つのモードは高速に切り替える事ができる。

Apple はこの点に注目し、カーネルのほとんどの部分とデバイスドライバは 32bit で動作させつつ、メモリ管理と先のトランポリン部分は 64bit で動かすようにした。

さて、32bitアプリケーションはユーザ空間で 4GB(-2MB)の仮想メモリを使う事ができる。システムコールを発した瞬間に、カーネルに処理を切り替えると同時にロングモードに切り替えが行われる。すると、64bit の仮想メモリのアドレス空間に切り替わる。これまで先頭4GBしか見えてなかったのが、いきなり広がる訳だ。
膨大なメモリ空間の最上位512GB がトランポリンとなり、ここでロングモードのまま必要な処理を行った後に、互換モードに切り替え 32bit のカーネル空間に飛び込む。

また、OS X では 32bit カーネルでも 64bitアプリケーションを実行する事ができた。
(10.4 では Libc など一部の非GUIライブラリまでが 64bit に対応、10.5 で Cocoa/Carbon などGUIを含むフレームワークが 64bit 対応して、64bit アプリケーションが利用可能となった)

64bitアプリケーションの場合、ユーザ空間上のアプリケーションは64bitの仮想メモリ空間中、128TB(-4GB)までの仮想メモリを扱う事ができる。128TB以上は予約空間とされ、アクセスできない。また、32bit プロセスで使われていた 下位4GBのメモリは「Page0」とされ、すべて0で埋め尽くされ使えないメモリ空間、ということにされている。こちらもアクセスできない、したらSEGVとなる。

※ なぜ128TBとかというと、実際の Intel64 では、64bitモードでも物理アドレスが40〜52bit、仮想アドレスも48bit に制限されている。そしてこの仮想メモリ48bit、つまり 256TBのメモリ空間は連続ではなく、上位128TBと下位128TBが利用可能となっている。将来的に 56bit〜64bit のメモリ空間が利用可能に拡張されたときにも、問題がないようにあえて真ん中に利用禁止区間を作っている訳だ。な訳で、アドレスとしては 64bit で、うち下位128TBがユーザ用、上位128TBがカーネル用と想定されている。

そして、システムコールを呼ぶと、64bit アドレス空間で最上位から 512GBの空間のトランポリンに処理がうつるまでは 32bitアプリと同じ。ただし、このときに互換モードからロングモードへの切り替わりが必要ないのでその点は効率がよくなる。
そこから処理が進むと、互換モードに切り替わり、下位4GBのアドレス空間に存在する 32bitカーネルに処理が飛び込む。

これによって、初代 Intel Mac は物理的な制約もあり 2GB〜3GBしかメモリが搭載できなかったのが、2006年頃の Mac では 16GBまで搭載できるのが現れ、2008年には 64GBまで搭載可能となってきた。
※ Intel64 自体は 52bit までの物理アドレスに対応しているが、初期のCPUでは 40bit で1TBまでのメモリしか対応してなかった。これは少しずつ拡張されてきており、たとえば現在の Xeon E7 v2 2800/4800/8800 では 46bit のアドレッシングに対応、つまり 64TB までは使えるようになっている。

このような阿漕な事をしない、言い換えれば素直な設計とも言える Windows や Linux では、(PAE を使わない限り) 4GBまでの物理アドレス空間しか扱えず、そこからPCIバスのマップなどハードウェア側の予約分(512MB)をさっ引いた、3.6GB 程度しかRAMを搭載できない。
※ PAEでのメモリ管理の方法と、Intel64 での管理の方法は互換性があり、互換モードでPAE対応のアプリケーションを使って 4GB以上のメモリを使う、と言う事もできる。

より多くのメモリを利用するためにも、64bit対応の Windows が必要になった訳だ。
64bit の Windows は IA-32eモードで起動、通常はロングモードで実行しつつ、アプリケーションの実行に関しては互換モードを利用する。その間 Win32APIの呼び出しなどについては、Wow64という仕組みで対応している。


...単に、DTKと PC-BIOS, EFi の話をするだけのつもりが、余談が非常に長くなってしまった...。

2015/04/10

Windows7 でシステムパーティションを削除する

32bit のWindows7 を通常の手順でインストールすると、100MBのパーティションが起動ディスクの先頭に用意される。

このパーティションはシステムパーティションと呼ばれており、マイクロソフトのページにその概要が記載されている。
UNIX的な感覚からするとちょっと違和感を感じるかも知れないが、起動時にのみ参照されるこのパーティションが「システムパーティション」であり、いわゆる C:ドライブは「ブートパーティション」と呼ばれている。

このパーティションにはブートローダやその設定などが格納されており、システム保護の観点からドライブ名もつけられず、GUIからは削除できないようになっている。また、BitLocker を使う際にはそのためのモジュールもここに格納される。BitLocker を使う場合、このシステムパーティションの存在は必須と言える。

さて、仮想環境上ではTPMが使えない兼ね合いから BitLocker を使うのは現実的ではない。
(使えなくはない。たとえばこのページを参照。)
Fusion や Workstation で1台2台をセットアップするなら別にどうでもいいが、Horizon View などで何十台何百台と Windows が実行される場合、100MBとはいえ決して馬鹿にできない浪費になるだろう。

では、このシステムパーティションなしのインストールができるのか?というと、これは可能だ。これもまた、マイクロソフトのページに記載されている。
手順としては以下の通り

  1. Windows7 のメディアで起動􏰀
  2. 最初の画面で SHIFT-F10 を押し、コマンドプロンプトを表示􏰀
  3. diskpart コマンドを起動、1パーティションでパーティションテーブルを作成
  4. コマンドラインを終了􏰀
  5. インストール時に作成したパーティションを指定􏰀


Windows7 のインストーラの画面で SHIFT-F10 を押すと、下図のようにコマンドプロンプトが表示される。

ここで、diskpart コマンドを実行し、先にパーティションを作ってしまうのだ。


その後、exit コマンドを実行し、インストーラに戻り、インストールを継続する。
通常の新規ディスクの場合、インストール先の選択が「ディスク0 未割り当て領域」となっているのだが、すでにパーティションが作成されているのでその代わりに「ディスク0 パーティション1」が選択しに現れる。

あとはインストールを続行する。
結果、下図のように全体で1ドライブとなる。

ここで作成されたシステムパーティションなしの 32bit Windows7 をHorizon View の ViewComposer でリンククローンで展開したが、全く問題なく利用できている。

シンディスクの場合、システムパーティションのほとんどは未使用のため実ディスク領域は割り当てられない、このため、別にあってもなくてもディスク消費に大差はない。しかしシックディスクでフルクローンの場合は、これで1仮想マシンごと100MBが回収できる。決して馬鹿にできない差異になるだろう。

● 64bit Windows7 ではどうなるか?

なお、64bit Windows7 の場合、以下のようになる。


NTFSのシステムパーティションではなく、FAT32の「UEFIシステムパーティション(ESP: EFI System Pertition)」になる。
これは UEFI で定義された領域で、(U)EFI を使用するコンピュータでは必ず作成される。
その代わりに Windowsによるシステムパーティションは作成されない。UEFI システムパーティションがその代わりとなり、BitLocker のモジュールなどが導入されるためだ。


UEFI 周りについては、また別途説明する。


2015/04/05

pvSCSI で性能が上がるか?

どこぞの話で突っ込みを入れたときに調べた事を書いておく。

pvSCSI とは vSphere のディスクIOに対する準仮想化ドライバの事で、vSphere がサポートする一部のOSにて利用できる。どのOSで利用できるかは KB 1010398 を参照してほしい。

さて、そこの話、端的に言えば「pvSCSI も LSI Logic もIOPS変わんない」と、暗に pvSCSI を使えないと示唆するようなことだった。

そう、よく勘違いされるが pvSCSI は (vmxnet3 も) ただ「IO性能を上げるもの」ではない。これは pvSCSI の出始めに発表された、このホワイトペーパーを見ればわかる。

英文を読まずとも表だけ見れば LSI Logic と pvSCSI で性能差がほとんどない事に気がつく。
一方、差が出ているのは「CPIO」と呼ばれる項目だ。ドキュメント中に説明があるがこれは「a unit of cycles per I/O」、すなわちそのIOの間にどれだけ CPUが消費されたか、になる。

考えてみれば当たり前の話だ。pvSCSI でも LSI Logic でも、仮想環境上のメモリに存在するデータを、VMkernel に渡して実際のストレージIOにする部分に大きな差はない。異なるのはそのためにLSI Logic という実際のハードウェアの手順をエミュレートするのか、そういう細かいところを省くか、だけになる。LSI Logic のデバイスドライバをそのまま使えるようにするという手間が省ける分、CPUサイクルが削減され、CPU負荷が下がる、というのが pvSCSI の本質だ。

結果として IOしている間のCPU負荷が下がる。

これは IOPS をはかるベンチマークではあまり意味をなさないが、CPUがそれだけあいているという事はアプリケーションがさらに演算を行ったり、pvSCSI以外のデバイスに対するIOを行うだけの余地が増える。ワークロードのスループット全体を見れば、向上が行われる、という次第だ。

ベンチマークの結果値だけを見ているとこうした事はわからない。
数字の多寡を気にするのではなく、システム全体を俯瞰し、それがどういう位置づけになるかを忘れない事だ。








2015/03/12

アップグレードしたOSはカスタマイズできない

所用があり WindowsServer 2012 R2 をいくつかテンプレートから展開していたのだが、カスタマイズ仕様で指定した設定がなされていないことに気がついた。

該当のマシンにログオンし、 sysprep のログを見たところ、以下のメッセージが表示されていた。なお、sysprep のログについてはこちらのKBに記載がある。
[0x0f0036] SYSPRP spopk.dll:: Sysprep will not run on an upgraded OS. You can only run Sysprep on a custom (clean) install version of Windows.
...ああ、なるほど。このテンプレート、そもそもは WindowsServer 2012 で、R2 を後から適用したため「アップグレード」となってしまったわけだ。2012 を展開する用がなかったのでそのことをすっかり失念していた。

対処としては二つある。一つは、素直にOSを新規インストールし直すことだ。
今回はこちらを採用した。理由は簡単で、Windows.old が残っており、削除がやっかいで、そのうえ肥大した VMDK の領域回収を考えると、時間はかかるがほったらかしておけば終わる入れ直しの方が楽だったからだ。

もう一つは、アップグレードであるというフラグをつぶしてしまうことだ。
詳細はこちらのページなどを参照してほしい。

レジストリを操作するだけなので時間は短くて済む。
しかし、そもそもなぜアップグレードしたOSだと sysprep を拒否するようになってるかがわからないので、後々で面倒を抱えたくないというのもあり、この手を取らなかった。

2015/03/09

Horizon View Connection Server で「サービスが正常に機能していません」が表示される。

Horizon View の Connection Server を複数立てたとき、ダッシュボードの接続サーバに「サービスが正常に機能していません」というメッセージが表示されることがある。
なお、英文だと「The service is not working properly. 」の模様。

「サービスが正常に機能していません」のエラーメッセージ
そう言われましても...、って気分になる

KBを探してみても vCenterServer にこのメッセージが出る場合の記載ぐらいで、ログもそれらしいエラーがなく困っていたが、ようやく原因を特定できた。

二つの ConnectionServer で時刻同期がうまくいっておらず、時間が1分程度ないしそれ以上ずれていると、このメッセージが表示される。

一方が ServerCore で構成していたのだが、どっかのタイミングで Windows Time が起動されてなかったらしく、時々ずれがこの時間を超えて、なぜか赤くなる、を繰り返していたのだ。

わかってしまえば対処は簡単で、時刻同期がちゃんと実行されるようにするだけだ。

今回実施したのは、以下の通り
w32tm register
net start "Windows Time"
w32tm /config /update /syncfromflags:DOMHIER
w32tm /resync /rediscover
最初の行でサービスとして登録、二行目で起動する。
起動しないとそれ以降のコマンドが打てないので、とりあえず動かしておくのだ。

3行目でドメインコントローラから時刻をとるように設定を強制、4行目で同期を強制している。( どうも /redisover をつけないと同期先を古い設定のまま見に行くことがあるので注意。)

1,2 分程度のずれなのでこれで済んだ。
大きくずれている場合の同期方法については適当に調べてほしい。

なお、同期状況の確認は
w32tm /monitor
を実行するのが手っ取り早く、時間は
echo %time%
としたほうが、time コマンドより楽だ。
time コマンドだと、そのまま実行すると時刻の設定をしようとし、/T をつけると秒以下を表示してくれないため。

いろいろ探しても該当事例を見つけられなかったので、念のために記録しておく。















2015/02/23

ESXi に使うべき フラッシュメディアのサイズ

ESXi 5.5 のインストールには最低 1GB のストレージ容量が必要で、scratch を配置する場合は 5.2GB 以上、となる。

これは ESXi のマニュアルに記載されている。

さて、ではサイズが異なると ESXi のインストレーションはどう変わっていくのだろうか?
VMware Fusion 上に ESXi をインストールし、その時の VMDK のサイズを変えて試してみた。

● 1,2,4GB の場合

これら 5.2 GB 未満のメディアの場合は、まったく同じサイズで5つのパーティションが作成される。

ID 開始セクタ 終了セクタ サイズ 形式(FS) 用途
1 64 8191 4MiB systemPartition (FAT32) EFI
5 8224 520191 250MiB linuxNative (FAT32) /boot
6 520224 1032191 250MiB linuxNative (FAT32) /altboot
7 1032224 1257471 110MiB vmkDiagnostic Coredump
8 1257504 1843199 286MiB linuxNative (FAT32) /store

IDはパーティション番号を意味する。
1は要するに EFI システムパーティションで、FAT である。
5 が実際の ESXi のシステムが入ってる bootbank で、6 は altbootbank である。
7 は診断パーティションとも呼ばれているもので、要するにコアダンプ用だ。
8 は visorfs の /store にマウントされるパーティションで、VMware Tools のインストール用 CDイメージなどが格納されている。

linuxNative とGUIDで記載されているパーティションが何故 FAT32かというと、GUIDパーティションテーブルでは、Windows のパーティションと Linux のパーティションに同じGUID が割り当てられており、区別できないからだ。

全体で1GiB も使ってないが、これは 1,2,4 GB どの場合も同じだった。
つまり、5.2GB 未満では、どの容量のメディアを使おうと、先頭 0.9 GiB程度しか使われない訳だ。

● 8GB の場合

さて、8GBのメディアにインストールすると、こうなる。

ID 開始セクタ 終了セクタ サイズ 形式(FS) 用途
1 64 8191 4MiB systemPartition (FAT32) EFI
5 8224 520191 250MiB linuxNative (FAT32) /boot
6 520224 1032191 250MiB linuxNative (FAT32) /altboot
7 1032224 1257471 110MiB vmkDiagnostic Coredump
8 1257504 1843199 286MiB linuxNative (FAT32) /store
9 1843200 7086079 2.5GiB vmkDiagnostic 拡張Coredump
2 7086080 15472639 4GiB linuxNative (FAT32) /scratch
3 15472640 16777182 約0.6GiB
(残り全部)
vmfs datastore01


前半のパーティションはそのままで、あらたに9, 2, 3 の三つのパーティションが追加された。

ID:9 はESXi 5.5 で新たに用意されたコアダンプパーティションだ。従来の110MiBのダンプでは全てを取りきれないため、2.5GBもの容量が確保されている。
ID:2 がいわゆる Scratch パーティションで、ログなど様々な情報が格納される。
このパーティションが存在しないと、ESXi が警告を発するのはご存じの通りだ。

ID:3 は VMFS であり、datastore1 となる部分だ。ここは、ディスクの残り領域がすべて割り当てられる。8GBのメディアの場合、600MiB程度が VMFSとして確保される。

ここであれ?っと疑問に思われた方は正しい。そう、VMFS は 600MiB なんてサイズでは構成できない。vSphereClient から datastore1 を削除した後、再作成は失敗する。

この制限以下の小さな VMFS は、インストール時にのみ現れる特別なものらしい。

閑話休題、scratch が必要な場合は 5.2GB 以上のメディアを使うようドキュメントにはあるが、0.9GiB + 2.5GiB(拡張ダンプ) + 4GiB(scratch) では、7.4GB 程度が必要に見える。

そこで、6GB の場合を試してみた。

● 6GB の場合

6GB では、パーティションテーブルはこうなった


ID 開始セクタ 終了セクタ サイズ 形式(FS) 用途
1 64 8191 4MiB systemPartition (FAT32) EFI
5 8224 520191 250MiB linuxNative (FAT32) /boot
6 520224 1032191 250MiB linuxNative (FAT32) /altboot
7 1032224 1257471 110MiB vmkDiagnostic Coredump
8 1257504 1843199 286MiB linuxNative (FAT32) /store
2 1843200 10229759 4GiB (FAT32) linuxNative (FAT32) /scratch
3 10229760 12582878 約1.1GiB
(残り全部)
vmfs datastore01


ID9 の拡張ダンプパーティションが消えている。その分、余りが増えるため VMFS 領域が拡大しているのが分かる。VMFS領域を抜くと、約 4.9 GiB になる。つまりは、SI単位系で言うところの約 5.2GB である。厳密に言うなら、scratch の最終セクタが 10229759 であり、1セクタが 512バイトのため、5237636608 バイトが必要である。これを1024 で割っていくと 4.87GB となり、1000 で割ると 5.2GB となる訳だ。

そして余った分が VMFS の領域になる。
もし、余りが 2.5GiB 以上あれば、拡張ダンプパーティションが作成され、そこからの残りで VMFS が作成される。


共有ディスクに、複数 ESXi のログまとめて管理したり、syslog で飛ばして LogInsight を使う、とかでも無い限り、scratch はあるに越したことない。

このため、おとなしく 5.2GB以上、実質的には 8GB のフラッシュメディアを用意しておくのが正解、となる。

なお、こちらのKBには面白いことが書いてある。
リテール購入品の 16 GB 以上の USB フラッシュ ドライブを使用すると、「予備の」フラッシュ セルで起動メディアを長持ちさせることができるのでお勧めしますが、コアダンプの拡張パーティションの保持には 4 GB 以上の高品質ドライブがあれば十分です。
16GB にしておくことで、ウェアレベリングが効いてより長持ちすると言うことだ。
後半の文章が謎だが、8GB の誤植ではないかと思われる。





2015/02/20

vExpert 2015 受賞しました

今年も vExpert 2015 を受賞できました。ありがとうございます。

http://blogs.vmware.com/vmtn/2015/02/vexpert-2014-announcement-2.html