我克隆了一个磁盘(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-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 系统可能同时具有 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
可用,就是用它来代替:
- 克隆磁盘;
- 将克隆的根分区挂载到某处(例如
/mnt
); 初始化机器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
所有磁盘都相同,这后来导致了本地网络中的冲突,因为它们MAC
在bridge
(不在ethernet
设备上)。
最简单的解决方案是machine-id
在每台计算机上重新启动它们,因为它占用的情况以及计算机正在使用systemd
:
rm /etc/machine-id
systemd-machine-id-setup