Linux

此錯誤的來源:udevd磷一世D磷一世DPID: inotify_add_watch(6, /dev/sda, 10) 失敗:不允許操作

  • January 12, 2019

我們的系統日誌中有這個日誌:

udevd [ PID ]: inotify_add_watch(6, /dev/sda, 10) failed: operation not permitted

為什麼我們會收到這個錯誤,我們該如何解決?

我們的環境:Ubuntu 12.04;LXC; 我們在容器內執行;我不確定 SELinux(我沒有訪問權限),但它沒有啟用。

Ubuntu12.04:如何在啟動時禁用守護程序

Debian 錯誤報告日誌 - #620921 udev:請檢測 lxc,不要嘗試從那裡開始

乍一看,容器中支持 udev 事件。但為了優化,我建議不要使用它,因為它會觸發所有容器中的事件。

如果上面的不清楚,我建議用火殺死它。通常不希望udev在容器內部考慮觸摸sda等。通常不會有任何您希望 udev 做的事情。

閱讀以下內容,您可能會猜到我的答案是順從systemd黨的路線:-)。顯然 LXC 有一些不同的意見,至少有一次:https ://stgraber.org/2013/12/21/lxc-1-0-your-second-container/#comments

我相信評論者“wwwwww”是systemd主角 Lennart Poettering 的化名(!)。要麼,要麼有人做了一個很好的模仿,符合他的寫作風格和他在這個問題上的立場:-)。

也許更熟悉 LXC 的人會確切地知道udevLXC 期望哪些組合和 LXC 設置可以做任何有用的事情。什麼條件可能會產生這樣的警告資訊。上面的連結提供了 Ubuntu 的日期範圍,聲稱最初的 Ubuntu 12.04 版本應該沒問題。但是,它沒有說明它是否發出任何虛假警告。(它不會是第一個這樣做的軟體:-))

無論優點如何,如果您不需要從 LXC 內部訪問任何物理設備,禁用 udev 似乎是避免看到任何 udev 警告的簡單方法。“當我們等待人們弄清楚設備名稱空間應該如何工作時”。LXC 開發人員提到“這遠非理想”:-)。那是在 2013 年,仍然沒有設備命名空間(從 Linux v4.20 開始)。

下一個相關評論似乎是“我們的預設配置將讓 udev 創建設備節點,但只能訪問配置中允許的那些。” 從這個意義上說,您的 LXC 正在按照 LXC 的要求工作:它允許您創建一個設備節點/dev/sda,但不允許您訪問它。

我不知道為什麼您的udev創建/dev/sda,(大概)不會抱怨無法在其上執行blkid,但會抱怨無法觀看。


核心(從 v4.20 開始)不為設備提供隔離。設備沒有命名空間。例如,與允許隔離網路介面的網路命名空間相比。對於可以隔離的名稱空間列表,請查看man 7 namespacesman 2 clone

如果您好奇有原則的容器執行時可以做什麼,答案是它可以禁用對所有設備的訪問(除了一些虛擬設備,如/dev/null,/dev/pts/*等)。我更熟悉systemd-nspawn(及其文件)。至少在 cgroups v1 中,nspawn 使用設備控制組來禁用對設備的訪問。cgroups v2 最終獲得了等效的功能。同時,nspawn 會阻止您使用 來創建設備節點seccomp(),並且效果很好。當然,這意味著您必須相信容器文件系統映像不包含任何“錯誤”的設備節點,因此 cgroup 解決方案更好。

Current檢測到如果已以只讀方式安裝systemd-udevd.service,則不應執行。/sys

引用自:https://unix.stackexchange.com/questions/493297