NFSのアンマウントに失敗し、シャットダウンできない

2008/08/02PC::Linux/BSD

nfsマウントを行うようになってからKubuntuがシャットダウンできなくなるようになってしまいました。
具体的にはシャットダウンシーケンスで以下のようなエラーをコンソールに吐いて止まってしまいます。

Network Manager: <info> Caught termination signal
Network Manager: <debug> [1217677603.026218] nm_print_open_socks(): Open Sockets List:
Network Manager: <debug> [1217677603.026369] nm_print_open_socks(): Open Sockets List:
Network Manager: <info> Deactivating device eth0.
                                                                [OK]
Network Manager: <WARN> nm_hal_deinit(): libhal shutdown failed - Connection is closed
Network Manager: <WARN> nm_dbus_init(): nm_dbus_init() could not get the system bus. Make sure the message bus daemon is running!
Network Manager: nm_dbus_signal_device_status_change: assertion `cb_data->data->dbus_connection' failed
Network Manager: nm_dbus_signal_device_status_change: assertion `cb_data->data->dbus_connection' failed
Network Manager: nm_dbus_signal_device_status_change: assertion `cb_data->data->dbus_connection' failed
 * Sending all process the KILL signal...                       [OK]

こうなってしまうと電源ボタン長押しでしか電源を切ることが出来ず、面倒だし精神衛生上にもよろしくないので対処方法について調べてみた。

環境

  • nfsサーバ: Debian GNU/Linux 4.0r3 (etch)
  • nfsクライアント: Kubuntu 8.04 (Hardy Heron) 日本語ローカライズド

問題の切り分け

nfsマウントを利用しないでシャットダウン

特に問題なくシャットダウンできる

nfsマウントを手動でアンマウントしてからシャットダウン

$ sudo umount /mnt/share/sdb
$ sudo umount /mnt/share
$ sudo umount /mnt/share2

問題なくシャットダウンできる

nfsマウントを解除せずにシャットダウン

上記エラーが発生する

原因と対処法

結果から言うと、nfsのマウントの順番に問題があったようです。

nfsサーバでは以下のようになっています。

マウントポイントデバイスファイル
/share/dev/sda1
/share/sdb/dev/sdb1

これを/etc/exportで/shareのみ公開し、クライアント側から/shareをマウントしても、異なるボリュームである/share/sdbの領域にはアクセスすることが出来ませんでした。このため、/etc/exportに/share及び/share/sdbを公開するように設定し、クライアント側から/shareをマウントした後に/share/sdbをマウントするように設定していました。

このときのクライアントの/etc/fstabは以下の通り(nfsマウント部のみ抜粋)。

# nfs mount
nfs-server:/share      /mnt/share      nfs  rw,hard,intr,rsize=8192,wsize=8192 0 0
nfs-server:/share/sdb  /mnt/share/sdb  nfs  rw,hard,intr,rsize=8192,wsize=8192 0 0

このような構成の場合、/mnt/shareをアンマウントするには/share/sdbが先にアンマウントされていないといけません*1。このため、このような順序で/etc/fstabに設定していると/mnt/shareをアンマウントしようとしたところで失敗し、結果としてアンマウントできないためにシャットダウン自体が失敗していると推測できます。

これを回避するには/share/sdbを/mnt/share/sdbにマウントするのではなく、/mnt/shareの配下以外にマウントするようにするようにします。

やったこと

先に/share/sdbをマウントするためにはローカルにマウントポイントがないといけないので作成する。

$ mkdir /mnt/sdb

/etc/fstabを書き換える

# nfs mount
nfs-server:/share/sdb  /mnt/sdb    nfs  rw,hard,intr,rsize=8192,wsize=8192 0 0
nfs-server:/share      /mnt/share  nfs  rw,hard,intr,rsize=8192,wsize=8192 0 0

これでシャットダウンが正常に行われるようになりました。

*1 : アンマウントしようとしてもDevice is busyと出てしまう