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

Mou*_*inX 43 d-bus systemd

我克隆了一个磁盘(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
Run Code Online (Sandbox Code Playgroud)

新值与旧值相同。

hvd*_*hvd 45

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

rm -f /etc/machine-id
Run Code Online (Sandbox Code Playgroud)

进而

dbus-uuidgen --ensure=/etc/machine-id
Run Code Online (Sandbox Code Playgroud)

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

rm /var/lib/dbus/machine-id
Run Code Online (Sandbox Code Playgroud)

并重新创建它:

dbus-uuidgen --ensure
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 据我了解,D-Bus 机器 id 是/存储在 `/var/lib/dbus/machine-id` 中,而 `/etc/machine-id` 是一个 systemd-ism(与 D-公共汽车)。 (2认同)
  • @StephenKitt 我相信你在历史上是对的,但考虑到 D-Bus 现在直接接受它`/etc`(不需要符号链接),为了简单起见,它可能被放在那里:那里有更多的代码只检查`/ etc` 只检查 `/var/lib/dbus`。 (2认同)

Ste*_*itt 32

最简单的选择是/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
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 既然 D-Bus 只是一种系统内 IPC 机制,为什么 D-Bus 还需要一个唯一的“machine-id”? (2认同)