Tidak apa-apa untuk mengubah / etc / machine-id?

33

Saya mengkloning disk (SSD) dan memasukkan disk kloning ke komputer lain. Sekarang kedua sistem memiliki nilai yang sama di /etc/machine-id. Apakah ada masalah untuk mengedit hanya /etc/machine-iduntuk mengubah nilai? Bisakah saya melakukan ini saat sistem sedang berjalan (atau apakah saya perlu boot dari USB Live)?

Apakah systemd-machine-id-setupalternatif yang lebih baik?

Penggunaan naif systemd-machine-id-setuptidak berhasil. Saya mencoba langkah-langkah ini:

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

Nilai baru sama dengan nilai lama.

MountainX
sumber
sepertinya tidak apa
Saya Orang Paling Bodoh
1
Karena D-Bus bukan mekanisme antar-host, apa bedanya apakah host memiliki yang sama machine-id?
fpmurphy

Jawaban:

28

Meskipun systemd-machine-id-setupdan systemd-firstbootbagus untuk sistem yang menggunakan systemd, /etc/machine-idbukan file systemd, terlepas dari tag. Ini juga digunakan pada sistem yang tidak menggunakan systemd. Jadi sebagai alternatif, Anda dapat menggunakan dbus-uuidgenalat ini:

rm -f /etc/machine-id

lalu

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

Seperti yang disebutkan oleh Stephen Kitt, sistem Debian mungkin memiliki a /etc/machine-iddan /var/lib/dbus/machine-idfile. Jika keduanya ada sebagai file biasa, isinya harus cocok, maka di sana juga hapus /var/lib/dbus/machine-id:

rm /var/lib/dbus/machine-id

dan buat kembali:

dbus-uuidgen --ensure

Perintah terakhir ini secara implisit digunakan /var/lib/dbus/machine-idsebagai nama file dan akan menyalin ID mesin dari yang baru dibuat /etc/machine-id.

The dbus-uuidgendoa mungkin atau mungkin tidak sudah menjadi bagian dari urutan boot biasa. Jika itu adalah bagian dari urutan boot, maka menghapus file dan me-reboot harus cukup. Jika Anda perlu menjalankan dbus-uuidgensendiri, perhatikan peringatan di halaman manual:

Jika Anda mencoba mengubah mesin-id yang ada pada sistem yang sedang berjalan, itu mungkin akan mengakibatkan hal-hal buruk terjadi. Jangan mencoba mengubah file ini. Juga, jangan membuatnya sama pada dua sistem yang berbeda; itu harus berbeda kapan saja ada dua kernel yang berbeda berjalan.

Jadi setelah melakukan ini, pasti jangan terus menggunakan sistem tanpa me-reboot. Sebagai tindakan pencegahan tambahan, Anda dapat reboot terlebih dahulu ke mode penyelamatan (atau seperti yang Anda sarankan, boot dari stik USB langsung), tetapi dari pengalaman saya, itu tidak perlu. Hal-hal buruk dapat terjadi, tetapi hal-hal buruk yang terjadi tetap diperbaiki oleh reboot.

hvd
sumber
2
Seperti yang saya pahami, id mesin D-Bus disimpan / disimpan /var/lib/dbus/machine-id, dan /etc/machine-idmerupakan systemd-isme (yang kompatibel dengan D-Bus).
Stephen Kitt
2
@StephenKitt Saya percaya Anda benar secara historis tetapi mengingat bahwa D-Bus menerimanya /etclangsung saat ini (tidak ada symlink diperlukan), mungkin diletakkan di sana hanya untuk kesederhanaan: ada lebih banyak kode di luar sana yang hanya memeriksa /etcdaripada hanya memeriksa /var/lib/dbus.
hvd
Dalam hal ini Anda setidaknya harus memastikan kedua file tidak mengandung nilai yang berbeda.
grawity
@grawity Cara termudah untuk melakukannya adalah dengan tidak memiliki dua file terpisah di tempat pertama. Apakah Anda tahu distro yang memiliki file terpisah (artinya, dua file biasa, bukan satu file biasa dan satu symlink)?
hvd
Apa pun distro yang digunakan OP, tampaknya, ketika pos asli menunjukkan systemd-machine-id-setupmenemukan salinan nilai asli di sana. Itu pada dasarnya perilaku default kecuali distro khusus menciptakan symlink.
grawity
29

Opsi termudah adalah menghapus /etc/machine-idpada disk kloning dan reboot; systemd-machine-id-setupakan menghasilkan yang baru untuk Anda (Anda harus menjalankannya secara manual jika ini tidak terjadi secara otomatis). Anda mungkin juga perlu menghapus /var/lib/dbus/machine-id(jika itu bukan symlink ke /etc/machine-id); dalam kasus itu, pastikan bahwa baru machine-idbenar-benar baru, dan menyalin file sehingga /etc/machine-iddan /var/lib/dbus/machine-idmengandung nilai yang sama.

Ketika Anda mengetahuinya, menjalankan systemd-machine-id-setupsistem yang di-boot dengan /etc/machine-idfile akan dengan mudah mengembalikan pengenal yang di-boot-nya (dari id mesin D-Bus). Ini adalah opsi 1 di halaman yang Anda tautkan. Menghapus file dan mem-boot ulang akan menjalankan opsi 4.

Untuk kepentingan pembaca yang berencana mengkloning disk dengan cara ini, pendekatan yang disarankan dengan systemd, setidaknya pada sistem di mana systemd-firstboottersedia, adalah dengan menggunakannya:

  1. mengkloning disk;
  2. pasang partisi root yang dikloning di suatu tempat ( misalnya /mnt );
  3. inisialisasi id mesin:

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

Anda dapat menggunakan systemd-firstbootuntuk mengatur parameter lain saat Anda berada di sana (nama host, kata sandi root dll.).

Stephen Kitt
sumber
Perlu dicatat bahwa pada Ubuntu 16.04 dan 17.10 /etc/machine-idtidak dibuat ulang secara otomatis jika dihapus, tidak systemd-firstbootada yang tersedia. Jadi, begitu Anda menghapus file itu, Anda harus membuatnya secara manual menggunakan systemd-machine-id-setup(dan mungkin reboot, juga).
gerlos
Hal lain: sering kali /var/lib/dbus/machine-idhanya symlink /etc/machine-id, jadi tidak perlu menyalin konten dari satu file ke yang lain.
gerlos
1
@gerlos ya, maka "mungkin perlu"; tapi saya sudah membuatnya eksplisit juga, terima kasih lagi.
Stephen Kitt
Mengapa bahkan ada kebutuhan untuk machine-idD-Bus yang unik karena D-Bus hanyalah mekanisme IPC intra-sistem?
fpmurphy