VMWare for Windows NT and Windows 2000 に関する(いい加減な)話題


某氏(言わずもがな)から要望があったので。ただ、アーカイブとかパッケージは面倒くさいのでとりあえず後回し。

ゲストOSなLinuxの時計を合わせる方法

背景

Linux上では、RTCではなくタイマ割り込みに基づき時刻が管理されているが、VMWare上では、そのタイマ割り込みの周期が一定なものではないため、システム時計が大きく狂う(大抵は遅れる)。

方法

ntpdateを数秒間隔で動かすという方法も考えられるが、ここではVMのRTCを参照することで数秒間隔でシステム時計を更新する方法を示す。なお、以下ではDebian 2.2がインストールされているものとする。

まず、

!/bin/sh

poll() {
        while :
        do
                /sbin/hwclock --hctosys --local
                sleep 3
        done;
}

test -x /sbin/hwclock || exit 0

case "$1" in
        start)
                poll &
                ;;
        stop|restart|force-reload)
                ;;
        *)
                echo "Usage: $0 {start|stop|restart|force-reload}"
                exit 1
                ;;
esac

exit 0

という内容のファイルを/etc/init.d/adjtime.localという名前でセーブし、また/etc/rc2.d/にそれを指すシンボリックリンク(ntpdateがS22だったので、私はS23adjtime.localという名前にしてみた)を作成する。これによりVMのRTC(おそらくホストOSの時計を基準としているはず)を参照し、3秒毎(この周期に特に根拠はない)に時計のずれを補正する。

この手法では、VMのRTCを合わせる(ホストOSとの時刻の差が記録されるのではないか)必要があり、そのために別途
ntpdate ntphost; hwclock --systohc --local
を実行しておく。さらに/etc/init.d/hwclock.shを指す、/etc/rc0.d/K25hwclock.shと/etc/rc6.d/K25hwclock.shという名前のシンボリックリンクがあり、終了・再起動時にVMのRTCを不正確なシステムクロックの時間で書き戻すため、再起動を繰り返すたびに時刻が狂っていく、という現象が生じる。そこで、

mv K25hwclock.sh k25hwclock.sh

等によって、その動作を抑止する。

さらに、システム時刻が設定される間の遅れが気になるのであれば、adjtimexパッケージを導入し、-cオプションにより、補正値を求め、/etc/adjtimexのTICKとFREQを書き換えることで、時計の進み加減を調整する。

マルチホーム(複数NIC)環境での設定

背景

ネットワークをhost-only modeにすることで通常マルチホーム(1つのホストに複数個のNICがある状態)となるが、NT/2000のデフォルトでは、内部の仮想セグメント側のNetBIOS名も、外側のインタフェースから見えてしまう。そのため、外部のネットワークに接続されている他のマシンが内側のアクセス不能なIPアドレス側に接続しようとして失敗する。

方法

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\SingleResponse

という名前のDWORD値を作成し、それを1にすればよい。

詳細についてはKB(Q120624)を参照のこと。


Copyright (C) 2000 Nobuyuki NISHIZAWA
nishi@gavo.t.u-tokyo.ac.jp