Va bene cambiare / etc / machine-id?


33

Ho clonato un disco (SSD) e ho inserito il disco clonato in un'altra macchina. Ora entrambi i sistemi hanno lo stesso valore in /etc/machine-id. C'è qualche problema da modificare semplicemente /etc/machine-idper cambiare il valore? Posso farlo mentre il sistema è in esecuzione (o devo fare il boot da un Live USB)?

È systemd-machine-id-setupun'alternativa migliore?

L'uso ingenuo di systemd-machine-id-setupnon funziona. Ho provato questi passaggi:

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

Il nuovo valore è uguale al valore precedente.


sembra che sia ok
Sono la persona più stupida

1
Poiché D-Bus non è un meccanismo tra host, che differenza fa se gli host hanno lo stesso machine-id?
fpmurphy

Risposte:


28

Sebbene systemd-machine-id-setupsia systemd-firstbootottimo per i sistemi che usano systemd, /etc/machine-idnon è un file systemd, nonostante il tag. Viene anche utilizzato su sistemi che non utilizzano systemd. Quindi, in alternativa, è possibile utilizzare lo dbus-uuidgenstrumento:

rm -f /etc/machine-id

e poi

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

Come menzionato da Stephen Kitt, i sistemi Debian possono avere sia un /etc/machine-idche un /var/lib/dbus/machine-idfile. Se entrambi esistono come file regolari, il loro contenuto dovrebbe corrispondere, quindi lì, rimuovere anche /var/lib/dbus/machine-id:

rm /var/lib/dbus/machine-id

e ricrearlo:

dbus-uuidgen --ensure

Quest'ultimo comando utilizza implicitamente /var/lib/dbus/machine-idcome nome del file e copia l'ID macchina da quello appena generato /etc/machine-id.

L' dbus-uuidgeninvocazione può o meno essere parte della normale sequenza di avvio. Se fa parte della sequenza di avvio, rimuovere il file e riavviare dovrebbe essere sufficiente. Se devi correre dbus-uuidgenda solo, presta attenzione all'avvertimento nella pagina man:

Se provi a cambiare un id macchina esistente su un sistema in esecuzione, probabilmente si verificheranno cose brutte. Non provare a cambiare questo file. Inoltre, non farlo allo stesso modo su due sistemi diversi; deve essere diverso ogni volta che ci sono due kernel diversi in esecuzione.

Quindi, dopo aver fatto questo, sicuramente non continuare a utilizzare il sistema senza riavviare. Come ulteriore precauzione, puoi invece riavviare prima in modalità di salvataggio (o come hai suggerito, avviare da una chiavetta USB live), ma per mia esperienza, ciò non è necessario. Le cose brutte possono accadere, ma le cose brutte che accadono vengono comunque riparate dal riavvio.


2
A quanto ho capito, l'ID della macchina D-Bus era / è memorizzato /var/lib/dbus/machine-ided /etc/machine-idè un systemd-ism (che è compatibile con D-Bus).
Stephen Kitt,

2
@StephenKitt Credo che tu abbia ragione storicamente, ma dato che D-Bus lo accetta /etcdirettamente al giorno d'oggi (non è necessario alcun collegamento simbolico), può essere inserito solo per semplicità: c'è più codice là fuori che controlla /etcsolo che controlla solo /var/lib/dbus.
hvd,

In tal caso dovresti almeno assicurarti che i due file non contengano valori diversi.
Grawity

@grawity Il modo più semplice per farlo è quello di non avere due file separati in primo luogo. Conosci distro che hanno file separati (ovvero due file regolari, non un file normale e un link simbolico)?
hvd,

Qualunque OP distro utilizzi, a quanto pare, come il post originale mostra come systemd-machine-id-setuptrovare una copia del valore originale lì dentro. Questo è fondamentalmente il comportamento predefinito a meno che una distribuzione non crei appositamente il collegamento simbolico.
Grawity

29

L'opzione più semplice è eliminare /etc/machine-idsul disco clonato e riavviare; systemd-machine-id-setupne genererà uno nuovo per te (dovrai eseguirlo manualmente se ciò non accade automaticamente). Potrebbe anche essere necessario eliminare /var/lib/dbus/machine-id(se non è un collegamento simbolico a /etc/machine-id); In tal caso, assicurarsi che il nuovo machine-idè veramente nuovo, e copiare i file in modo che /etc/machine-ide /var/lib/dbus/machine-idcontengono lo stesso valore.

Come hai scoperto, l'esecuzione systemd-machine-id-setupsu un sistema che è stato avviato con un /etc/machine-idfile ripristinerà semplicemente l'identificatore con cui è stato avviato (dall'ID macchina D-Bus). Questa è l'opzione 1 nella manpage a cui ti sei collegato. L'eliminazione dei file e il riavvio eseguiranno l'opzione 4.

A beneficio dei lettori che pianificano di clonare un disco in questo modo, l'approccio raccomandato con systemd, almeno sui sistemi dove systemd-firstbootè disponibile, è quello di utilizzare invece:

  1. clonare il disco;
  2. montare la partizione radice clonata da qualche parte ( ad esempio /mnt );
  3. inizializza l'ID macchina:

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

È possibile utilizzare systemd-firstbootper impostare altri parametri mentre ci si trova (nome host, password di root ecc.).


Vale la pena notare che su Ubuntu 16.04 e 17.10 /etc/machine-idnon viene ricreato automagicamente se rimosso, né systemd-firstbootè disponibile. Quindi, una volta rimosso quel file, dovresti ricrearlo manualmente usando systemd-machine-id-setup(e forse anche riavviare, anche).
gerlos,

Un altro punto: spesso /var/lib/dbus/machine-idè solo un collegamento simbolico a /etc/machine-id, quindi non è necessario copiare i contenuti da un file all'altro.
gerlos,

1
@gerlos yes, quindi il "potrebbe essere necessario"; ma l'ho reso anche esplicito, grazie ancora.
Stephen Kitt,

Perché c'è persino la necessità di un unico machine-idD-Bus poiché D-Bus è solo un meccanismo IPC all'interno del sistema?
fpmurphy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.