Можно ли изменить / 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

Новое значение совпадает со старым значением.

MountainX
источник
кажется, что все в порядке
я самый глупый человек
1
Поскольку D-Bus не является механизмом между хостами, какая разница, имеют ли хосты то же самое machine-id?
fpmurphy

Ответы:

28

Хотя systemd-machine-id-setupи systemd-firstbootотлично /etc/machine-idподходит для систем, использующих systemd, это не системный файл, несмотря на тег. Он также используется в системах, которые не используют systemd. В качестве альтернативы вы можете использовать dbus-uuidgenинструмент:

rm -f /etc/machine-id

а потом

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

Как упомянул Стивен Китт, системы 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качестве имени файла и будет копировать идентификатор машины из уже созданного /etc/machine-id.

dbus-uuidgenВызов может или не может уже быть частью обычной последовательности загрузки. Если это часть последовательности загрузки, то удаления файла и перезагрузки должно быть достаточно. Если вам нужно запустить dbus-uuidgenсебя, обратите внимание на предупреждение в справочной странице:

Если вы попытаетесь изменить существующий идентификатор машины в работающей системе, это, вероятно, приведет к плохим вещам. Не пытайтесь изменить этот файл. Кроме того, не делайте это одинаковым в двух разных системах; он должен отличаться каждый раз, когда работают два разных ядра.

Поэтому после этого определенно не продолжайте использовать систему без перезагрузки. В качестве дополнительной меры предосторожности вы можете вместо этого сначала перезагрузиться в режиме восстановления (или, как вы предложили, загрузить с USB-флешки), но, по моему опыту, в этом нет необходимости. Может случиться что-то плохое, но все равно плохие вещи исправляются перезагрузкой.

HVD
источник
2
Как я понял, идентификатор машины D-Bus был / хранится /var/lib/dbus/machine-idи /etc/machine-idявляется системным (совместимым с D-Bus).
Стивен Китт
2
@StephenKitt Я верю, что вы исторически правы, но, учитывая, что D-Bus принимает его /etcнапрямую (символическая ссылка не нужна), его можно поместить туда просто для простоты: существует больше кода, который только проверяет, /etcчем только проверяет /var/lib/dbus.
17
В этом случае вы должны по крайней мере убедиться, что два файла не содержат разных значений.
благодарность
@grawity Самый простой способ сделать это - не иметь два отдельных файла. Знаете ли вы дистрибутивы, которые имеют отдельные файлы (то есть два обычных файла, а не один обычный файл и одну символическую ссылку)?
HVd
Что бы ни использовал дистрибутив OP, по-видимому, в оригинальном посте показано, как systemd-machine-id-setupнайти копию оригинального значения. Это в основном поведение по умолчанию, если дистрибутив специально не создает символическую ссылку.
Гравитация
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). Это вариант 1 на странице руководства, на которую вы ссылаетесь. Удаление файла (ов) и перезагрузка осуществят вариант 4.

В интересах читателей, планирующих клонировать диск таким способом, рекомендуемый подход с systemd, по крайней мере в тех системах, где systemd-firstbootон доступен, состоит в том, чтобы использовать вместо этого:

  1. клонировать диск;
  2. смонтировать клонированный корневой раздел куда-нибудь ( например /mnt );
  3. инициализировать идентификатор машины:

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

Вы можете использовать systemd-firstbootдля настройки других параметров, пока вы находитесь на нем (имя хоста, пароль root и т. Д.).

Стивен Китт
источник
Стоит отметить, что в Ubuntu 16.04 и 17.10 /etc/machine-idон не воссоздается автоматически, если он удален, и не systemd-firstbootдоступен. Поэтому, как только вы удалите этот файл, вы должны вручную восстановить его, используя systemd-machine-id-setup(и, возможно, перезагрузить также).
Герлос
Еще один момент: часто /var/lib/dbus/machine-idэто просто символическая ссылка /etc/machine-id, поэтому нет необходимости копировать содержимое из одного файла в другой.
Герлос
1
@gerlos да, отсюда и «может понадобиться»; но я также сделал это явным, еще раз спасибо.
Стивен Китт
Почему даже существует потребность в уникальной machine-idD-Bus, поскольку D-Bus является только внутрисистемным механизмом IPC?
fpmurphy