Il est possible de changer / etc / machine-id?

33

J'ai cloné un disque (SSD) et mis le disque cloné dans une autre machine. Maintenant, les deux systèmes ont la même valeur dans /etc/machine-id. Est-ce un problème de simplement éditer /etc/machine-idpour changer la valeur? Puis-je faire cela pendant que le système est en marche (ou dois-je démarrer à partir d'un Live USB)?

Est-ce systemd-machine-id-setupune meilleure alternative?

L'utilisation naïve de systemd-machine-id-setupne fonctionne pas. J'ai essayé ces étapes:

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

La nouvelle valeur est la même que l'ancienne.

MountainX
la source
semble être ok
Je suis la personne la plus stupide
1
D-Bus n'étant pas un mécanisme inter-hôte, quelle différence cela fait-il que les hôtes aient le même système machine-id?
fpmurphy

Réponses:

28

Bien que systemd-machine-id-setupet systemd-firstbootsont parfaits pour les systèmes utilisant systemd, /etc/machine-idn'est pas un fichier systemd, malgré la balise. Il est également utilisé sur les systèmes n'utilisant pas systemd. Donc, comme alternative, vous pouvez utiliser l' dbus-uuidgenoutil:

rm -f /etc/machine-id

et alors

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

Comme mentionné par Stephen Kitt, les systèmes Debian peuvent avoir /etc/machine-idun /var/lib/dbus/machine-idfichier et un fichier. Si les deux existent en tant que fichiers normaux, leur contenu doit correspondre, aussi supprimez-le également /var/lib/dbus/machine-id:

rm /var/lib/dbus/machine-id

et recréez-le:

dbus-uuidgen --ensure

Cette dernière commande utilise implicitement /var/lib/dbus/machine-idle nom de fichier et copie l'ID d'ordinateur à partir du fichier déjà généré /etc/machine-id.

L' dbus-uuidgeninvocation peut ou peut ne pas déjà faire partie de la séquence de démarrage normale. Si cela fait partie de la séquence d'amorçage, alors supprimer le fichier et redémarrer devrait suffire. Si vous avez besoin de dbus-uuidgenvous lancer , faites attention à l'avertissement dans la page de manuel:

Si vous essayez de modifier un identifiant d'ordinateur existant sur un système en cours d'exécution, cela entraînera probablement des problèmes. N'essayez pas de changer ce fichier. En outre, ne faites pas la même chose sur deux systèmes différents; il doit être différent chaque fois que deux noyaux différents sont en cours d'exécution.

Donc, après cela, ne continuez pas à utiliser le système sans redémarrer. Par précaution supplémentaire, vous pouvez plutôt redémarrer d’abord en mode de secours (ou, comme vous l’avez suggéré, démarrer à partir d’une clé USB active), mais d’après mon expérience, cela n’est pas nécessaire. De mauvaises choses peuvent arriver, mais les mauvaises choses qui arrivent sont corrigées par le redémarrage de toute façon.

hvd
la source
2
Si j'ai bien compris, l'identifiant de la machine D-Bus était / est stocké dans /var/lib/dbus/machine-id, et /etc/machine-idest un systemd-ism (compatible avec D-Bus).
Stephen Kitt
2
@StephenKitt Je pense que vous avez toujours raison, mais étant donné que D-Bus l'accepte /etcdirectement aujourd'hui (aucun lien symbolique n'est nécessaire), il peut être inséré ici pour simplifier les choses: il y a plus de code qui ne /etcfait que vérifier /var/lib/dbus.
hvd
Dans ce cas, vous devez au moins vous assurer que les deux fichiers ne contiennent pas de valeurs différentes.
Grawity
@grawity Le moyen le plus simple de le faire est de ne pas avoir deux fichiers séparés au départ. Connaissez-vous des distributions qui ont des fichiers séparés (c'est-à-dire deux fichiers normaux, pas un fichier normal et un lien symbolique)?
hvd
Quelle que soit la distro op utilisée, apparemment, comme le post original montre systemd-machine-id-setuptrouver une copie de la valeur originale là-bas. C'est le comportement par défaut sauf si une distribution crée spécialement le lien symbolique.
Grawity
29

L'option la plus simple consiste à supprimer /etc/machine-idsur le disque cloné et à redémarrer. systemd-machine-id-setupen générera un nouveau pour vous (vous devrez l'exécuter manuellement si cela ne se produit pas automatiquement). Vous devrez peut-être aussi supprimer /var/lib/dbus/machine-id(s'il ne s'agit pas d'un lien symbolique vers /etc/machine-id); dans ce cas, assurez - vous que le nouveau machine-idest vraiment nouveau, et copier les fichiers pour /etc/machine-idet /var/lib/dbus/machine-idcontiennent la même valeur.

Comme vous l'avez découvert, l'exécution systemd-machine-id-setupsur un système qui a été démarré avec un /etc/machine-idfichier restaure simplement l'identificateur avec lequel il a été démarré (à partir de l'ID d'ordinateur D-Bus). C'est l'option 1 de la page de manuel à laquelle vous êtes lié. La suppression du ou des fichier (s) et le redémarrage exerceront l’option 4.

Pour le bénéfice des lecteurs envisageant de cloner un disque de cette manière, l'approche recommandée avec systemd, du moins sur les systèmes où il systemd-firstbootest disponible, consiste à utiliser à la place:

  1. cloner le disque;
  2. montez la partition racine clonée quelque part ( par exemple /mnt );
  3. initialiser l'identifiant de la machine:

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

Vous pouvez utiliser systemd-firstbootpour définir d’autres paramètres lorsque vous y êtes (nom d’hôte, mot de passe root, etc.).

Stephen Kitt
la source
Il est à noter que sur Ubuntu 16.04 et 17.10, /etc/machine-idelle n'est pas recréée automatiquement si elle est supprimée, elle systemd-firstbootn'est pas disponible. Donc, une fois que vous supprimez ce fichier, vous devez le recréer manuellement en utilisant systemd-machine-id-setup(et éventuellement redémarrer, également).
Gerlos
Autre point: il n’ya souvent /var/lib/dbus/machine-idqu’un lien symbolique vers /etc/machine-id, il n’est donc pas nécessaire de copier le contenu d’un fichier à l’autre.
Gerlos
1
@gerlos oui, d'où le «pourrait avoir besoin de»; mais j'ai aussi expliqué cela, merci encore.
Stephen Kitt
Pourquoi existe-t-il même un besoin d'un système unique machine-idpour D-Bus puisque ce dernier n'est qu'un mécanisme IPC intra-système?
fpmurphy