วิธีการเปลี่ยน UUID ของระบบไฟล์ (2 UUID เดียวกัน)


26

ฉันมีระบบปฏิบัติการ guest fedora ใน VMware ฉันต้องการขยาย/bootพาร์ติชันดังนั้นฉันจึงเพิ่มดิสก์เสมือนอื่นลงใน VM นี้และลองโคลนดิสก์

หลังจากนั้นdd if=/dev/sda1 of=/dev/sdb1ให้blkidรายงานว่า/ dev / sda1และ/ dev / sdb1มี UUID / GUID เดียวกัน

เป็นเรื่องแปลกที่มี UUID เดียวกัน 2 ตัวในจักรวาลจะเปลี่ยนค่าหนึ่งให้เป็นค่า UUID อื่นได้อย่างไร


อัปเดต 2017-01-25

เรื่องเปลี่ยนไป UUID ที่นี่หมายถึง UUID ของระบบไฟล์ไม่ใช่พาร์ติชัน UUID

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


10
มันไม่แปลกเลย เมื่อคุณโคลนพาร์ติชันด้วย dd แน่นอนว่าการโคลนจะมี UUID เหมือนกับต้นฉบับ UUID เป็นเพียงข้อมูลเมตาของพาร์ติชัน - ไม่ใช่คุณสมบัติที่มีอยู่จริงของฟิสิคัลดิสก์
Andrew Medico

ขอบคุณ Andrew ฉันคิดว่า UUID เป็นค่าที่คำนวณมาก่อนเมื่อสร้างพาร์ติชันใหม่ ตอนนี้ฉันรู้ว่ามันเป็นเพียงข้อมูลเมตาดาต้า

คำตอบ:


27

ในการสร้าง UUID ใหม่แบบสุ่มเราสามารถใช้:

$ uuidgen

หากต้องการเปลี่ยน UUID จริงๆแล้วระบบไฟล์จะขึ้นอยู่กับ

สมมติว่าระบบไฟล์ ext-family

# tune2fs -U <output of uuidgen> /dev/sdb1

หรือถ้าคุณมั่นใจว่า uuidgen กำลังจะไปทำงาน:

# tune2fs -U $(uuidgen) /dev/sdb1

สมมติว่าระบบไฟล์ btrfs

# btrfstune -U $(uuidgen) /dev/sdb1

UUID ถูกเก็บไว้ใน superblock ดังนั้นสำเนาของระบบไฟล์จะมี UUID เหมือนกัน


14
แอนดี้, คุณไม่จำเป็นต้องใช้คำสั่ง uuidgen: "tune2fs -U random / dev / sdb1" ควรใช้งานได้ดี
grzuy

วิธีการเรียกใช้บน FAT
CMCDragonkai

@CMCDragonkai ดูคำตอบของฉัน
LiuYan 刘研

13

ใช้:

tune2fs -U random /dev/sdb1

ถ้ามันเป็นระบบไฟล์extหรือ

xfs_admin -U generate /dev/sdb1

ถ้ามันเป็นระบบไฟล์xfs


เหตุผลที่พาร์ติชั่นที่สองมี UUID เหมือนกันเพราะddเพียงแค่คัดลอกข้อมูลจากไฟล์หนึ่งไปยังอีกไฟล์หนึ่ง ( dd if=/dev/sda1 of=/dev/sdb1= cat /dev/sda1 > /dev/sdb1); ddไม่ทราบว่าพาร์ติชั่นคืออะไรหรือจะสร้าง UUID ได้อย่างไรก็แค่คัดลอกข้อมูลทั้งหมดตามที่เป็นอยู่รวมถึง UUID ซึ่งถูกเก็บไว้ใน filysystem superblock ใกล้จุดเริ่มต้นของพาร์ติชัน



ยังไงก็ตามฉันก็คิดว่า UUID (Universally Unique IDentifier) ​​เป็นชื่อแปลก ๆ มันควรจะเรียกว่า PGUID (อาจเป็นตัวระบุที่ไม่ซ้ำกันทั่วโลก) หรือดีกว่าเพียงแค่ ARLN (จำนวนที่สมเหตุสมผลพอสมควร)


ฉันได้สำรองพาร์ทิชันหนึ่งของฉันใน / dev / sda6 ฉันได้รับข้อผิดพลาดดังต่อไปนี้: xfs_admin -U สร้าง / dev / sda6 ข้อผิดพลาด: ระบบไฟล์มีการเปลี่ยนแปลงข้อมูลเมตาที่มีค่าในบันทึกซึ่งต้องมีการเล่นซ้ำ เมานต์ระบบไฟล์เพื่อเล่นซ้ำบันทึกและ unmount ก่อนที่จะรัน xfs_admin อีกครั้ง หากคุณไม่สามารถเมานต์ระบบไฟล์ได้ให้ใช้ตัวเลือก xfs_repair -L เพื่อทำลายบันทึกและพยายามซ่อมแซม โปรดทราบว่าการทำลายบันทึกอาจทำให้เกิดความเสียหาย - โปรดลองเมานต์ของระบบไฟล์ก่อนดำเนินการ
gudge

+1 สำหรับโกหกสกปรกสกปรกที่เป็น UUID ... อาจฉันยังแนะนำ UNUID สำหรับ "แต่น่าเสียดายที่ไม่ได้ ID ที่ไม่ซ้ำ"
ฝุ่น

ฉันอยากจะแนะนำ Globally Unique IDentifier (GUID) - "Globally" เหมือนใน "ทั่วไป" หรือ "โดยทั่วไป" โอ้เดี๋ยวก่อน ... ชื่อนี้มันไม่จริงเหรอ? ...
The Quark

10

นอกเหนือจาก ext2 / ext3 / ex4 และ xfs คุณยังสามารถเปลี่ยน UUID ของระบบไฟล์หรืออุปกรณ์บล็อกต่อไปนี้

แลกเปลี่ยน

swaplabel -U $NEW_UUID

ซอฟต์แวร์ RAID (md raid)

สำหรับ MD RAID คุณต้องหยุด RAID ก่อนจากนั้นอัปเดต UUID เมื่อประกอบใหม่ ดังนั้นหากคุณติดตั้ง RAID ไว้/คุณต้องอัปเดต UUID ในโหมดออฟไลน์ - ใช้ซีดีสดเพื่อดำเนินการ

  1. mdadm --stop $RAID_DEVICE
  2. mdadm --assemble $RAID_DEVICE --update=uuid --uuid=$NEW_UUID $MEMBER_DEVICES...

ตัวอย่าง:

  1. mdadm --stop /dev/md127
  2. mdadm --assemble /dev/md127 --update=uuid --uuid=2A1D2A1D-2A1D-2A1D-2A1D-2A1D2A1D2A1D /dev/sda2 /dev/sdb2

หลังจากอัปเดต UUID แล้วคุณอาจต้องอัปเดตgrub.cfg( rd.md.uuid=$NEW_UUIDในlinux/linuxefi/linux16บรรทัดคำสั่ง) และ / หรือfstabและ / หรือmdadm.confและ / หรือupdate-initramfs(ครอบครัว Debian) และ / หรือdracut --force(ตระกูล Red Hat) เพื่อให้คุณสามารถบูตได้สำเร็จในครั้งถัดไป

LUKS (cryptsetup)

cryptsetup luksUUID --uuid=$NEW_UUID $LUKS_DEVICE

ตัวอย่าง:

cryptsetup luksUUID --uuid=e0c0e0c0-e0c0-e0c0-e0c0-e0c0e0c0e0c0 ~/encrypted-LUKS.loop

FAT / NTFS / exFAT

นี่เป็นอีกเรื่องหนึ่งที่นี่ ขณะนี้ไม่มียูทิลิตี้ในการแก้ไข UUID ของระบบไฟล์ของระบบไฟล์เหล่านี้(ดูคำตอบของ reichhart - mlabelเครื่องมือ) แต่เราสามารถแก้ไขข้อมูลดิบบนดิสก์เพื่อทำสิ่งนี้

คำเตือนมันเป็นอันตรายที่จะแก้ไขข้อมูลดิบบนดิสก์และอาจสูญเสียข้อมูลโดยไม่ต้องดำเนินการอย่างระมัดระวัง

hexeditรายละเอียดที่นี่ของขั้นตอนการปรับเปลี่ยนข้อมูลดิบบนดิสก์โดยใช้

  1. blkidเขียน UUID ของระบบไฟล์ลงบนกระดาษหรือจำไว้ สตริง UUID ของ FAT / exFAT ดูเหมือนว่า1122-3344สตริง UUID ของ NTFS มีลักษณะ1122334455667788ดังนี้
  2. เปิดอุปกรณ์พาร์ติชันโดยใช้ hexedit

    hexedit <partition device such as /dev/sda1>

  3. กด/, ป้อน UUID ในลำดับย้อนกลับ (หากblkidรายงาน1234-ABCDแล้วค้นหาCDAB3412) เพื่อค้นหาข้อมูล UUID บนดิสก์
  4. เมื่ออยู่ที่ UUID ให้เปลี่ยนแล้วกดF2เพื่อบันทึกและออก
  5. blkid เพื่อตรวจสอบ UUID
  6. เมื่อแก้ไข UUID แล้วคุณอาจต้องอัปเดตgrub.cfgและ / หรือfstabเพื่อให้สามารถบูตได้สำเร็จในครั้งต่อไป
  7. ดำเนินการfsck <partition device such as /dev/sda1>และดู"มีความแตกต่างระหว่างบูตและการสำรองข้อมูลที่มี"ข้อความ เพื่อที่จะแก้ปัญหาได้เลือก"1) สำเนาต้นฉบับในการสำรองข้อมูล"และถ้าคุณจะถาม"ดำเนินการเปลี่ยนแปลงหรือไม่ (y / n)"yคุณกด

แล้ว hfs / hfs + หรือ hfsplus ล่ะ?
ลาด

1
คุณสามารถใช้mkfs.exfat -i 01234567 /dev/partitionnameที่ซึ่งmkfs.exfatคำสั่งถูกติดตั้งโดยแพ็คเกจexfat-utilsบน Fedora Linux บางทีคุณควรเพิ่มคำตอบของคุณเนื่องจากตัวแปร hexedit ค่อนข้างอันตราย!
erik

@erik ขอบคุณสำหรับเคล็ดลับ แต่เรากำลังมองหาวิธีอัปเดต UUID เก่าเป็น UUID ใหม่บนระบบไฟล์หรืออุปกรณ์บล็อกที่มีอยู่
LiuYan 刘研

6

สำหรับ XFS ให้ใช้: xfs_admin -U <uuid> <device>

ใช้xfs_admin -u <device>เพื่อดู UUID (ดูตัวเลือกตัวพิมพ์เล็กเพื่อดูและตัวเลือกตัวพิมพ์ใหญ่เพื่อตั้งค่า) โพสต์อื่นใน U&L ชี้ให้เห็นblkidคำสั่งสำหรับการดู UUID ทั้งหมดหรือบางส่วนในระบบ


2

BTRFS

sudo btrfstune -u /dev/sdaX

sudo btrfstune -U 0de6bd81-7013-49a8-bdc5-d832ed209d2c /dev/sdaX

btrfsckแนะนำให้รันเนื่องจากการเปลี่ยน UUID ใน BTRFS ไม่ใช่การทำงานแบบอะตอมมิก


1

คำตอบบางส่วนสำหรับ VFAT

สำหรับระบบไฟล์ ext * และ xfs มีคำตอบที่ดีอยู่แล้ว แต่สำหรับ VFAT ฉันแนะนำให้ใช้ mlabelของแพ็คเกจ mtools การใช้โปรแกรมแก้ไข hex คือ DANGEROUS

ใช้สิ่งนี้เพื่อสร้าง UUID ใหม่:

echo 'drive d: file="/dev/sdb3" exclusive' >>/etc/mtools.conf
mlabel -n d:

หากคุณไม่สนใจการตรวจสอบการเข้าถึงแบบเอกสิทธิ์เฉพาะบุคคลด้วยตนเอง (เช่นเดียวกับคำสั่งอื่น ๆ ทั้งหมดที่อธิบายไว้ที่นี่) คุณสามารถทำได้ด้วยคำสั่งเดียวเช่นmlabel -n -i /dev/sdb3 ::
telcoM

0

ภายใต้ Fedora 27 ฉันพบว่าคำสั่งของข้อโต้แย้งมีบทบาทสำคัญ ... คุณต้องเขียนอุปกรณ์ก่อนมิฉะนั้น UUID จะไม่เปลี่ยนแปลง ตัวอย่างเช่น

tune2fs /dev/sdb1 -U random

1
ดูเหมือนว่าพฤติกรรมที่ผิดปกติอย่างน้อยได้รับหน้าคน Onelineคำอธิบายการแสดงก่อน-U device
Jeff Schaller

0

ในการเปลี่ยนคำสั่ง dd ทำให้พาร์ทิชันดิสก์ซ้ำซ้อน UUID / s - ใช้ GParted

จากส่วนติดต่อผู้ใช้ GParted เลือกไดรฟ์เลือกพาร์ติชัน unmount พาร์ติชัน จาก 'โฟลเดอร์พาร์ติชัน' เลือก 'ใหม่ UUID' ทำซ้ำจนกว่าพาร์ติชันที่ซ้ำซ้อนของไดรฟ์ dd ทั้งหมด uuid / s จะถูกทำเครื่องหมายเพื่อทดแทน สำหรับดิสก์ที่สามารถบูตได้ห้ามเปลี่ยน UEFI พาร์ติชัน

ตรวจสอบอักษรระบุไดรฟ์และพาร์ติชั่น / s ทั้งหมด - ตกลง? ...

คลิกที่ไอคอน 'ใช้การดำเนินการทั้งหมด' ในส่วนติดต่อผู้ใช้ GParted
สำหรับดิสก์ที่สามารถบูตได้ให้แก้ไขไฟล์ / etc / fstab UUID = string / s และจุดต่อ / s:

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