diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml
index 8ece65eacc..bb53cc7069 100644
--- a/man/systemd-machine-id-setup.xml
+++ b/man/systemd-machine-id-setup.xml
@@ -43,24 +43,31 @@
ID will be acquired in the following fashion:
- If a valid D-Bus machine ID is already
- configured for the system, the D-Bus machine ID is copied and
- used to initialize the machine ID in
- /etc/machine-id.
+ If a valid machine ID is stored in /run/machine-id, the machine ID
+ is copied and used to initialize the machine ID in /etc/machine-id. This step is
+ skipped if is specified or running in a chroot environment.
- If run inside a KVM virtual machine and a UUID
- is configured (via the
- option), this UUID is used to initialize the machine ID. The
- caller must ensure that the UUID passed is sufficiently unique
- and is different for every booted instance of the
- VM.
+ If a valid D-Bus machine ID is already configured for the system, the D-Bus machine ID
+ is copied and used to initialize the machine ID in /etc/machine-id.
+
+
+ If a valid machine ID is provided through credential,
+ the machine ID is copied and used to initialize the machine ID in /etc/machine-id.
+ This step is skipped if is specified or running in a chroot environment.
+
+
+ If run inside a KVM virtual machine and a UUID is configured (via the
+ option), this UUID is used to initialize the machine ID. The caller must ensure
+ that the UUID passed is sufficiently unique and is different for every booted instance of the VM. This
+ step is skipped if is specified or running in a chroot environment.
+ Similarly, if run inside a Linux container environment and a UUID is configured for the
container, this is used to initialize the machine ID. For details, see the documentation of the Container Interface.
+ url="https://systemd.io/CONTAINER_INTERFACE">Container Interface. This step is skipped if
+ is specified or running in a chroot environment.
- Otherwise, a new ID is randomly
- generated.
+ Otherwise, a new ID is randomly generated.The switch may be used to commit a
diff --git a/src/shared/machine-id-setup.c b/src/shared/machine-id-setup.c
index 48ee2dd306..1a63794756 100644
--- a/src/shared/machine-id-setup.c
+++ b/src/shared/machine-id-setup.c
@@ -55,9 +55,9 @@ static int acquire_machine_id(const char *root, sd_id128_t *ret) {
assert(ret);
/* First, try reading the machine ID from /run/machine-id, which may not be mounted on
- * /etc/machine-id yet. This is important on switching root, Otherwise, machine ID may be changed
- * after the transition. */
- if (empty_or_root(root) && running_in_chroot() <= 0 &&
+ * /etc/machine-id yet. This is important on switching root especially on soft-reboot, Otherwise,
+ * machine ID may be changed after the transition. */
+ if (isempty(root) && running_in_chroot() <= 0 &&
id128_read("/run/machine-id", ID128_FORMAT_PLAIN, ret) >= 0) {
log_info("Reusing machine ID stored in /run/machine-id.");
return 1; /* Indicate that the machine ID is reused. */
@@ -70,7 +70,7 @@ static int acquire_machine_id(const char *root, sd_id128_t *ret) {
return 0;
}
- if (empty_or_root(root) && running_in_chroot() <= 0) {
+ if (isempty(root) && running_in_chroot() <= 0) {
/* Let's use a system credential for the machine ID if we can */
if (acquire_machine_id_from_credential(ret) >= 0)
return 0;