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


33

我克隆了一个磁盘(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

新值与旧值相同。


看起来还可以
我是最愚蠢的人,2017年

1
由于D-Bus不是主机间机制,因此主机是否具有相同的功能有什么区别machine-id
fpmurphy

Answers:


28

尽管systemd-machine-id-setup并且systemd-firstboot非常适合使用systemd的系统/etc/machine-id,但尽管有标签,它也不是systemd文件。它也用于不使用systemd的系统上。因此,您可以使用以下dbus-uuidgen工具:

rm -f /etc/machine-id

然后

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

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

rm /var/lib/dbus/machine-id

并重新创建它:

dbus-uuidgen --ensure

最后一个命令隐式地/var/lib/dbus/machine-id用作文件名,并将从新生成的中复制机器ID /etc/machine-id

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

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

因此,执行此操作后,一定不要在不重新引导的情况下继续使用系统。作为额外的预防措施,您可以先重新启动进入救援模式(或者按照您的建议,从活动的USB闪存盘启动),但是根据我的经验,这不是必需的。可能会发生不好的事情,但是无论如何都会通过重新启动来修复发生的不好的事情。


2
据我了解,D-Bus机器ID已存储在/中/var/lib/dbus/machine-id,并且/etc/machine-id是systemd-ism(与D-Bus兼容)。
史蒂芬·基特

2
@StephenKitt我相信您在历史上是正确的,但是鉴于D-Bus现在/etc直接接受它(不需要符号链接),可能只是为了简单起见将它放在其中:那里有更多的代码只进行检查,而/etc不是仅进行检查/var/lib/dbus
hvd

在这种情况下,您至少应确保两个文件不包含不同的值。
grawity

@grawity最简单的方法是首先没有两个单独的文件。您是否知道发行版具有单独的文件(即两个常规文件,而不是一个常规文件和一个符号链接)?
hvd

显然,无论发行版OP使用什么发行版,因为原始帖子显示在其中systemd-machine-id-setup查找原始值的副本。除非发行版专门创建了符号链接,否则这基本上是默认行为。
grawity

29

最简单的选择是/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-firstboot可用的系统上,建议对systemd推荐使用以下方法:

  1. 克隆磁盘;
  2. 将克隆的根分区安装在某个地方(例如 /mnt);
  3. 初始化机器ID:

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

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


值得注意的是,在Ubuntu 16.04和17.10上/etc/machine-id,如果删除,systemd-firstboot则不会自动重新创建,两者均不可用。因此,一旦删除了该文件,就应该使用systemd-machine-id-setup(也可以重新启动)手动重新创建该文件。
gerlos

另一点:通常/var/lib/dbus/machine-id只是与的符号链接/etc/machine-id,因此无需将内容从一个文件复制到另一个文件。
gerlos

1
@gerlos是的,因此“可能需要”;但我也明确指出了,再次感谢。
史蒂芬·基特

machine-id由于D-Bus只是系统内IPC机制,为什么甚至需要唯一的D-Bus?
fpmurphy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.