2008/11/03

NTPDとIP multicast

以前このブログでNTPDについて書いた。この中で、『注意!IPマルチキャストに関して訂正・本編』という記事を書いたが、これに間違いが見つかったので訂正する。
Ntpdは、その認証機構がIPアドレスと結びついているため、マルチキャストパケットを送信する際に、送信元となる自分自身のIPアドレスをntpd自身が明示的に知る必要があります。そのため、IPマルチキャスト用のソケット(socket)を取得する際、そのIPマルチキャストアドレス(通常なら 224.0.1.1)で経路情報(routing table)を引き、得られたネットワークインターフェースのIPアドレスを送信元IPアドレスとするようです。
この赤字の部分が誤り。
まず、マルチキャストサーバモードの時の動作だが、manpageの記述も間違っている。

broadcast
For type b and m addresses (only), this command mobilizes a persistent broadcast mode association. Multiple commands can be used to specify multiple local broadcast interfaces (subnets) and/or multiple multicast groups. Note that local broadcast messages go only to the interface associated with the subnet specified, but multicast messages go to all interfaces.
IPマルチキャストを使う場合、つまり、/etc/ntp.confの中で、broadcastコマンドにIPマルチキャストアドレス(m address)を指定した場合、すべてのインターフェースに対してマルチキャストメッセージが送信される、となっている。実際には、この通りにはならない。
実際には、複数のインターフェースを持っている場合には、マルチキャストメッセージが送信されるのは、それらのインターフェースの中の一つのみ。しかも、それはip route showで表示されるルーティングテーブルとは無関係の様だ。
この現象は、NTP BugzillaBug ID 785として扱われているようだ。バージョン4.2.6辺りで修正されるのかもしれない。

2008/11/02

virt-clone

CentOS 5.2上で仮想化パッケージ(@virtualization)をインストールすると、virt-cloneコマンドがインストールされる。
$ rpm -qf `which virt-clone`
python-virtinst-0.300.2-8.el5
$
このコマンドは、Xen DomUを複製するのに使用する。
$ virt-clone --help
usage: virt-clone [options]

options:
-h, --help show this help message and exit
-o ORIGINAL_GUEST, --original=ORIGINAL_GUEST
オリジナルゲストの名前か uuid:
状態は停止でなければなりません
-n NEW_NAME, --name=NEW_NAME
新しいゲストの名前
-u NEW_UUID, --uuid=NEW_UUID
クローンゲストの新しい uuid:
省略値はランダムに生成された UUID です
-m NEW_MAC, --mac=NEW_MAC
クローンゲスト用の固定 MAC アドレス。・
略値はランダムに生成されます
-f NEW_DISKFILE, --file=NEW_DISKFILE
ディスクイメージとして使用される、新
ゲスト用の新ファイル
--connect=CONNECT URI でハイパーバイザーに接続
--force-copy=TARGET 装置のコピーを強制する (例えば 'hdc'
が読込みのみの cdrom 装置なら、--force-
copy=hdc)
--nonsparse クローニングのディスクイメージに疎ら
なファイルを使用しないでください
--preserve-data 新ファイルを新ゲスト用のディスクイメ
ージとして使用するよう保存する
-d, --debug デバッグ情報を印刷
--force Do not prompt for input. Answers yes where applicable,
terminates for all other prompts
$
実際に使ってみよう。まず、元となるDomU dc0がインストールされている。
[root@fs1 xen]# ls /etc/xen/dc*
/etc/xen/dc0
[root@fs1 xen]# cat /etc/xen/dc0
name = "dc0"
uuid = "d9911ef3-1919-9972-fe4c-96c7ece17f7b"
maxmem = 256
memory = 256
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [ ]
disk = [ "phy:/dev/VolGroupXX/LogVolDc0,xvda,w" ]
vif = [ "mac=00:16:3e:1d:89:00,bridge=br4000" ]
[root@fs1 xen]# ls /dev/VolGroupXX/LogVolDc*
/dev/VolGroupXX/LogVolDc0
[root@fs1 xen]# lvs /dev/VolGroupXX/LogVolDc0
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
LogVolDc0 VolGroupXX -wi-a- 4.00G
[root@fs1 xen]#
これをdc1という名前で複製しよう。イメージを格納する論理ボリューム(logical volume, LV) LogVolDc1をボリュームグループ(volume group, VG) VolGroupXX上に作成する。
[root@fs1 xen]# lvcreate --name=LogVolDc1 --size=4G VolGroupXX
Logical volume "LogVolDc1" created
[root@fs1 xen]#
コマンドvirt-cloneで複製を実行する。
[root@fs1 xen]# virt-clone --original=dc0 --name=dc1 --file=/dev/VolGroupXX/LogVolDc1
Cloning from /dev/VolGroupXX/LogVolDc0 to /dev/VolGroupXX/LogVolDc1
Cloning domain... 100% |=========================| 4.0 GB 03:23
[root@fs1 xen]#
イメージをコピーするため、実行に三分半弱かかっている。
DomU dc1の定義ファイルは以下の様になっている。
[root@fs1 xen]# cat /etc/xen/dc1
name = "dc1"
uuid = "ce08f29d-9006-c607-7891-786ffa421ca7"
maxmem = 256
memory = 256
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [ ]
disk = [ "phy:/dev/VolGroupXX/LogVolDc1,xvda,w" ]
vif = [ "mac=00:16:3e:1c:2f:6e,bridge=br4000" ]
[root@fs1 xen]#
DomU名の他に、UUIDやMACアドレスが変更されていることが解る。
当然、このDomUを実行することもできる。
[root@fs1 xen]# xm create -c dc1