/etc-Dateien auf einer anderen Partition

/etc-Dateien auf einer anderen Partition

Mein Setup erfordert, dass einige meiner /etcDateien auf einer separaten Partition liegen. Zu diesem Zweck habe ich einen Softlink erstellt:

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

Mein Problem tritt auf, wenn ich versuche, Befehle mit diesen Dateien auszuführen:

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

straceBerichte:

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

Irgendwelche Ideen, wie ich zur Arbeit komme groupadd?

Antwort1

Aus diesem Grund ist das Aufteilen von Dateien auf /etcmehrere Partitionen keine gute Idee.

Was passiert, ist, dass das groupaddDienstprogramm eine temporäre Datei erstellt und dann die echte /etc/groupsDatei (oder vielmehr das, worauf der Symlink verweist) durch eine einfache renameOperation durch die temporäre Datei ersetzt.
Der Haken dabei ist, dass dies rename()nur auf demselben Dateisystem funktioniert, andernfalls wird ein Fehler ausgegeben.

Ein weiteres potenzielles Problem besteht darin, dass beim Ausführen der Operation renameder symbolische Link zerstört wird und die Datei nun eine normale Datei ist.

Ein weiteres potenzielles Problem ist, dass viele Dateien /etcfür den ordnungsgemäßen Start erforderlich sind, bevor das System die Möglichkeit hat, andere Volumes zu mounten. Daher fehlen diese Dateien tatsächlich.

 

Kurz gesagt: Nein, das lässt sich nicht beheben. Und es sollte auch nicht gemacht werden.

Antwort2

/etcsoll sich im Root-Dateisystem befinden. Das Vernünftigste ist, es dort zu belassen.

Wenn Sie wirklich teilen müssen /etc, erzielen Sie mit einem Union-Mount möglicherweise bessere Ergebnisse. Ich weiß allerdings nicht, ob Linux Union-Mounts unterstützt, bei denen eine der Komponenten mit dem Mount-Punkt übereinstimmt, und es wäre schwierig, den realen /etcTeil des Union-Mounts nicht auf dem Root-Dateisystem zuzulassen.

Wenn Sie alles /etcauf einer anderen Partition ablegen möchten, können Sie eine Minimalpartition erstellen /etc, die nur das enthält, was benötigt wird ( /etc/fstab, was Init benötigt ( /etc/inittaboder /etc/initund /etc/rc*oder was auch immer Ihr Init-System verwendet), minimal /etc/passwdund /etc/groupusw.). Führen Sie früh während des Bootvorgangs (viel früher als /etc/rc.local!) ein Bind-Mount /var/common/etcauf durch /etc. Dies erfordert jedoch eine Menge Arbeit, bis es richtig funktioniert, und wird am Ende /var/common/etcdas gesamte sein /etc, was Sie wahrscheinlich nicht wollen. Diese Konfiguration ist vor allem für einige eingebettete Systeme sinnvoll, die keines der üblichen Init-Systeme verwenden und strenge Beschränkungen hinsichtlich der Größe des Root-Dateisystems haben.

Wenn Sie über eine verfügen, /var/commondie von mehreren Servern gemeinsam genutzt wird, sollten Sie das Problem anders angehen. Verwenden Sie ein geeignetes Konfigurationsverwaltungssystem, um gemeinsam genutzte Dateien bereitzustellen /etc.

Eine Datei wie /etc/passwdund /etc/groupsollte nicht zwischen Maschinen gemeinsam genutzt werden. Verwenden Sie diese Dateien nur für lokale Benutzer und Gruppen. Verwenden Sie für Einträge, die zwischen Maschinen gemeinsam genutzt werden, NIS oder LDAP.

verwandte Informationen