Гаразд змінити / etc / machine-id?


33

Я клонував диск (SSD) і поклав клонований диск в іншу машину. Тепер обидві системи мають однакове значення в /etc/machine-id. Чи є проблема просто редагувати, /etc/machine-idщоб змінити значення? Чи можу я це зробити під час роботи системи (чи потрібно завантажуватися з живого 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
Оскільки D-Bus не є механізмом між хостами, яку різницю має те, чи мають хости однакові machine-id?
fpmurphy

Відповіді:


28

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

rm -f /etc/machine-id

і потім

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

Як згадував Стівен Кітт, системи Debian можуть мати і a, /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-накопичувача), але, з мого досвіду, це не потрібно. Погані речі можуть трапитися, але погані речі, які трапляються, все одно виправляються перезавантаженням.


2
Як я зрозумів, ідентифікатор машини D-Bus був / зберігається в /var/lib/dbus/machine-idі /etc/machine-idявляє собою системний режим (сумісний з D-Bus).
Стівен Кітт

2
@StephenKitt Я вважаю, що ти маєш рацію в історичному відношенні, але, враховуючи, що D-Bus приймає його /etcпрямо зараз (не потрібна символьна посилання), він може бути введений туди просто для простоти: там є більше коду, який лише перевіряє, /etcніж це лише перевіряє /var/lib/dbus.
hvd

У такому випадку вам слід принаймні переконатися, що два файли не містять різних значень.
grawity

@grawity Найпростіший спосіб зробити це - не мати в першу чергу двох окремих файлів. Чи знаєте ви про дистрибутиви, які мають окремі файли (тобто два звичайних файли, не один звичайний файл та одне символьне посилання)?
hvd

Який би дистрибутив не використовував, очевидно, як оригінальний пост показує, що systemd-machine-id-setupтам знайдеться копія оригінального значення. Це в основному поведінка за замовчуванням, якщо distro спеціально не створює симпосилання.
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). Це варіант 1 на сторінці, на яку ви пов’язані. Видалення файлів і перезавантаження буде використовувати варіант 4.

На користь читачів, які планують таким чином клонувати диск, рекомендований підхід із системою, принаймні, у системах, де 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(а можливо, і перезавантажити також).
gerlos

Ще один момент: часто /var/lib/dbus/machine-idце просто символьне посилання на /etc/machine-id, тому не потрібно копіювати вміст з одного файлу в інший.
gerlos

1
@gerlos так, отже, "можливо, потрібно"; але я теж зробив це явне, ще раз дякую.
Стівен Кітт

Чому навіть існує потреба в унікальному machine-idдля D-Bus, оскільки D-Bus є лише внутрішньосистемним механізмом IPC?
fpmurphy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.