2008年 05月 12日
準仮想化SUSE on SUSE+XEN でUSBメディアを認識させる。
SLES10sp1 で準仮想化した SUSE Linux Desktop (SLED10sp1) に USB メモリを認識させる方法です。Google で検索するより、さすが Novell です。
support.novell.comの充実しているところにはノベルというメーカーの力強さ、底力を感じます。
XEN: Mounting CD-ROM's and USB devices in para-virtual DomU's using command line tools
という文書がありましたので、この手順でUSBのメモリキーを認識させて書き込みを行う手順を説明します。同じく CD-ROM を認識させる手順もあるので参考にするといいでしょう。
XEN 仮想化された SUSE のシステムをDomain-U のネットワークサービスとして使うと、外部からのアタックに備えてさまざまなプロテクトを掛けます。またCPU本体(Domain-0)はネットワークからまったくアクセスできないように設定しておけば、装置全体がアタックを受けることもありません。
ただしそれだけ強固なシステムを作ると、中のログを拾ったり、ウェブサーバーのコンテンツを修正したい場合など、非常に不便です。かといってそのためだけにポートを開放するのも危険なので、サーバールームから直接外部メディアにアクセスしたいという欲求が出てきます。
- Domain-0側の動き -
linux-c63e:~ # fdisk -l
Disk /dev/sda: 250.0 GB, 250058268160 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 276 12024 94373842+ f W95 Ext'd (LBA)
/dev/sda3 14 275 2104515 82 Linux swap / Solaris
/dev/sda4 * 15680 30401 118254465 83 Linux
/dev/sda5 276 11241 88084363+ 83 Linux
Partition table entries are not in disk order
Disk /dev/sdb: 8086 MB, 8086617600 bytes
255 heads, 63 sectors/track, 983 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 * 1 984 7897056 6 FAT16
Partition 1 has different physical/logical endings:
phys=(982, 254, 63) logical=(983, 36, 12)
※ fdisk -l で見ると /deb/sdb がUSBメモリのようです。普通に売っている 8Gb のスティックですが fat32 でフォーマットされています。なぜか FAT16 と見ていますが...
linux-c63e:~ # xm block-attach sled10x1 phy:/dev/sdb xvde w
※ xm block-attach コマンドで Domain-U(sled10x1) に仮想デバイス xvde を書き込みモード(w) でアタッチします。
-Domain-U 側の動き-
- Domain-0 で xm block-attach を行う前です。
linux-kq77:~ # ls /dev/x*
/dev/xconsole /dev/xvda /dev/xvda2 /dev/xvdc
/dev/xvc0 /dev/xvda1 /dev/xvdb
- この間に xm block-attach を実行し xvde デバイスをアタッチさせます。
linux-kq77:~ # ls /dev/x*
/dev/xconsole /dev/xvda /dev/xvda2 /dev/xvdc /dev/xvde1
/dev/xvc0 /dev/xvda1 /dev/xvdb /dev/xvde
- 新しい xvde という名前のデバイスが作成されます。それではマウントしてみましょう。
linux-kq77:~ # mount -t vfat /dev/xvde1 /media/usb
linux-kq77:~ # ls /media/usb
dsc05516.jpg
- USB のファイルが見えます。firewall のログを書き込んでみましょう。
linux-kq77:~ # cp /var/log/firewall /media/usb/
linux-kq77:~ # ls /media/usb
dsc05516.jpg firewall
- 書き込みもできました。マウントを解除します。
linux-kq77:~ # umount /dev/xvde1
linux-kq77:~ # ls /media/usb
linux-kq77:~ #
- umount できたのでファイルはありません
- Domain-0側の動き -
-Domain-0 側から仮想ドライバ xvde をデタッチします。
linux-c63e:~ # xm block-detach sled10x1 xvde
linux-c63e:~ #
-Domain-U 側の動き-
- Domain-U 側で ls /dev/x* を実行すると、先ほど見えた /dev/xvde が消えます。
linux-kq77:~ # ls /dev/x*
/dev/xconsole /dev/xvda /dev/xvda2 /dev/xvdc
/dev/xvc0 /dev/xvda1 /dev/xvdb
なぜかはわかりませんが Domain-0 側で ls しても Domain-U から書き込んだファイルは見えませんでしたが、ファイルそのものは Windows PCにスティックを挿すと正しく読み込むことができました。
こういう機能は圧倒的に VMware が充実していますが、何十万円もする VMware で構築するより、数万円でアクティベートできる SLES10 の方が圧倒的にコストパフォーマンスは高いと思います。
-検索キーワード-
SUSE10sp1 SLED10sp1, SUSE10, SUSE, XEN, 順仮想化, paravirtual XEN, USB Memory, USBメモリ認識, CD認識、リムーバブルメディア、書き込み、読み込み、Domain-U, xm block-attach, xm block-detach,
非番のエンジニア
SLES10 SP2はGold Master Candidate。ネットワークがらみの挙動不審のため、これを待つ!
面倒でも同じテクニックは CD・DVD などでも使えます。