Гаразд змінити / 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.