此錯誤的來源:udevd磷一世D磷一世DPID: inotify_add_watch(6, /dev/sda, 10) 失敗:不允許操作
我們的系統日誌中有這個日誌:
udevd [ PID ]: inotify_add_watch(6, /dev/sda, 10) failed: operation not permitted
為什麼我們會收到這個錯誤,我們該如何解決?
我們的環境:Ubuntu 12.04;LXC; 我們在容器內執行;我不確定 SELinux(我沒有訪問權限),但它沒有啟用。
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 的人會確切地知道
udev
LXC 期望哪些組合和 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 namespaces
或man 2 clone
。如果您好奇有原則的容器執行時可以做什麼,答案是它可以禁用對所有設備的訪問(除了一些虛擬設備,如
/dev/null
,/dev/pts/*
等)。我更熟悉systemd-nspawn
(及其文件)。至少在 cgroups v1 中,nspawn 使用設備控制組來禁用對設備的訪問。cgroups v2 最終獲得了等效的功能。同時,nspawn 會阻止您使用 來創建設備節點seccomp()
,並且效果很好。當然,這意味著您必須相信容器文件系統映像不包含任何“錯誤”的設備節點,因此 cgroup 解決方案更好。Current檢測到如果已以只讀方式安裝
systemd-udevd.service
,則不應執行。/sys