システムログには次のログがあります。
udevd [ PID ]: inotify_add_watch(6, /dev/sda, 10) failed: operation not permitted
このエラーが発生する理由と回避策は何ですか?
私たちの環境:Ubuntu LXC; SELinuxについてはよくわかりませんが(アクセス権がありません)、有効になっていません。
答え1
Debianのバグレポートログ - #620921 udev:lxcを検出します。そこから起動しないでください。
一見すると、udevイベントはコンテナでサポートされています。ただし、最適化のためにすべてのコンテナでイベントをトリガーするため、使用しないことをお勧めします。
上記が不明であれば提案します。火で殺す。一般的に、udev
容器の内部に触れることなどを考えることは望ましくありませんsda
。普通はありません。何もないudevでやりたいこと。
systemd
以下を読んで、私の答えがパーティーラインに近いことを推測することができます:-).明らかに、LXCは少なくともある時点でいくつかの異なる見解を持っていました。https://stgraber.org/2013/12/21/lxc-1-0-your-second-container/#comments
systemd
コメント作成者「wwwwww」は主人公Lennart Poetteringの仮名(!)であることがわかっています。そのうちの1人または誰かが彼の執筆スタイルと問題に対する彼の立場に合った素晴らしい真似をしました。 :-).
udev
おそらくLXCに慣れている人なら、LXCが期待する組み合わせが何であるか、そして役に立つタスクを実行するためにLXC設定が何をしているのかを正確に知ることができます。どのような状況でそのような警告メッセージを生成できるかを調べてください。上記のリンクは、元のUbuntu 12.04リリースが大丈夫だと主張しながら、Ubuntuの日付範囲を提供します。しかし、虚偽の警告を発令したかどうかは明らかではありませんでした。 (これを行う最初のソフトウェアではありません:-))
利点が何であれ、あなたがいる限り、いいえLXC内で物理デバイスにアクセスする必要がある場合は、udevを無効にすることがudev警告を表示しない簡単な方法のようです。 「人々がデバイスの名前空間がどのように機能するかを知るのを待っています」。 LXC開発者は「これは理想的ではありません」と述べました:-).それは2013年で、まだデバイスの名前空間がありませんでした(Linux v4.20ベース)。
次の関連説明は、「私たちのデフォルト設定を使用すると、udevはデバイスノードを作成できますが、設定で許可されているアクセスノードのみを許可します」この意味で、LXCはLXCが意図したとおりに機能します。 node/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