別のパーティション上の /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、シンボリック リンクが上書きされ、通常のファイルになってしまうことです。

もう 1 つの潜在的な問題は、/etcシステムが他のボリュームをマウントする前に、適切な起動に多くのファイルが必要になることです。そのため、これらのファイルは実際には欠落していることになります。

 

一言で言えば、これは修正できません。そして、そもそも修正すべきではありません。

答え2

/etcルートファイルシステム上に置くことを意図しています。そのようにしておくのが賢明です。

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

のすべてを/etc別のパーティションに配置する場合は、/etc必要なものだけ ( /etc/fstab、 init に必要なもの (/etc/inittabまたは/etc/initおよび/etc/rc*または init システムが使用するもの)、最小限の/etc/passwdおよび/etc/groupなど) を含む最小限の を作成できます。起動の早い段階 ( よりずっと前!) で、を に/etc/rc.localバインドマウントします。ただし、これを正しく行うには多くの作業が必要になり、全体が になることになり、おそらくこれは望ましくありません。この設定は、通常の init システムをまったく使用せず、ルート ファイル システムのサイズに厳しい制約がある一部の組み込みシステムで主に意味を持ちます。/var/common/etc/etc/var/common/etc/etc

多数のサーバー間で共有される がある場合/var/common、問題へのアプローチは異なります。適切な構成管理システムを使用して、共有ファイルを に展開します/etc

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

関連情報