¿Está bien cambiar / etc / machine-id?

33

Cloné un disco (SSD) y puse el disco clonado en otra máquina. Ahora ambos sistemas tienen el mismo valor en /etc/machine-id. ¿Hay algún problema simplemente editar /etc/machine-idpara cambiar el valor? ¿Puedo hacer esto mientras el sistema está funcionando (o necesito arrancar desde un USB en vivo)?

¿Es systemd-machine-id-setupuna mejor alternativa?

El uso ingenuo de systemd-machine-id-setupno funciona. Intenté estos pasos:

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

El nuevo valor es el mismo que el antiguo.

MountainX
fuente
Parece que está bien
Soy la persona más estúpida.
1
Dado que D-Bus no es un mecanismo entre hosts, ¿qué diferencia hay si los hosts tienen lo mismo machine-id?
fpmurphy

Respuestas:

28

Aunque systemd-machine-id-setupy systemd-firstbootson excelentes para sistemas que usan systemd, /etc/machine-idno es un archivo systemd, a pesar de la etiqueta. También se usa en sistemas que no usan systemd. Entonces, como alternativa, puede usar la dbus-uuidgenherramienta:

rm -f /etc/machine-id

y entonces

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

Como mencionó Stephen Kitt, los sistemas Debian pueden tener tanto un /etc/machine-idcomo un /var/lib/dbus/machine-idarchivo. Si ambos existen como archivos normales, su contenido debe coincidir, por lo que también eliminará /var/lib/dbus/machine-id:

rm /var/lib/dbus/machine-id

y volver a crearlo:

dbus-uuidgen --ensure

Este último comando implícitamente se usa /var/lib/dbus/machine-idcomo el nombre del archivo y copiará la ID de la máquina del ya generado recientemente /etc/machine-id.

La dbus-uuidgeninvocación puede o no ser parte de la secuencia de arranque normal. Si es parte de la secuencia de arranque, eliminar el archivo y reiniciar debería ser suficiente. Si necesita ejecutarse dbus-uuidgen, preste atención a la advertencia en la página del manual:

Si intenta cambiar una identificación de máquina existente en un sistema en ejecución, es probable que sucedan cosas malas. No intentes cambiar este archivo. Además, no haga lo mismo en dos sistemas diferentes; debe ser diferente cada vez que se ejecutan dos núcleos diferentes.

Entonces, después de hacer esto, definitivamente no continúe usando el sistema sin reiniciar. Como precaución adicional, puede reiniciar primero en modo de rescate (o como sugirió, iniciar desde una memoria USB en vivo), pero desde mi experiencia, eso no es necesario. Pueden ocurrir cosas malas, pero las cosas malas que suceden son reparadas por el reinicio de todos modos.

hvd
fuente
2
Como entendí, la identificación de la máquina D-Bus estaba / está almacenada /var/lib/dbus/machine-idy /etc/machine-ides un systemd-ism (que es compatible con D-Bus).
Stephen Kitt, el
2
@StephenKitt Creo que tiene razón históricamente, pero dado que D-Bus lo acepta /etcdirectamente hoy en día (no se necesita un enlace simbólico), puede colocarse allí solo por simplicidad: hay más código por ahí que solo verifica /etcque eso solo verifica /var/lib/dbus.
hvd
En ese caso, al menos debe asegurarse de que los dos archivos no contengan valores diferentes.
Grawity
@grawity La forma más fácil de hacerlo es no tener dos archivos separados en primer lugar. ¿Conoces las distribuciones que tienen archivos separados (es decir, dos archivos regulares, no un archivo normal y un enlace simbólico)?
hvd
Cualquier distribución que OP use, aparentemente, como la publicación original muestra cómo systemd-machine-id-setupencontrar una copia del valor original allí. Ese es básicamente el comportamiento predeterminado a menos que una distribución cree especialmente el enlace simbólico.
Grawity
29

La opción más fácil es eliminar /etc/machine-iden el disco clonado y reiniciar; systemd-machine-id-setupgenerará uno nuevo para usted (deberá ejecutarlo manualmente si esto no sucede automáticamente). También es posible que deba eliminar /var/lib/dbus/machine-id(si no es un enlace simbólico /etc/machine-id); en ese caso, asegúrese de que la nueva machine-idrealidad es nueva, y copiar los archivos de modo que /etc/machine-idy /var/lib/dbus/machine-idcontienen el mismo valor.

Como descubrió, la ejecución systemd-machine-id-setupen un sistema que se inició con un /etc/machine-idarchivo simplemente restaurará el identificador con el que se inició (desde la identificación de la máquina D-Bus). Esta es la opción 1 en la página de manual a la que se ha vinculado. Eliminar el archivo (s) y reiniciar ejercerá la opción 4.

Para el beneficio de los lectores que planean clonar un disco de esta manera, el enfoque recomendado con systemd, al menos en sistemas donde systemd-firstbootestá disponible, es usar eso en su lugar:

  1. clonar el disco;
  2. montar la partición raíz clonada en algún lugar ( p /mnt . ej. );
  3. Inicializar la identificación de la máquina:

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

Puedes usarlo systemd-firstbootpara configurar otros parámetros mientras estás en él (nombre de host, contraseña de root, etc.).

Stephen Kitt
fuente
Vale la pena señalar que en Ubuntu 16.04 y 17.10 /etc/machine-idno se recrea automáticamente si se elimina, tampoco systemd-firstbootestá disponible. Entonces, una vez que elimine ese archivo, debe recrearlo manualmente usando systemd-machine-id-setup(y quizás reiniciar, también).
gerlos
Otro punto: a menudo /var/lib/dbus/machine-ides solo un enlace simbólico /etc/machine-id, por lo que no es necesario copiar el contenido de un archivo a otro.
gerlos
1
@gerlos sí, de ahí el "podría ser necesario"; pero también lo hice explícito, gracias de nuevo.
Stephen Kitt
¿Por qué existe la necesidad de un machine-idD-Bus único ya que D-Bus es solo un mecanismo de IPC dentro del sistema?
fpmurphy