/ etcファイルは別のパーティションにあります。

/ etcファイルは別のパーティションにあります。

私の設定では、いくつかの/etcファイルが別々のパーティションにある必要があります。これを行うためにソフトリンクを作成しました。

ls -li /etc/group
956 lrwxrwxrwx 1 root root 21 May  7 15:48 /etc/group -> /var/common/etc/group

ls -li /var/common/etc/group
3145744 -rw-r--r-- 1 root root 668 May 11 11:02 /var/common/etc/group

私の問題は、次のファイルを使用してコマンドを実行しようとしたときです。

groupadd foo
groupadd: failure while writing changes to /etc/group

straceレポート:

rename("/etc/group+", "/var/common/etc/group") = -1 EXDEV (Invalid cross-device link)
write(2, "groupadd: failure while writing "..., 54groupadd: failure while writing changes to /etc/group
) = 54

groupadd私がどのように出勤できるかについてのアイデアはありますか?

答え1

/etcしたがって、複数のパーティションにファイルを分割するのは悪い考えです。

何が起こっているのかは、ユーティリティが一時groupaddファイルを生成してから、簡単な操作/etc/groupsで実際のファイル(またはむしろシンボリックリンクが指すファイル)を一時ファイルに置き換えることですrename
問題は、rename()同じファイルシステムでのみ機能することです。それ以外の場合はエラーが発生します。

ここで発生する可能性のあるもう1つの問題は、タスクを実行するとrenameシンボリックリンクが失われ、現在は通常のファイルになることです。

/etc別の潜在的な問題は、システムが追加のボリュームをマウントする前に正しく起動するために必要なファイルがたくさんあることです。したがって、これらのファイルは実際に失われます。

 

簡単に言えば、いいえ、この問題は修正できません。とにかく、そうしてはいけません。

答え2

/etcルートファイルシステムに配置する必要があります。賢明な方法はそうすることです。

本当に分割が必要な場合は、/etc統合マウントを使用するとより良い結果が得られます。 Linuxが1つのコンポーネントがマウントポイントと一致するUnionマウントをサポートしているかどうかはわかりませんが、/etcUnionマウントの一部として実際のルートファイルシステムを持たないのは難しいでしょう。

すべてを別のパーティションに保存するには、必要なもの(initに必要なもの(またはinitシステムで使用するもの)、最小およびinitシステムで使用するものなど)のみを含む最小パーティションを作成/etcできます。ブートの初期に(!よりはるかに古い)バインドはにマウントされます。ただし、これを正しく実行するには多くの作業が必要であり、おそらく望ましくないモノリシックが生成される可能性があります。この設定は、一般的な初期化システムを使用せずにルートファイルシステムのサイズに厳しい制限がある特定の組み込みシステムに最適です。/etc/etc/fstab/etc/inittab/etc/init/etc/rc*/etc/passwd/etc/group/etc/rc.local/var/common/etc/etc/var/common/etc/etc

/var/common複数のサーバーで共有されるサーバーがある場合は、この問題に別の方法でアクセスする必要があります。適切な構成管理システムを使用して共有ファイルを/etc

/etc/passwdなどのファイルは、/etc/groupコンピュータ間で共有しないでください。ローカルユーザーとグループにのみこのファイルを使用してください。コンピュータ間で共有されるエントリの場合は、NIS または LDAP を使用します。

関連情報