Bạn có thể thay đổi / etc / machine-id không?


33

Tôi đã nhân bản một đĩa (SSD) và đặt đĩa nhân bản vào một máy khác. Bây giờ cả hai hệ thống có cùng giá trị trong /etc/machine-id. Có bất kỳ vấn đề chỉ đơn giản là chỉnh sửa /etc/machine-idđể thay đổi giá trị? Tôi có thể làm điều này trong khi hệ thống đang chạy (hoặc tôi cần khởi động từ USB trực tiếp)?

systemd-machine-id-setupmột sự thay thế tốt hơn?

Việc sử dụng ngây thơ systemd-machine-id-setupkhông làm việc. Tôi đã thử các bước sau:

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

Giá trị mới giống với giá trị cũ.


có vẻ như là ổn
tôi là người ngu ngốc nhất

1
Vì D-Bus không phải là một cơ chế liên máy chủ, nên có sự khác biệt nào cho dù các máy chủ có giống nhau machine-idkhông?
fpmurphy

Câu trả lời:


28

Mặc dù systemd-machine-id-setupsystemd-firstbootrất tốt cho các hệ thống sử dụng systemd, nhưng /etc/machine-idkhông phải là tệp systemd, mặc dù có thẻ. Nó cũng được sử dụng trên các hệ thống không sử dụng systemd. Vì vậy, để thay thế, bạn có thể sử dụng dbus-uuidgencông cụ:

rm -f /etc/machine-id

và sau đó

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

Như Stephen Kitt đã đề cập, các hệ thống Debian có thể có cả tệp /etc/machine-id/var/lib/dbus/machine-idtệp. Nếu cả hai tồn tại dưới dạng tệp thông thường, nội dung của chúng phải khớp, do đó, cũng xóa /var/lib/dbus/machine-id:

rm /var/lib/dbus/machine-id

và tạo lại nó:

dbus-uuidgen --ensure

Lệnh cuối cùng này hoàn toàn sử dụng /var/lib/dbus/machine-idlàm tên tệp và sẽ sao chép ID máy từ tên mới được tạo /etc/machine-id.

Lệnh dbus-uuidgengọi có thể hoặc không phải là một phần của chuỗi khởi động thông thường. Nếu nó là một phần của trình tự khởi động, thì việc xóa tệp và khởi động lại là đủ. Nếu bạn cần tự chạy dbus-uuidgen, hãy chú ý đến cảnh báo trong trang man:

Nếu bạn cố gắng thay đổi id máy hiện có trên một hệ thống đang chạy, nó có thể sẽ dẫn đến những điều tồi tệ xảy ra. Đừng cố gắng thay đổi tập tin này. Ngoài ra, đừng làm cho nó giống nhau trên hai hệ thống khác nhau; nó cần phải khác nhau bất cứ lúc nào có hai hạt nhân khác nhau đang chạy.

Vì vậy, sau khi làm điều này, chắc chắn không tiếp tục sử dụng hệ thống mà không khởi động lại. Để phòng ngừa thêm, trước tiên bạn có thể khởi động lại vào chế độ cứu hộ (hoặc như bạn đề xuất, khởi động từ thanh USB trực tiếp), nhưng theo kinh nghiệm của tôi, điều đó là không cần thiết. Những điều tồi tệ có thể xảy ra, nhưng những điều tồi tệ xảy ra vẫn được khắc phục bằng cách khởi động lại.


2
Theo tôi hiểu, id máy D-Bus đã / được lưu trữ /var/lib/dbus/machine-id/etc/machine-idlà một systemd-ism (tương thích với D-Bus).
Stephen Kitt

2
@StephenKitt Tôi tin rằng bạn đúng về mặt lịch sử nhưng hiện tại D-Bus chấp nhận nó /etctrực tiếp (không cần liên kết tượng trưng), nó có thể được đưa vào đó chỉ vì đơn giản: có nhiều mã chỉ kiểm tra /etchơn là chỉ kiểm tra /var/lib/dbus.
hvd

Trong trường hợp đó, ít nhất bạn nên đảm bảo hai tệp không chứa các giá trị khác nhau.
grawity

@grawity Cách dễ nhất để làm điều đó là không có hai tệp riêng biệt ở vị trí đầu tiên. Bạn có biết các bản phân phối có các tệp riêng biệt (nghĩa là hai tệp thông thường, không phải một tệp thông thường và một liên kết tượng trưng) không?
hvd

Bất cứ bản phân phối nào OP sử dụng, rõ ràng, như bài đăng gốc cho thấy systemd-machine-id-setupviệc tìm một bản sao của giá trị ban đầu trong đó. Về cơ bản đó là hành vi mặc định trừ khi một bản phân phối đặc biệt tạo liên kết tượng trưng.
grawity

29

Tùy chọn đơn giản nhất là xóa /etc/machine-idtrên đĩa nhân bản và khởi động lại; systemd-machine-id-setupsẽ tạo một cái mới cho bạn (bạn sẽ cần chạy thủ công nếu điều này không tự động xảy ra). Bạn cũng có thể cần phải xóa /var/lib/dbus/machine-id(nếu đó không phải là một liên kết tượng trưng /etc/machine-id); trong trường hợp đó, hãy chắc chắn rằng mới machine-idthực sự là mới, và sao chép các tập tin do đó /etc/machine-id/var/lib/dbus/machine-idchứa cùng giá trị.

Như bạn đã tìm ra, chạy systemd-machine-id-setuptrên một hệ thống được khởi động bằng một /etc/machine-idtệp sẽ chỉ cần khôi phục mã định danh mà nó đã được khởi động (từ id máy D-Bus). Đây là tùy chọn 1 trong trang chủ bạn liên kết đến. Xóa (các) tệp và khởi động lại sẽ thực hiện tùy chọn 4.

Vì lợi ích của người đọc lập kế hoạch nhân bản đĩa theo cách này, cách tiếp cận được đề xuất với systemd, ít nhất là trên các hệ thống systemd-firstbootcó sẵn, là sử dụng thay thế:

  1. nhân bản đĩa;
  2. gắn kết phân vùng gốc nhân bản ở đâu đó ( ví dụ /mnt );
  3. khởi tạo id máy:

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

Bạn có thể sử dụng systemd-firstbootđể thiết lập các tham số khác trong khi bạn ở đó (tên máy chủ, mật khẩu gốc, v.v.).


Điều đáng chú ý là trên Ubuntu 16.04 và 17.10, /etc/machine-idnó không được tự động tạo lại nếu bị xóa, không systemd-firstbootcó sẵn. Vì vậy, một khi bạn xóa tệp đó, bạn nên tự tạo lại nó bằng cách sử dụng systemd-machine-id-setup(và có thể khởi động lại).
gerlos

Một điểm khác: thường /var/lib/dbus/machine-idchỉ là một liên kết tượng trưng /etc/machine-id, vì vậy không cần phải sao chép nội dung từ tệp này sang tệp khác.
gerlos

1
@gerlos vâng, do đó, người Viking có thể cần đến; nhưng tôi cũng đã nói rõ điều đó rồi, cảm ơn lần nữa
Stephen Kitt

Tại sao thậm chí cần có một machine-idD-Bus duy nhất vì D-Bus chỉ là một cơ chế IPC nội bộ?
fpmurphy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.