NFSのアンマウントに失敗し、シャットダウンできない
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
これでシャットダウンが正常に行われるようになりました。