甘いぞvbd.

二つ以上の Domain-U で,同じディスクを使おうとするときの話.
いずれか一つのドメインでも writable にすると,

Error: Device 768 (vbd) could not be connected.
Device /dev/sda is mounted in a guest domain,
and so cannot be mounted now.

とかいうメッセージで拒否される.全てが readonly のときは,エラーは出ない.

まあ危ないのでやめとけという,エラーメッセージの気持ちはよく解る.
でも,複数のHVMドメインを一つのディスクで賄いたいというのは割とあるはず*1.Domain-Uではxvdを上手く使って逃げられる場合でも,HVMでは,パーティションテーブルが無いとブートアップが困難だ.
それぞれのHVMドメインが同じパーティションにアクセスしなければ,別段の問題になるとも思えない.


で,あれこれ悩んだ上の逃げ道が,これ.

# losetup /dev/loop0 /dev/sda

その上で,一つのドメインの hda を phys:/dev/sda,hda,w とし,別のドメインの hda を phys:/dev/loop0,w とする.

Xenのvbd は,/dev/loop0 と /dev/sda の物理的実態が同一であるとは見抜けない.甘い,甘いぞ,vbd.


もちろん,各ドメインがアクセスするパーティションを厳格に管理しないと,酷い結果が待っていることは言うまでもない.as your own risk.

*1:nested partition table が解法としては有名だけれども,私が試した範囲では,上手くいかなかった.それにnestedにしてしまうと,トラブル時の対応が難しくなるのが目に見えている.VistaNTFSLinuxから吸い出すなんて,考えるだけでも勘弁してほしい話だ.