我克隆了一个磁盘(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-setup
和systemd-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 记忆棒启动),但根据我的经验,这不是必需的。坏事可能会发生,但确实发生的坏事无论如何都可以通过重新启动来解决。
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
可用的系统上,是使用它:
/mnt
);初始化机器ID:
systemd-firstboot --root=/mnt --setup-machine-id
Run Code Online (Sandbox Code Playgroud)您可以使用它systemd-firstboot
来设置其他参数(主机名、root 密码等)。