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と出てしまう

Linux版FirefoxをWindows版と同じ操作性にする

2008/08/01PC::Linux/BSD

Kubuntu版*1のFirefoxではWindows版のFirefoxとは異なった以下のような調整がされているようです。

  1. Backspaceで「戻る」ができない
  2. Ctrl+Eで検索バーにフォーカスを移せない

上記の2つは結構利用する機能であり、不便でしょうがなかったので対処法を調べてみた。

*1 : apt-get firefoxでインストールする場合。Mozilla公式配布のバイナリは不明。

環境

  • Kubuntu 8.04 日本語ローカライズ
  • Firefox 3.0.1 (Ubuntuカスタマイズ版)

対処法

1. Backspaceで「戻る」を利用可能にする

about:configからbrowser.backspace_actionの値を0にする。

ちなみに、browser.backspace_actionの取り得る値は以下の通り。(参考:MozillaZine Knowledge Base)

機能備考
0Backspace: 「戻る」
Shift + Backspace: 「進む」
Windows版のデフォルト
1Backspace: スクロールアップ(PageUp)
Shift + Backspace: スクロールダウン(PageDown)
06/12/07より前のLinux版のデフォルト
2(0, 1以外)Backspaceには機能を割り当てない06/12/07以降のLinux版のデフォルト

2. Ctrl+Eで検索バーにフォーカスが移るようにする

拡張機能を追加することで可能です。

keyconfig
Firefoxのキーバインドを変更する拡張。ただし、この拡張だけでは検索バーへフォーカスを移すキーバインドを変更できません。
functions for keyconfig
上記keyconfigの機能を拡張し、様々な機能に対するキーバインドを変更することが可能になります。

今回利用したバージョンは以下の通り。

これらの拡張を導入すると、[メニュー] - [ツール]に[キーボードショートカットのカスタマイズ]が追加されるのでここから編集することが可能です。検索バーへフォーカスを移すのはf4kc_WebSearchとなりますので、この項目の値をCtrl+Eとします。

ちなみに

keyconfig 20080611はFirefox 3.0までしか対応していないため、Firefox 3.0.1には導入することができません。xpiファイルの拡張子をzipとしてxpiファイルを展開後、install.rdfを以下のように編集し再度zip圧縮し、拡張子をxpiに戻すことで無理矢理対応させることができますが、適用は自己責任でお願いします。不安な方はkeyconfigが正式にFirefox 3.0.1に対応するのを待つ方がいいと思われます。

xpiの中のinstall.rdfの以下の部分

    <targetApplication><rdf:Description>
      <id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</id>
      <minVersion>2.0.0.14</minVersion>
      <maxVersion>3.0</maxVersion>
    </rdf:Description></targetApplication>

    <targetApplication><rdf:Description>
      <id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</id>
      <minVersion>2.0.0.14</minVersion>
      <maxVersion>3.0.*</maxVersion>
    </rdf:Description></targetApplication>

に変える。

.XmodmapによるCapsLockとCtrlの入れ替え

2008/07/27PC::Linux/BSD

CapsLockとCtrlの入れ替え程度であればGUIから設定できるツールが用意されていますが、今後のカスタマイズを考えて.Xmodmapで行う方法について調べてみた。

~/.Xmodmapを作成し、以下のように記載

! CapsLockとControlの入れ替え
! 2回適用すると元に戻る
remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L

すぐに適用するにはxmodmapで設定を読み込ませてやればいい。

$ xmodmap ~/.Xmodmap

ちなみに、Kubuntu 8.04だと.Xmodmapは自動で読み込まれるため、.xinitrcなどの編集は不要らしい。
知らずに.xinitrcを編集して2回読み込ませてしまい、一度CapsLockとCtrlを入れ替えた後にもう一度入れ替えてしまい設定が効かなかったのは秘密(苦笑

isoイメージの作成/マウント方法

2008/07/22PC::Linux/BSD

LinuxではWindowsで言うところのリッピングソフトやDAEMON Toolsのようなものを導入することなく簡単にCD/DVDのisoイメージ作成/マウントが可能です。その方法のメモ。

CD/DVDイメージの作成方法

物理CD/DVDドライブのデバイスファイルを/dev/scd0とした場合に、ホームディレクトリにファイル名「cdrom.iso」として作成する

$ dd if=/dev/scd0 of=~/cdrom.iso bs=5M

ブロックサイズは適当に。
この方法で作成したファイルは一般的なISOと同じものですので、適当なCD/DVDライターで書き込むことが可能です。

CD/DVDイメージのマウント方法

上記で作成したCD/DVDイメージを/mnt/cdimg/にマウントする

# mount -t iso9660 -o loop ~/cdrom.iso /mnt/cdimg

[Debian] mdadmを利用したソフトウェアRAID 5の構築

2008/07/18PC::Linux/BSD

HDD4台でソフトウェアRAID 5を構築した時のメモ。
RAIDのメンバとなるのはsdb, sdc, sdd, sde。パーティション単位で構築できるので、容量が不揃いな場合最小となる容量でパーティションをそれぞれ作り、余った部分でさらにRAIDを組んだり、単体のドライブとして利用すると幸せになれそうです。

mdadmのインストール

# apt-get install mdadm

fdiskでRAIDのメンバとなるパーティションの作成

sdb, sdc, sdd, sdeそれぞれ同じ容量になるように1つのパーティションを作成。RAIDのメンバにするパーティションはそれぞれ次のようにした。

  • プライマリパーティション (パーティション番号1)
  • システムID: FD (Linux RAID)

RAIDの構築

# mdadm -C /dev/md0 -l5 -n4 -f /dev/sd[bcde]1

構築が終了すると/dev/md0は通常のHDD(/dev/sdaなど)と同じように利用することが可能となる。後はfdiskでパーティション*1を作成し、好きなファイルシステムでフォーマットをかけてやればいい。

*1 : アレイの場合はボリュームと言うのか?

自動マウント

# echo 'DEVICE /dev/sd[bcde]1' > /etc/mdadm.conf
# mdadm -Ds >> //etc/mdadm.conf

後は通常のHDDと同じように/etc/fstabを編集してやれば起動時に自動的にマウントされる。

アレイの詳細確認 (08/11/01追記)

"mdadm -D アレイのスペシャルデバイス (例:/dev/md0)"で行う

# mdadm -D /dev/md0

/dev/md0:
        Version : 00.90.03
  Creation Time : Thu Jul 17 01:30:04 2008
     Raid Level : raid5
     Array Size : 400018176 (381.49 GiB 409.62 GB)
    Device Size : 133339392 (127.16 GiB 136.54 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat Nov  1 06:27:29 2008
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : md0固有のUUID値
         Events : 0.8

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       3       8       65        3      active sync   /dev/sde1

パフォーマンスとか

今回構築したソフトウェアRAID 5のボリュームに3GBのデータを書き込んでみた。

# dd if=/dev/zero of=/data/SW-RAID/test.img bs=10M count=300
300+0 records in
300+0 records out
3145728000 bytes (3.1 GB) copied, 60.0993 seconds, 52.3 MB/s

ちなみにRAIDを構成したドライブと同一モデルで単体の場合

# dd if=/dev/zero of=/data/temp/test.img bs=10M count=300
300+0 records in
300+0 records out
3145728000 bytes (3.1 GB) copied, 27.1808 seconds, 116 MB/s

パリティ演算のオーバーヘッドが大きいので単体ドライブよりも低いパフォーマンスとなってしまいました。
ただ、速度的に困ることはない程度に出るので問題はなさそうです。
# RAID0で組んだら相当速そうですが、バスの速度の方がボトルネックになるのであまり幸せにはなれなさそう(苦笑

参考