2011-08-23 29 views
6

私はUbuntu 10.04 LTS x64サーバーでUSBドライブの接続と切断を検出するためにudevを使用しています。マシンが動作している間にUSBデバイスが接続されていても、起動時にすでにUSBデバイスが接続されている場合はすべて正常に動作しますが、mkdir /tmp/blahが機能しないため、スクリプトが完了しません。udev:起動時にデバイスが接続されています

端末にsudo udevadm triggerと入力しても問題ありません。

私は、udevがまず接続されたデバイスをそのルールに対して評価すると、ルートファイルシステムはマウントされていないと仮定しています。

私の質問は、したがって、以下のとおりです。

  1. は私が正しく問題を特定していますか?
  2. これを解決するための標準的な方法はありますか?すなわち と/の両方を搭載できる/tmp/の代替がありますか?
+0

優秀な質問http://unix.stackexchange.com/ –

+0

あなたはそうかもしれません。私はbashスクリプトを書いています:私の頭はプログラミングモードなので、私はおそらく徹底的に考えずにここに来ました! –

答えて

5

ルートファイルシステムはマウントされていますが、その時点では読み取り専用です。 /dev/shm(インメモリのファイルシステム)が利用可能でなければなりません。新しいLinuxディストリビューションには/runのRAMディスクがあるかもしれません。あなたはどこかに永久的なディレクトリを選び、スクリプトの中にtmpfsをマウントして、あなたの仕事をすることもできます。

+0

'/ tmp /'から '/ dev/shm /'に処理を移動すると、問題は解決します。ご協力いただきありがとうございます。おそらく、このファイルシステムはマシンが稼動している間は永続的ですか? –

+0

はい、それはメモリ内のファイルシステムなので、あまりにも多くのスペースを使用しないでください。 – bdonlan

1

1- initramfsであっても、ルートファイルシステムがマウントされる前であっても、書き込み可能な/ tmpディレクトリがあります。

真のルートがマウントされると、/ tmpは破棄され、最後の/ tmpは空になります。 mkdir /tmp/blahコマンドが失敗していますか?それとも、あなたがそれを探すときにそこにないからだと思いますか?

2 - Ubuntuでは(私には他のディストリビューションはありません)、/dev/.initramfsに隠れディレクトリがあります。 /devは最終的なルートファイルシステムに保存されているtmpfs(またはdevtmpfs)マウントポイントなので、そこにはまだあります。

+0

ルートファイルシステムのudevルールは、ルートファイルシステムの '/ tmp'で実行されます。これはルートファイルシステムの読み書きを再マウントする前である可能性があります。 – bdonlan

+0

正しいです - 'mkdir'コマンドが失敗している(出力は現在ログに記録されていません)が、' mkdir'が作成されていると報告して次のコマンド( 'mount')存在しない –

+0

@bdonlanそれは、読み取り専用かもしれない。この場合、/ tmpをtmpfsとして設定すると、そのトリックを行う必要があります。 /dev/.initramfsトリックも有効でなければなりません。 – rodrigo

2

この問題の解決策の1つは、即座に切り離されるudevルールによって呼び出されたスクリプトを作成して、マウントポイントなどを作成するためにシステムが十分に起動されたことを確認するイベントが発生するのを待つことですデバイス。次の投稿(http://superuser.com/questions/53978/ubuntu-automatically-mount-external-drives-to-media-label-on-boot-withoutau)に回答した人は、続行する前に "httpd"が実行されています。私は確かにこれを行う他の "より良い"方法があるでしょう。

関連する問題