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

NFS を利用して ゲスト OS 内の 2 つの Linux に home 領域を共有させる


  1. 概要
  2. nfs を用いた相互アクセス
  3. /home 用 (データ置き場用) 仮想ディスクの作成
  4. 仮想ディスクへのホーム領域のコピー
  5. もう一台のマシンの設定
  6. 現時点での状態
  7. ディスクを「圧縮」するために

概要

以下は、元々 1 つの VMWare 仮想ゲストシステムを 2 つに 分離し、それらを同時に、別々に起動してお互い通信できる状態にする ための方法である。

ゲスト OS は両方とも Debian GNU/Linux であり、ホスト OS は Windows XP Service Pack 2 である。 ゲスト OS のネットワークは NAT を用いている。

VMWare を起動前に行う方法

VMWare 起動後に行う作業

もう一つの VMware を起動

互いにアクセス可能かをチェックする。もしもお互いをホスト名で認識 したいのであれば、お互いの /etc/hosts にその設定を書き込んでおくと 良い。

nfs を用いた相互アクセス

nfs で相互アクセスを図る。本当は samba でも良かったが、samba は結構難しい ので、nfs でやってしまう。

カーネルの確認

パッケージのインストール

以下のパッケージをインストールする

nfs-kernel-server

以下のメッセージを読んでおく。

statd uses tcpwrappers                                                

The statd daemon uses tcpwrappers to control access.  To configure it,
use program name "statd" in /etc/hosts.allow and /etc/hosts.deny.     

メッセージの内容は、「statd というプログラムを使うので、それを hosts.allow と hosts.deny でアクセス制御してくれ」という意味である。

設定

/etc/exports が設定ファイルである。ここに、

/home/morikawa  woody.vir(rw,anonuid=40000,anongid=40000)

のように書き込む。これにより、

ことが設定される。

設定されたら、

/etc/init.d/nfs-kernel-server reload

によって設定を読み込むと良い。

マウント

もう一つのサーバ (ここでは woody.vir) からマウントを手動で行うには、

# mount -t nfs -o rsize=8192,wsize=8192 shadow:/home/morikawa /mnt

とすればよい。上記の -t nfs はファイルシステムを表し、 shadow:/home/morikawa はマウント先のホスト名、およびディレクトリ を、 /mnt はマウント先を表す。 rsize=8192,wsize=8192 は nfs コネクションを高速にするため、バッファサイズを大きくする指定である *1。 これでマウントと、NFS したディスクに書き込みが可能かどうかを チェックする。もしもうまくいったら、今度は /etc/fstab に以下の記述を加える。

shadow:/home/morikawa	/home/morikawa	nfs	defaults,user,noauto,rsize=8192,wsize=8192	0	0

これにより、ユーザが

mount /home/morikawa

または

mount shadow:/home/morikawa

とするだけで、マウントが可能になっているはずである。

/home 用 (データ置き場用) 仮想ディスクの作成

仮想ディスクへのホーム領域のコピー

上記ディスクを含むゲスト OS を起動する。

デバイス名の探査

dmesg でディスクのデバイス名を探す。 今回は /dev/sdb であったとして話を進める。

パーティションの作成

# cfdisk /dev/sdb

とする。すると、

領域テーブルが無いか領域テーブルの署名が不正です
ゼロテーブルで開始しましょうか [y/N] ?

と問われるので、y と返答する。

以下の手順でパーティションを作成する

アクセス速度はどうせあまり望めない上、昔の woody からもアクセス できることを考え、ext2 (デフォルト) にする。

最後に「書き込み」を忘れずに。

その後、一度リブートする。

ディスクをフォーマットする。

mke2fs を実行して、ファイルシステムを作成する

# mke2fs /dev/sdb1

マウントして、HOME 領域をコピー

# mount /dev/sdb1 /mnt

マウントできているか、df コマンドなどで確認。

# rsync --delete -avn /home/ /mnt/

でまずチェックして、よさそうなら、以下の本番コマンドを実行する。

# rsync --delete -av /home/ /mnt/

/dev/sdb1 を /home 領域に移行

まず、混乱が無いように、/dev/sda1 の方にある /home を /home.bk に変更する。なお、以降は全て root でログインして作業すること。

# mv /home /home.bk

/home を作成し、パーミッション、UID, GID を設定する。

# mkdir /home
# chmod g+w /home
# chmod g+s /home
# chgrp staff /home

/etc/fstab に以下の記述を加え、/dev/sdb1 が起動時に読み込まれる ようにする。

/dev/sdb1 /home  ext2 defaults  0 2

上記の空白は tab 文字で区切ること。

設定が終了したら再起動する。再起動後、/home 領域がちゃんとマウントされ、 一般ユーザなどもログイン可能かを調べること。

これで、/dev/sda に残っている /home.bk はいつでも削除可能である。 そのうち削除する。

もう一台のマシンの設定

もう一台も同じように利用できるよう、上記のように /home を /home.bk に移し、パーミッションを設定し、fstab を書き加える。

nfs-kernel-server の再設定

サーバ側の設定

/home ごと読み込まれるよう、/etc/exports の先の行を以下のように書き換える。

/home  woody.vir(rw,anonuid=40000,anongid=40000)

のように書き込む。これにより、

ことが設定される。

設定されたら、

/etc/init.d/nfs-kernel-server reload

によって設定を読み込むと良い。

クライアント側の設定

今度は /etc/fstab を以下のように書き換える。

shadow:/home	/home	nfs	defaults,user,noauto,rsize=8192,wsize=8192	0	0

user オプションがついているので原理的には一般ユーザでもマウントが可能 であるが、ユーザがログインしようとするとホームディレクトリが存在しない ため、いろいろ不便である。/dev/sdb1 がマウントできない場合には、root でログインし、

mount shadow:/home

とすること。

現時点での状態

ここまでの設定で現状は以下のようになっているはずである。

VMWare システムファイル

  1. 通常使用するシステム [Debian.vmx]
  2. woody として残しておく用のシステム [Debian_woody.vmx]

VMWare ディスクの数

  1. 通常使用するシステム用のディスク [Debian.vmdk]
  2. woody として残しておく用のディスク [Debian_woody.vmdk]
  3. home ディレクトリを格納するディスク [Debian_Home_Disk.vmdk]

通常運用

Debian.vmdk をシステムディスクとする Debian.vmx から Debian_Home_Disk.vmdk を呼ぶようにしておく。つまり、Debian.vmx を起動 した際には、何も考えずとも、home ディレクトリデータを格納する ディスクをマウントして置くようにする。

一方 woody 版の Debian_woody.vmx はもちろん Debian_woody.vmdk は ハードウェアとして接続するが、Debian_Home_Disk.vmdk は接続して おかない。(こうすると、上記の通常使用システムが起動している際に 起動しようとするとハングしてしまう)。 もしも woody 版を使用する場合は、Debian_Home_Disk.vmdk を接続 せずにシステムを起動する。(この際、起動時に「マウントできないぞー」と 言われるが、Ctrl-D で抜けること) そして起動したら、root でログインし、 mount shadow:/home で nfs 越し に home 領域をマウントする。

woody 版を主体として利用する場合

何らかの理由で通常使用しているシステムが利用できない (またはしない) 場合には、Debian_Home_Disk.vmdk を Debian_woody.vmx の方に接続して 起動する。(起動さえしていないのならば、Debian.vmx 側からはずす必要 は無い)。そうすると、上記の /etc/fstab が /dev/sdb1 を読み込むため、 通常運用版と同じように利用できる。

ディスクを「圧縮」するために

システムとホームの両方が存在したディスクから、ホーム領域を専用ディスク に移動したことにより、システムディスクとして必要となっていたディスク容 量が小さくなったはずである。しかし、VMWare では、普通に利用している限 り、一度大きくなったディスクは小さくならない。

必要なディスクの「圧縮」の方法については <URL:vmware_ver4_shrink.htm> を参照のこと。


*1 詳しくは mount(8) を参照のこと。


Last Updated: 2005/03/20, Since: 2005/03/20 mailto: morikawa_email