Ist es in Ordnung, / etc / machine-id zu ändern?

33

Ich habe eine Festplatte (SSD) geklont und die geklonte Festplatte in einen anderen Computer eingelegt. Jetzt haben beide Systeme den gleichen Wert in /etc/machine-id. Ist es ein Problem, einfach zu bearbeiten /etc/machine-id, um den Wert zu ändern? Kann ich dies tun, während das System ausgeführt wird (oder muss ich von einem Live-USB-Gerät booten)?

Ist systemd-machine-id-setupeine bessere Alternative?

Die naive Verwendung von systemd-machine-id-setupfunktioniert nicht. Ich habe diese Schritte ausprobiert:

nano /etc/machine-id (to remove the existing value)
systemd-machine-id-setup
> Initializing machine ID from D-Bus machine ID.
cat /etc/machine-id

Der neue Wert ist der gleiche wie der alte Wert.

MountainX
quelle
es scheint in Ordnung zu sein
ich bin die dümmste Person
1
Da D-Bus kein Mechanismus zwischen Hosts ist, welchen Unterschied macht es, ob Hosts dieselben haben machine-id?
fpmurphy

Antworten:

28

Obwohl systemd-machine-id-setupund systemd-firstbootfür Systeme mit systemd großartig sind, /etc/machine-idhandelt es sich trotz des Tags nicht um eine systemd-Datei. Es wird auch auf Systemen verwendet, die systemd nicht verwenden. Als Alternative können Sie das dbus-uuidgenTool verwenden:

rm -f /etc/machine-id

und dann

dbus-uuidgen --ensure=/etc/machine-id

Wie von Stephen Kitt erwähnt, können Debian-Systeme sowohl eine /etc/machine-idals auch eine /var/lib/dbus/machine-idDatei haben. Wenn beide Dateien als reguläre Dateien vorhanden sind, sollte ihr Inhalt übereinstimmen. Entfernen Sie dort auch /var/lib/dbus/machine-id:

rm /var/lib/dbus/machine-id

und erstelle es neu:

dbus-uuidgen --ensure

Dieser letzte Befehl wird implizit /var/lib/dbus/machine-idals Dateiname verwendet und kopiert die Rechner-ID von der bereits neu generierten /etc/machine-id.

Der dbus-uuidgenAufruf kann Teil der regulären Startsequenz sein oder nicht. Wenn es Teil der Startsequenz ist, sollten das Entfernen der Datei und der Neustart ausreichen. Wenn Sie sich dbus-uuidgenselbst ausführen müssen, beachten Sie die Warnung in der Manpage:

Wenn Sie versuchen, eine vorhandene Computer-ID auf einem laufenden System zu ändern, kann dies möglicherweise zu schlechten Ergebnissen führen. Versuchen Sie nicht, diese Datei zu ändern. Machen Sie es auch nicht auf zwei verschiedenen Systemen gleich. Es muss immer dann unterschiedlich sein, wenn zwei verschiedene Kernel ausgeführt werden.

Verwenden Sie das System nach diesem Vorgang auf keinen Fall mehr, ohne einen Neustart durchzuführen. Als zusätzliche Vorsichtsmaßnahme können Sie stattdessen zuerst einen Neustart in den Rettungsmodus durchführen (oder, wie Sie vorgeschlagen haben, von einem aktiven USB-Stick starten), aber meiner Erfahrung nach ist dies nicht erforderlich. Es können schlimme Dinge passieren, aber die schlimmen Dinge, die passieren, werden trotzdem durch den Neustart behoben.

hvd
quelle
2
Wie ich es verstanden habe, war / ist die D-Bus-Rechner-ID in gespeichert /var/lib/dbus/machine-idund /etc/machine-idist ein System-Ismus (der mit D-Bus kompatibel ist).
Stephen Kitt
2
@StephenKitt Ich glaube, Sie haben in der Vergangenheit recht, aber da D-Bus es /etcheutzutage direkt akzeptiert (kein Symlink erforderlich), kann es der Einfachheit halber dort eingefügt werden: Es gibt mehr Code, der nur prüft, /etcals nur prüft /var/lib/dbus.
HDV
In diesem Fall sollten Sie zumindest sicherstellen, dass die beiden Dateien keine unterschiedlichen Werte enthalten.
Grawity
@grawity Der einfachste Weg, dies zu tun, besteht darin, zunächst keine zwei separaten Dateien zu haben. Kennen Sie Distributionen mit separaten Dateien (dh zwei reguläre Dateien, keine reguläre Datei und ein Symlink)?
HDV
Was auch immer die Distribution OP verwendet, da der ursprüngliche Beitrag zeigt systemd-machine-id-setup, dass eine Kopie des ursprünglichen Werts darin gefunden wurde. Dies ist im Grunde das Standardverhalten, es sei denn, eine Distribution erstellt speziell den Symlink.
Grawity
29

Am einfachsten ist es, /etc/machine-idauf der geklonten Festplatte zu löschen und einen Neustart durchzuführen. systemd-machine-id-setupgeneriert ein neues für Sie (Sie müssen es manuell ausführen, wenn dies nicht automatisch geschieht). Möglicherweise müssen Sie auch löschen /var/lib/dbus/machine-id(wenn es sich nicht um einen Symlink handelt /etc/machine-id). in diesem Fall, stellen Sie sicher , dass die neue machine-idwirklich neu ist, und kopieren Sie die Dateien so , dass /etc/machine-idund /var/lib/dbus/machine-iddenselben Wert enthalten.

Wie Sie herausgefunden haben, wird beim Ausführen systemd-machine-id-setupauf einem System, das mit einer /etc/machine-idDatei gestartet wurde , einfach die Kennung wiederhergestellt, mit der es gestartet wurde (von der D-Bus-Rechner-ID). Dies ist Option 1 in der Manpage, mit der Sie verlinkt haben. Wenn Sie die Datei (en) löschen und neu starten, wird Option 4 ausgeführt.

Für Leser , die das Klonen einer Festplatte auf diese Weise planen , wird empfohlen, bei systemd zumindest auf Systemen, auf denen dies systemd-firstbootverfügbar ist, Folgendes zu verwenden:

  1. klonen Sie die Festplatte;
  2. mounten Sie die geklonte Root-Partition irgendwo ( zB /mnt );
  3. Initialisieren Sie die Rechner-ID:

    systemd-firstboot --root=/mnt --setup-machine-id
    

Sie können systemd-firstbootandere Parameter einstellen, während Sie gerade dabei sind (Hostname, Root-Passwort usw.).

Stephen Kitt
quelle
Es ist erwähnenswert, dass es unter Ubuntu 16.04 und 17.10 /etc/machine-idnicht automatisch neu erstellt wird, wenn es entfernt wird, und auch nicht systemd-firstbootverfügbar ist. Sobald Sie diese Datei entfernt haben, sollten Sie sie manuell mithilfe von neu erstellen systemd-machine-id-setup(und möglicherweise auch neu starten).
Gerlos
Ein weiterer Punkt: Häufig /var/lib/dbus/machine-idhandelt es sich nur um einen Symlink zu /etc/machine-id, sodass keine Inhalte von einer Datei in die andere kopiert werden müssen.
Gerlos
1
@gerlos ja, daher könnte das "müssen"; aber das habe ich auch ausdrücklich gesagt, danke nochmal.
Stephen Kitt
Warum wird machine-idfür D-Bus überhaupt ein eindeutiger Wert benötigt, da D-Bus nur ein systeminterner IPC-Mechanismus ist?
fpmurphy