更改/etc/machine-id 可以吗?

更改/etc/machine-id 可以吗?

我克隆了一个磁盘(SSD)并将克隆的磁盘放入另一台机器中。现在两个系统在 中具有相同的值/etc/machine-id。简单地编辑/etc/machine-id改变值有什么问题吗?我可以在系统运行时执行此操作(或者我需要从 Live USB 启动)吗?

systemd-machine-id-setup更好的选择?

天真的使用是systemd-machine-id-setup行不通的。我尝试了以下步骤:

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

新值与旧值相同。

答案1

尽管systemd-machine-id-setupsystemd-firstboot非常适合使用 systemd 的系统,但/etc/machine-id它不是一个 systemd 文件,尽管有标签。它也用于不使用 systemd 的系统。因此,作为替代方案,您可以使用该dbus-uuidgen工具:

rm -f /etc/machine-id

进而

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

正如 Stephen Kitt 所提到的,Debian 系统可能同时具有 a/etc/machine-id和 a/var/lib/dbus/machine-id文件。如果两者都作为常规文件存在,则它们的内容应该匹配,因此也删除/var/lib/dbus/machine-id

rm /var/lib/dbus/machine-id

并重新创建它:

dbus-uuidgen --ensure

最后一个命令隐式用作/var/lib/dbus/machine-id文件名,并将从已经新生成的/etc/machine-id.

dbus-uuidgen调用可能是也可能不是常规引导序列的一部分。如果它是启动顺序的一部分,那么删除该文件并重新启动就足够了。如果需要dbus-uuidgen自己运行,请注意手册页中的警告:

如果您尝试更改正在运行的系统上的现有机器 ID,则可能会导致不好的事情发生。不要尝试更改此文件。另外,不要在两个不同的系统上使其相同;每当有两个不同的内核运行时,它就需要不同。

所以完成此操作后,绝对不要在不重新启动的情况下继续使用系统。作为额外的预防措施,您可以先重新启动进入救援模式(或者按照您的建议,从实时 USB 记忆棒启动),但根据我的经验,这是没有必要的。可能会发生不好的事情,但无论如何,发生的坏事都会通过重新启动来解决。

答案2

最简单的选择是删除/etc/machine-id克隆磁盘并重新启动;systemd-machine-id-setup将为您生成一个新的(如果这不会自动发生,您需要手动运行它)。您可能还需要删除/var/lib/dbus/machine-id(如果它不是 的符号链接/etc/machine-id);在这种情况下,请确保新文件machine-id确实是新文件,并复制文件以使/etc/machine-id/var/lib/dbus/machine-id包含相同的值。

正如您所发现的,systemd-machine-id-setup在使用文件启动的系统上运行/etc/machine-id只会恢复启动时使用的标识符(来自 D-Bus 机器 ID)。这是您链接到的联机帮助页中的选项 1。删除文件并重新启动将执行选项 4。

为了读者的利益规划以这种方式克隆磁盘时,推荐使用 systemd 方法,至少在以下系统上systemd-firstboot可用,就是用它来代替:

  1. 克隆磁盘;
  2. 将克隆的根分区挂载到某处(例如 /mnt);
  3. 初始化机器id:

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

您可以systemd-firstboot在使用时设置其他参数(主机名、root 密码等)。

答案3

这些步骤可以帮助:

  • 删除机器 ID
    rm /etc/machine-id
    rm /var/lib/dbus/machine-id
    init 6
    
  • 重新生成机器 ID
    dbus-uuidgen --ensure
    systemd-machine-id-setup
    
  • 核实
    cat /etc/machine-id
    hostnamectl
    

答案4

我遇到过类似的情况,其中克隆了嵌入式工业设备的各种磁盘,导致machine-id所有磁盘都相同,这后来导致了本地网络中的冲突,因为它们MACbridge(不在ethernet设备上)。

最简单的解决方案是machine-id在每台计算机上重新启动它们,因为它占用的情况以及计算机正在使用systemd

rm /etc/machine-id
systemd-machine-id-setup

相关内容