Czy można zmienić / etc / machine-id?


33

Sklonowałem dysk (SSD) i umieściłem sklonowany dysk w innej maszynie. Teraz oba systemy mają tę samą wartość /etc/machine-id. Czy po prostu edytujesz, /etc/machine-idżeby zmienić wartość? Czy mogę to zrobić, gdy system jest uruchomiony (czy muszę uruchomić system z Live USB)?

Czy systemd-machine-id-setuplepsza alternatywa?

Naiwne użycie systemd-machine-id-setupnie działa. Próbowałem tych kroków:

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

Nowa wartość jest taka sama jak stara wartość.


wygląda na to, że jest ok
jestem najbardziej głupią osobą

1
Ponieważ D-Bus nie jest mechanizmem między hostami, jaka to różnica, czy hosty mają to samo machine-id?
fpmurphy

Odpowiedzi:


28

Chociaż systemd-machine-id-setupi systemd-firstbootsą świetne dla systemów korzystających z systemd, /etc/machine-idnie jest plikiem systemowym, pomimo znacznika. Jest również używany w systemach, które nie używają systemd. Alternatywnie możesz użyć dbus-uuidgennarzędzia:

rm -f /etc/machine-id

i wtedy

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

Jak wspomniano Stephen Kitt, systemy Debian mogą mieć zarówno plik, jak /etc/machine-idi /var/lib/dbus/machine-idplik. Jeśli oba istnieją jako zwykłe pliki, ich zawartość powinna się zgadzać, dlatego też usuń /var/lib/dbus/machine-id:

rm /var/lib/dbus/machine-id

i utwórz go ponownie:

dbus-uuidgen --ensure

To ostatnie polecenie domyślnie używa /var/lib/dbus/machine-idjako nazwy pliku i kopiuje identyfikator komputera z nowo wygenerowanego /etc/machine-id.

dbus-uuidgenInwokacja może lub nie może być już częścią zwykłej sekwencji rozruchowej. Jeśli jest to część sekwencji rozruchowej, usunięcie pliku i ponowne uruchomienie powinno wystarczyć. Jeśli musisz dbus-uuidgensam uruchomić , zwróć uwagę na ostrzeżenie na stronie podręcznika:

Jeśli spróbujesz zmienić istniejący identyfikator komputera w działającym systemie, prawdopodobnie spowoduje to złe rzeczy. Nie próbuj zmieniać tego pliku. Nie rób też tego samego na dwóch różnych systemach; musi być inny za każdym razem, gdy działają dwa różne jądra.

Po wykonaniu tej czynności zdecydowanie nie kontynuuj korzystania z systemu bez ponownego uruchamiania. Jako dodatkowy środek ostrożności możesz zamiast tego ponownie uruchomić komputer w trybie ratunkowym (lub, jak sugerowałeś, uruchomić komputer z pamięci USB na żywo), ale z mojego doświadczenia nie jest to konieczne. Złe rzeczy mogą się zdarzyć, ale i tak złe rzeczy są naprawiane przez restart.


2
Jak zrozumiałem, identyfikator maszyny D-Bus był / jest przechowywany /var/lib/dbus/machine-idi /etc/machine-idjest systemd-ism (który jest zgodny z D-Bus).
Stephen Kitt

2
@StephenKitt Wierzę, że masz rację historycznie, ale biorąc pod uwagę, że D-Bus akceptuje go /etcteraz bezpośrednio (nie jest potrzebne łącze symboliczne), można go tam umieścić tylko dla uproszczenia: jest więcej kodu, który tylko sprawdza /etcniż tylko sprawdza /var/lib/dbus.
hvd

W takim przypadku powinieneś przynajmniej upewnić się, że dwa pliki nie zawierają różnych wartości.
grawity

@grawity Najłatwiej to zrobić, nie mając dwóch osobnych plików. Czy znasz dystrybucje, które mają osobne pliki (czyli dwa zwykłe pliki, a nie jeden zwykły plik i jedno dowiązanie symboliczne)?
hvd

Jakiekolwiek użycie OP używa, jak widać, ponieważ oryginalny post pokazuje systemd-machine-id-setupznalezienie w nim kopii oryginalnej wartości. Jest to w zasadzie zachowanie domyślne, chyba że dystrybucja specjalnie tworzy dowiązanie symboliczne.
grawity

29

Najłatwiejszą opcją jest usunięcie /etc/machine-idna sklonowanym dysku i ponowne uruchomienie; systemd-machine-id-setupwygeneruje dla Ciebie nowy (musisz uruchomić go ręcznie, jeśli nie nastąpi to automatycznie). Być może trzeba będzie usunąć /var/lib/dbus/machine-id(jeśli nie jest to dowiązanie symboliczne /etc/machine-id); w takim przypadku należy upewnić się, że nowy machine-idnaprawdę jest nowy i kopiowanie plików, tak że /etc/machine-idi /var/lib/dbus/machine-idzawierają tę samą wartość.

Jak się dowiedziałeś, uruchomienie systemd-machine-id-setupw systemie, który został uruchomiony z /etc/machine-idplikiem, po prostu przywróci identyfikator, z którego został uruchomiony (z identyfikatora komputera D-Bus). Jest to opcja 1 na stronie podręcznej, z którą masz link. Usunięcie pliku (ów) i ponowne uruchomienie spowoduje wykonanie opcji 4.

Z korzyścią dla czytelników planujących klonowanie dysku w ten sposób, zalecane podejście z systemd, przynajmniej na systemach, gdzie systemd-firstbootjest on dostępny, to użycie tego zamiast:

  1. klonuj dysk;
  2. zamontuj gdzieś sklonowaną partycję główną ( np. /mnt );
  3. zainicjuj identyfikator komputera:

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

Możesz użyć, systemd-firstbootaby ustawić inne parametry, gdy jesteś przy nim (nazwa hosta, hasło roota itp.).


Warto zauważyć, że w Ubuntu 16.04 i 17.10 /etc/machine-idnie jest automatycznie odtwarzany, jeśli zostanie usunięty, żadne nie systemd-firstbootjest dostępne. Po usunięciu tego pliku należy ręcznie ponownie go utworzyć za pomocą systemd-machine-id-setup(i być może również zrestartować komputer).
gerlos

Kolejna kwestia: często /var/lib/dbus/machine-idjest tylko dowiązaniem symbolicznym /etc/machine-id, więc nie ma potrzeby kopiowania zawartości z jednego pliku do drugiego.
gerlos

1
@gerlos tak, stąd „może trzeba”; ale ja też wyraźnie to wyraziłem, dzięki jeszcze raz.
Stephen Kitt

Dlaczego istnieje nawet potrzeba zastosowania unikalnego machine-iddla D-Bus, skoro D-Bus jest tylko wewnątrzsystemowym mechanizmem IPC?
fpmurphy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.