[ トップページ / メモ書きリスト ]

VMWare ゲストの Linux からホストの Windows ファイルを直接編集


  1. Linux 側から Windows のファイルを直接編集する動機
  2. 確認
  3. VMWare の機能による共有設定 (不採用)
  4. Windows ファイル共有と Linux の Samba クライアントによる共有

Linux 側から Windows のファイルを直接編集する動機

Linux の rsync によるバックアップシステムを、そのまま Windows に利用したい。

確認

まず、一度再起動する。 今度は /etc/init.d/vmware-tools から /usr/sbin/vmware-guestd が 起動されていることを確認する。また、ホスト OS との共有に用いる モジュール "vmhgfs" が呼ばれているか、sudo lsmod で確認する。

VMWare の機能による共有設定 (不採用)

一度ゲスト OS を停止し、VMWare の「仮想マシンの編集」の「オプション」タブ の「共有フォルダ」から、「追加」を選択することでマウントするフォルダを 選択することができる。

ここで設定されたフォルダは、Linux 内の

/mnt/hgfs

以下にマウントされる。(「名前」で付けられたものが、ディレクトリ名となる)。

ただし、この方法の問題点として、

((* 日本語が化ける *))

という問題がある。マウント時のオプション指定をどこですればよいのか よく分からないため、解決できず。(将来のバージョンアップで解決 されることを期待…)。

どーしても解決したい場合は、Linux を UTF-8 対応にする方法もあるが…。

…とそんなことになってしまったので、Windows ファイルを Linux から バックアップ等するのは、Windows のファイル共有と Linux の Samba クライアントの利用によることにした。

詳しくは Windows ファイル共有と Linux の Samba クライアントによる共有 を参照のこと。

Windows ファイル共有と Linux の Samba クライアントによる共有

しょうがないので、Windows でファイル共有し、それを Linux 側から Samba で読むようにする。 ただし、この際の要望として、

というものがある。

Windows での設定

Windows によるファイル共有設定

初期状態だと、共有したフォルダは誰からも見えるという極めて 便利で極めてアンセキュアな状態になっているので、アクセス制限 を行えるようにする。(ただし、XP で共有フォルダを利用するには 「SERVERサービス」が開始されている必要がある。詳しくは 共有フォルダが設定できない・接続できないときには を 参照せよ)。

次に、各フォルダを共有できるようにする。

共有フォルダが設定できない・接続できないときには

まず、<URL:http://homepage2.nifty.com/winfaq/networkchecklist.html> を確認せよ。

また、もしも以下のようなメッセージが表示された場合には、 「SERVER サービス」が停止している可能性がある。 「スタート」→「ファイル名を指定して実行」で、"SERVICES.MSC"と入力し、 OKして「サービス」を起動する。そこで「Server」サービスが開始されているか 確認する。もしも開始していない場合は右クリックで「開始」を選択して サービスを開始する。

 
****** を共有しようとする時にエラーが発生しました。
サーバー サービスが開始されていません。

今回は共有リソースは作成されませんでした。

Windows ファイアウォールの設定

上記の共有設定の画面の一番下に「Windows ファイアフォールの 設定を表示します」というリンクがあるのでクリックする。

ここでは、以下のように設定を行う。

ZoneAlarm によるガード

一応上記の Windows ファイアウォールによる設定で十分ではあるが、 なんらかのファイアウォールソフトでもアクセスを制限しておくと より安心である。ここではフリー版もあり、最近は結構機能が 充実している ZoneAlarm を 用いる。実際には、「ZoneAlarm のコントロールセンター」を表示し、 「ファイアウォール」の「ゾーン」において、VMware のネットワーク のゾーンを「トラスト」にし、その他を「インターネット」にすればよい。

Linux 側での設定

次に、上記の設定で VMWare 内からのみアクセスできるようになった フォルダをマウントする方法を記す。

Windows の共有フォルダをマウントする方法

アクセスには Samba を用いるので、まず smbfs をカーネルが認識 する必要がある。よって、もしもカーネルが smbfs を認識していない ならば、カーネルを再構築すること。ただし、ここではカーネル再構築 の詳細に関しては触れない。詳しくは <URL:http://www.ep.sci.hokudai.ac.jp/~morikawa/memo/vmware_samba.txt> などを参照のこと。

次に、smbfs パッケージをインストールする。クライントとして Samba を利用するなら smbclient もインストールしておけば良いが、 以下では smbfs としてマウントしてしまい、あとは Linux のユーティリティ で共有フォルダ内を操作する。

smbfs をマウントする場合は以下のようにする。

# mount -t smbfs -o username=morikawa,uid=morikawa,gid=morikawa,rw,\
  iocharset=euc-jp,codepage=cp932,fmask=664,dmask=775 \
    //code/'My Documents' /mnt

(見易さのため、上記のように記述したが、一行目の gid=morikawa, と二行目の iocharset=euc-jp の間に空白やタブを挟んでは ならない。)

-o の次に続く文字列 (区切りはカンマ) はオプションである。

username=morikawa はユーザ名である。 Windows の共有フォルダでアクセスを許可するユーザ名を入力する。

なお、さらに password=XXXXXX を加えておくと、 パスワードもコマンドラインで入力できる。 なお、この設定がない場合にはプロンプトでパスワードが要求される。

これらユーザ名とパスワードは、あるファイル file に書き込んでおいて credentials=file と指定することもできる。 その際の file の書式は以下のとおりである。

username = <value>
password = <value>

uid=morikawa,gid=morikawa を用いることで、マウントした ディレクトリ以下の UID, GID を明示的に設定することもできる。 mount コマンドは root でしか行うことができないが、これによって 一般ユーザに書き込みを許可することが可能である。

rw は読み書き可能なようにマウントするという効果がある。 もしも読み込み専用にしたければ、 ro オプションを 付ける事。

fmask=664,dmask=775 はマウントしたファイルやディレクトリ のパーミッションを決めるものである。fmask がファイルの、dmask がディレクトリのパーミッションを決める。

iocharset=euc-jp,codepage=cp932 は文字コードを変換する ためのオプションである。文字コードが SJIS な Windows のファイルや フォルダを Linux でも見えるようにするにはこのオプションが必要である。

//code/'My Documents' はマウント先のコンピュータとフォルダを 指定している。ここでは、共有先のコンピュータが code 共有フォルダ名が My Document である。 なお、Windows には良く出てくる空白を含むフォルダは 以下のように指定すると良い。

'My Documents'
My\ Documents

詳しくは <URL:http://www.samba.gr.jp/project/translation/3.0/htmldocs/smbmount.8.html> を参照のこと。

fstab の設定 (失敗談)

一般ユーザでもマウントを可能にするように、fstab に記述を行いたかったが、 ファイルタイプとして smbfs を選択すると、オプションは全てそのまま smbmount に渡されるらしく、一般ユーザがマウントを可能にする users オプションは指定できない。(強引に記述すると、iocharset や codepage などが無視され、文字が化けてしまう)。

なお、root でのマウントでよければ、以下のように記述すると良い。 下記では改行しているが、実際には改行しないこと。

//code/My_Documents	/home/morikawa/Windows/My_Documents	smbfs
username=morikawa,rw,uid=morikawa,gid=morikawa,fmask=664,dmask=775,codepage=cp932,iocharset=euc-jp
0	0

My_Documents の部分を書き換えれば、他のディレクトリにも応用可能である。

マウントとバックアップを行うためのスクリプトの作成

マウントとバックアップを行うための Ruby スクリプトを作成した。 要求仕様は以下のとおり。

実際に作成したものは以下にある。

/etc/samba/lmhosts の作成

上記では code をコンピュータ名とした。これは Windows 側の コンピュータ名であるが、仮に code.ep.sci.hokudai.ac.jp などの ホストが DNS から取得できてしまうと、それに対応付けられた IP アドレス へアクセスを試みてしまう。IP アドレスによる指定も可能であるが、 その際には Warning が表示されてしまう。解決するには /etc/samba/lmhosts にホスト名と IP アドレスの対応表を 書いておく。こちらは DNS の対応表よりも優先される。 例えば、 code が 192.168.8.1 である場合には、以下のように記述する。

#
# Samba lmhosts file.
#
192.168.8.1     CODE

(余談) 実際にバックアップために共有設定を行うフォルダ郡

以外でバックアップしておきたいもの (コピーなどの手間は できるだけ省いて)

シンボリックリンクを張ると、imjp81u.dic.lnk というファイルになってしまい、 実質的にコピーできないので、直接 C:\Documents and Settings\morikawa\Application Data\Microsoft\IMJP8_1 ディレクトリを共有可能にする。


Last Updated: 2006/10/02, Since: 2005/03/20 mailto: morikawa_email