Não há problema em alterar / etc / machine-id?


33

Clonei um disco (SSD) e coloquei o disco clonado em outra máquina. Agora, ambos os sistemas têm o mesmo valor em /etc/machine-id. É algum problema simplesmente editar /etc/machine-idpara alterar o valor? Posso fazer isso enquanto o sistema está em execução (ou preciso inicializar a partir de um Live USB)?

É systemd-machine-id-setupuma alternativa melhor?

O uso ingênuo de systemd-machine-id-setupnão funciona. Eu tentei estas etapas:

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

O novo valor é o mesmo que o valor antigo.



1
Como o D-Bus não é um mecanismo entre hosts, que diferença faz se os hosts têm o mesmo machine-id?
precisa saber é

Respostas:


28

Embora systemd-machine-id-setupe systemd-firstbootseja ótimo para sistemas que usam systemd, /etc/machine-idnão é um arquivo systemd, apesar da tag. Também é usado em sistemas que não usam o systemd. Portanto, como alternativa, você pode usar a dbus-uuidgenferramenta:

rm -f /etc/machine-id

e depois

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

Como mencionado por Stephen Kitt, os sistemas Debian podem ter um /etc/machine-ide um /var/lib/dbus/machine-idarquivo. Se ambos existirem como arquivos regulares, seu conteúdo deve corresponder, então remova também /var/lib/dbus/machine-id:

rm /var/lib/dbus/machine-id

e recrie-o:

dbus-uuidgen --ensure

Esse último comando usa implicitamente /var/lib/dbus/machine-idcomo o nome do arquivo e copiará o ID da máquina do já gerado recentemente /etc/machine-id.

A dbus-uuidgenchamada pode ou já não faz parte da sequência de inicialização regular. Se fizer parte da sequência de inicialização, remover o arquivo e reinicializar deve ser suficiente. Se você precisar executar dbus-uuidgen, preste atenção ao aviso na página de manual:

Se você tentar alterar um ID de máquina existente em um sistema em execução, provavelmente resultará em coisas ruins acontecendo. Não tente alterar este arquivo. Além disso, não faça o mesmo em dois sistemas diferentes; ele precisa ser diferente sempre que houver dois kernels diferentes em execução.

Então, depois de fazer isso, definitivamente não continue usando o sistema sem reiniciar. Como precaução extra, você pode reiniciar primeiro no modo de recuperação (ou, como sugeriu, inicializar a partir de um stick USB ativo), mas, pela minha experiência, isso não é necessário. Coisas ruins podem acontecer, mas as coisas ruins que acontecem são corrigidas pela reinicialização de qualquer maneira.


2
Pelo que entendi, o ID da máquina D-Bus foi / é armazenado /var/lib/dbus/machine-ide /etc/machine-idé um systemd-ism (compatível com o D-Bus).
Stephen Kitt

2
@StephenKitt Acredito que você esteja certo historicamente, mas, como o D-Bus o aceita /etcdiretamente hoje em dia (não é necessário um link simbólico), ele pode ser colocado lá apenas por simplicidade: há mais código por aí que verifica apenas /etcdo que apenas verifica /var/lib/dbus.
hvd

Nesse caso, você deve pelo menos garantir que os dois arquivos não contenham valores diferentes.
grawity

@rawrawity A maneira mais fácil de fazer isso é não ter dois arquivos separados em primeiro lugar. Você conhece distros que possuem arquivos separados (ou seja, dois arquivos regulares, não um arquivo regular e um link simbólico)?
hvd

Qualquer distro que o OP use, aparentemente, porque o post original mostra a localização de systemd-machine-id-setupuma cópia do valor original. Esse é basicamente o comportamento padrão, a menos que uma distro crie o link simbólico especialmente.
grawity

29

A opção mais fácil é excluir /etc/machine-idno disco clonado e reiniciar; systemd-machine-id-setupirá gerar um novo para você (você precisará executá-lo manualmente se isso não acontecer automaticamente). Você também pode precisar excluir /var/lib/dbus/machine-id(se não for um link simbólico para /etc/machine-id); Nesse caso, certifique-se que o novo machine-idrealmente é novo, e copiar os arquivos para que /etc/machine-ide /var/lib/dbus/machine-idcontêm o mesmo valor.

Como você descobriu, a execução systemd-machine-id-setupem um sistema que foi inicializado com um /etc/machine-idarquivo simplesmente restaurará o identificador com o qual foi inicializado (a partir da identificação da máquina D-Bus). Esta é a opção 1 na página de manual à qual você vinculou. A exclusão do (s) arquivo (s) e a reinicialização exercitarão a opção 4.

Para o benefício dos leitores que planejam clonar um disco dessa maneira, a abordagem recomendada com systemd, pelo menos nos sistemas onde systemd-firstbootestiver disponível, é usá-lo:

  1. clonar o disco;
  2. monte a partição raiz clonada em algum lugar ( por exemplo /mnt );
  3. inicialize o ID da máquina:

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

Você pode usar systemd-firstbootpara configurar outros parâmetros enquanto estiver trabalhando (nome do host, senha root etc.).


Vale ressaltar que no Ubuntu 16.04 e 17.10 /etc/machine-idnão é recriado automaticamente se removido, nem systemd-firstbootestá disponível. Portanto, depois de remover esse arquivo, você deve recriá-lo manualmente usando systemd-machine-id-setup(e talvez reiniciar também).
gerlos

Outro ponto: geralmente /var/lib/dbus/machine-idé apenas um link simbólico /etc/machine-id, portanto, não há necessidade de copiar o conteúdo de um arquivo para o outro.
gerlos

1
@gerlos sim, daí o "pode ​​precisar"; mas também expliquei isso, obrigado novamente.
Stephen Kitt

Por que existe a necessidade de um machine-idD-Bus exclusivo, já que o D-Bus é apenas um mecanismo IPC intra-sistema?
precisa saber é
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.