2011-08-23 55 views
6

我使用udev檢測我的Ubuntu 10.04 LTS x64服​​務器上的USB驅動器連接和斷開連接。在機器運行時連接USB設備時一切正常,但如果在啓動時已經有USB設備存在,則我的腳本無法完成,顯然是因爲mkdir /tmp/blah不起作用。udev:設備在啓動時連接

如果我隨後在終端鍵入sudo udevadm trigger,一切都沒問題。

我假設在udev首次評估連接的設備違反其規則時,根文件系統尚未安裝。因此

我的問題是:

  1. 我有沒有正確識別的問題?
  2. 有沒有一種標準的解決方法 - 即是否有/tmp/的替代品,我可以在登錄/之前和之後使用 ?
+0

很好的問題http://unix.stackexchange.com/ –

+0

你可能是正確的......或serverfault。我正在編寫一個bash腳本:我的腦袋處於編程模式,所以我來到這裏,可能沒有徹底思考它! –

回答

5

根文件系統已掛載,但是在此時是隻讀的。 /dev/shm(內存中的文件系統)應該可用;較新的Linux發行版也可能有一個/run ramdisk。你也可以在某處選擇一個永久目錄,在你的腳本中加載一個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'命令失敗(它的輸出目前沒有記錄),但是下一個命令('mount')失敗,報告'mkdir'應該創建的目錄是不存在 –

+0

@bdonlan可能是,只讀。在這種情況下,將/ tmp配置爲tmpfs應該可以做到。 /dev/.initramfs技巧也應該是有效的。 – rodrigo

2

解決這個問題的一個辦法是編寫一個由你的udev規則調用的腳本,該腳本立即分離,並等待發生某些事件以確保系統「足夠引導」以創建掛載點等來掛載設備。回答以下帖子的人(http://superuser.com/questions/53978/ubuntu-automatically-mount-external-drives-to-media-label-on-boot-without-au)寫了一個腳本,檢查是否在繼續之前,「httpd」正在運行。我相信也可能有其他「更好」的方法來做到這一點。

相關問題