私の設定では、いくつかの/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マウントをサポートしているかどうかはわかりませんが、/etc
Unionマウントの一部として実際のルートファイルシステムを持たないのは難しいでしょう。
すべてを別のパーティションに保存するには、必要なもの(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 を使用します。