สามารถเปลี่ยน / etc / machine-id ได้ไหม


33

ฉันโคลนดิสก์ (SSD) และนำดิสก์ที่โคลนไปไว้ในเครื่องอื่น /etc/machine-idตอนนี้ทั้งสองระบบมีค่าเดียวกันใน เป็นปัญหาหรือไม่เพียงแค่แก้ไข/etc/machine-idเพื่อเปลี่ยนค่า ฉันสามารถทำได้ในขณะที่ระบบกำลังทำงาน (หรือฉันต้องบูตจาก Live 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 แม้จะมีแท็ก มันยังใช้กับระบบที่ไม่ได้ใช้ systemd เพื่อเป็นทางเลือกคุณสามารถใช้dbus-uuidgenเครื่องมือนี้:

rm -f /etc/machine-id

แล้ว

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

ดังที่สตีเฟ่นคิตต์กล่าวถึงระบบ Debian อาจมีทั้งไฟล์/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ด้วยตนเองให้ใส่ใจกับคำเตือนในหน้า man:

หากคุณพยายามเปลี่ยนรหัสเครื่องที่มีอยู่ในระบบที่ใช้งานอยู่อาจจะส่งผลให้เกิดสิ่งเลวร้ายได้ อย่าพยายามเปลี่ยนไฟล์นี้ นอกจากนี้อย่าทำให้เหมือนกันในสองระบบที่แตกต่างกัน มันจะต้องมีความแตกต่างกันทุกครั้งที่มีเมล็ดที่แตกต่างกันสองตัวที่ทำงานอยู่

ดังนั้นหลังจากทำเช่นนี้อย่าใช้ระบบโดยไม่ต้องรีบูตเครื่อง เพื่อเป็นการป้องกันไว้ล่วงหน้าคุณสามารถรีบูทก่อนเข้าสู่โหมดช่วยเหลือ (หรือตามที่คุณแนะนำบูตจากแท่ง USB สด) แต่จากประสบการณ์ของฉันนั่นไม่จำเป็น สิ่งเลวร้ายอาจเกิดขึ้น แต่สิ่งที่ไม่ดีที่เกิดขึ้นได้รับการแก้ไขโดยการรีบูตอย่างไรก็ตาม


2
ตามที่ฉันเข้าใจสิ่งต่าง ๆ รหัสเครื่อง D-Bus ถูก / เก็บไว้/var/lib/dbus/machine-idและ/etc/machine-idเป็น systemd-ism (ซึ่งเข้ากันได้กับ D-Bus)
สตีเฟ่น Kitt

2
@StephenKitt ผมเชื่อว่าคุณขวาในอดีต แต่รับว่า D-Bus ยอมรับ/etcโดยตรงในปัจจุบัน (ไม่ symlink จำเป็น) ก็อาจจะใส่ในมีเพียงแค่สำหรับความเรียบง่าย: มีรหัสมากยิ่งขึ้นมีการตรวจสอบว่ามีเพียงกว่านั้นการตรวจสอบเท่านั้น/etc /var/lib/dbus
hvd

ในกรณีนี้อย่างน้อยที่สุดคุณควรตรวจสอบให้แน่ใจว่าไฟล์สองไฟล์ไม่มีค่าแตกต่างกัน
grawity

@grawity วิธีที่ง่ายที่สุดในการทำเช่นนั้นคือการไม่มีไฟล์แยกกันสองไฟล์ตั้งแต่แรก คุณรู้จัก distros ที่มีไฟล์แยกกันหรือไม่ (หมายถึงไฟล์ปกติสองไฟล์ไม่ใช่ไฟล์ปกติหนึ่งไฟล์และ symlink หนึ่งไฟล์)
hvd

ไม่ว่า Distro OP จะใช้อะไรก็ตามเนื่องจากโพสต์ต้นฉบับแสดงsystemd-machine-id-setupการค้นหาสำเนาของค่าดั้งเดิมในนั้น นั่นเป็นพฤติกรรมเริ่มต้นเว้นแต่ distro จะสร้าง symlink เป็นพิเศษ
grawity

29

ตัวเลือกที่ง่ายที่สุดคือการลบ/etc/machine-idบนดิสก์ที่โคลนและรีบูต systemd-machine-id-setupจะสร้างใหม่ให้คุณ (คุณจะต้องเรียกใช้ด้วยตนเองหากสิ่งนี้ไม่เกิดขึ้นโดยอัตโนมัติ) คุณอาจต้องลบ/var/lib/dbus/machine-id(หากไม่ใช่ symlink /etc/machine-id) ในกรณีที่ตรวจสอบให้แน่ใจว่าใหม่machine-idจริงๆเป็นของใหม่และคัดลอกไฟล์เพื่อให้/etc/machine-idและ/var/lib/dbus/machine-idมีค่าเท่ากัน

เมื่อคุณพบว่าการรันsystemd-machine-id-setupบนระบบที่บู๊ตด้วย/etc/machine-idไฟล์จะทำการกู้คืนตัวระบุที่ถูกบูทด้วย (จากรหัสเครื่อง D-Bus) นี่คือตัวเลือก 1 ใน manpage ที่คุณเชื่อมโยง การลบไฟล์และการรีบูตเครื่องจะใช้ตัวเลือก 4

เพื่อประโยชน์ของผู้อ่านที่วางแผนในการโคลนดิสก์ด้วยวิธีนี้แนวทางที่แนะนำกับ systemd อย่างน้อยในระบบที่systemd-firstbootมีให้ใช้คือการใช้สิ่งนั้นแทน:

  1. โคลนดิสก์
  2. ติดตั้งพาร์ทิชันรากโคลนที่อื่น ( เช่น /mnt );
  3. เริ่มต้นรหัสเครื่อง:

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

คุณสามารถใช้systemd-firstbootเพื่อตั้งค่าพารามิเตอร์อื่น ๆ ได้ในขณะที่คุณอยู่ที่นั่น (ชื่อโฮสต์รหัสผ่านรูทเป็นต้น)


เป็นที่น่าสังเกตว่าใน Ubuntu 16.04 และ 17.10 /etc/machine-idจะไม่ถูกสร้างขึ้นใหม่โดยอัตโนมัติหากถูกลบออกและไม่systemd-firstbootสามารถใช้งานได้ ดังนั้นเมื่อคุณลบไฟล์คุณควรสร้างใหม่ด้วยตนเองโดยใช้systemd-machine-id-setup(และอาจรีบูตด้วย)
gerlos

อีกจุดหนึ่ง: บ่อยครั้ง/var/lib/dbus/machine-idเป็นเพียง symlink ไป/etc/machine-idดังนั้นจึงไม่จำเป็นต้องคัดลอกเนื้อหาจากไฟล์หนึ่งไปยังอีก
gerlos

1
@gerlos ใช่ดังนั้น "อาจต้อง"; แต่ฉันก็ได้อธิบายเช่นนั้นด้วยขอบคุณอีกครั้ง
สตีเฟ่น Kitt

ทำไมถึงมีความจำเป็นสำหรับmachine-idD-Bus ที่ไม่เหมือนใครเนื่องจาก D-Bus เป็นเพียงกลไก IPC ภายในระบบ?
fpmurphy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.