Làm cách nào để thay đổi UUID hệ thống tập tin (2 UUID giống nhau)?


26

Tôi có một hệ điều hành khách fedora trong VMware. Tôi muốn mở rộng /bootphân vùng, vì vậy tôi thêm một đĩa ảo khác vào VM này và cố gắng sao chép đĩa.

Sau đó dd if=/dev/sda1 of=/dev/sdb1, blkidbáo cáo rằng / dev / sda1/ dev / sdb1 có cùng UUID / GUID.

Thật kỳ lạ khi có 2 UUID giống nhau trong vũ trụ, làm thế nào để thay đổi một trong số chúng thành một giá trị UUID khác?


Cập nhật 2017-01-25

Chủ đề đã thay đổi, UUID ở đây có nghĩa là UUID hệ thống tệp, không phải UUID phân vùng.

Vì đó là UUID hệ thống tệp, nên cần có các tiện ích cụ thể của hệ thống tệp để thay đổi UUID hoặc sử dụng hexeditor để sửa đổi dữ liệu thô trên đĩa ( DANGEROUS, không được khuyến nghị trừ khi bạn biết bạn đang làm gì ).


10
Nó không có gì lạ cả. Khi bạn sao chép một phân vùng với dd, tất nhiên bản sao sẽ có cùng UUID như bản gốc. UUID chỉ là siêu dữ liệu của phân vùng - không phải là một số thuộc tính vốn có của một đĩa vật lý.
Andrew Medico

Cảm ơn Andrew, tôi nghĩ UUID là một giá trị được tính toán trước khi phân vùng mới được tạo. Bây giờ tôi biết nó chỉ là một công cụ siêu dữ liệu.

Câu trả lời:


28

Để tạo UUID mới ngẫu nhiên, người ta có thể sử dụng:

$ uuidgen

Để thực sự thay đổi UUID là phụ thuộc hệ thống tệp.

Giả sử hệ thống tập tin gia đình

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

Hoặc nếu bạn tự tin uuidgen sẽ đi làm:

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

Giả sử hệ thống tập tin btrfs

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

UUID được lưu trữ trong siêu khối, do đó, một bản sao theo byte của hệ thống tệp sẽ có cùng UUID.


14
Andy, bạn thậm chí không cần lệnh uuidgen: "Tune2fs -U Random / dev / sdb1" sẽ hoạt động tốt
grzuy

Làm thế nào để chạy nó trên FAT?
CMCDragonkai

@CMCDragonkai, xem câu trả lời của tôi.
LiuYan 刘

13

Sử dụng:

tune2fs -U random /dev/sdb1

nếu nó là một ext hệ thống tập tin, hoặc

xfs_admin -U generate /dev/sdb1

nếu đó là một hệ thống tập tin xfs .


Lý do phân vùng thứ hai có cùng UUID là vì ddchỉ sao chép dữ liệu từ tệp này sang tệp khác ( dd if=/dev/sda1 of=/dev/sdb1= cat /dev/sda1 > /dev/sdb1); ddkhông biết phân vùng là gì hoặc cách tạo UUID, vì vậy nó chỉ sao chép tất cả dữ liệu nguyên bản, bao gồm cả UUID, được lưu trữ trong siêu khối filysystem gần đầu phân vùng.


Nhân tiện,
tôi cũng nghĩ UUID (IDentifier duy nhất toàn cầu) là một cái tên kỳ lạ. Nó phải được gọi là PGUID (Có thể là IDentifier duy nhất toàn cầu), hoặc thậm chí tốt hơn, chỉ là ARLN (Một số lượng lớn hợp lý).


Tôi đã sao lưu một phân vùng của mình trên / dev / sda6. Tôi nhận được lỗi sau: xfs_admin -U tạo / dev / sda6 LRI: Hệ thống tệp có các thay đổi siêu dữ liệu có giá trị trong nhật ký cần được phát lại. Gắn kết hệ thống tập tin để phát lại nhật ký và ngắt kết nối trước khi chạy lại xfs_admin. Nếu bạn không thể gắn kết hệ thống tập tin, thì hãy sử dụng tùy chọn xfs num ngoặc -L để hủy nhật ký và thử sửa chữa. Lưu ý rằng việc hủy bản ghi có thể gây ra tham nhũng - vui lòng thử gắn kết hệ thống tệp trước khi thực hiện việc này.
gudge

+1 cho lời nói dối bẩn thỉu đó là UUID ... tôi cũng có thể đề xuất UNUID cho "Thật không may, ID không phải là duy nhất"
Foon

Chà, tôi sẽ đề xuất Trình xác định duy nhất toàn cầu (GUID) - "Toàn cầu" như trong "nói chung" hoặc "nói chung". Đợi đã ... đây thực sự không phải là tên ban đầu của nó sao? ...
Quark

11

Ngoài ext2 / ext3 / ex4 và xfs, bạn cũng có thể thay đổi UUID của hệ thống tệp hoặc thiết bị khối sau đây.

Trao đổi

swaplabel -U $NEW_UUID

RAID phần mềm (md đột kích)

Đối với RAID MD, trước tiên bạn phải dừng RAID, sau đó cập nhật UUID khi lắp ráp lại. Vì vậy, nếu RAID của bạn được gắn kết /, bạn cần cập nhật UUID ở chế độ ngoại tuyến - sử dụng CD trực tiếp để thực hiện.

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

Thí dụ:

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

Sau khi UUID được cập nhật, bạn có thể cần cập nhật grub.cfg( rd.md.uuid=$NEW_UUIDtrong linux/linuxefi/linux16dòng lệnh) và / hoặc fstabvà / hoặc mdadm.conf/ hoặc update-initramfs(gia đình Debian) và / hoặc dracut --force(họ Red Hat) để bạn có thể khởi động thành công vào lần tới.

LUKS (cryptsetup)

cryptsetup luksUUID --uuid=$NEW_UUID $LUKS_DEVICE

Thí dụ:

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

FAT / NTFS / exFAT

Đây là một câu chuyện khác ở đây, hiện tại không có tiện ích để sửa đổi UUID hệ thống tệp của các hệ thống tệp này(Xem câu trả lời của reichhart - mlabelcông cụ), nhưng chúng tôi có thể sửa đổi dữ liệu thô trên đĩa để làm điều này.

CẢNH BÁO, thật nguy hiểm khi sửa đổi dữ liệu thô trên đĩa và có thể bị mất dữ liệu mà không cần thao tác cẩn thận.

Dưới đây là các bước chi tiết để sửa đổi dữ liệu thô trên đĩa bằng cách sử dụng hexedit.

  1. blkid, ghi UUID của hệ thống tập tin vào giấy hoặc ghi nhớ nó. Chuỗi UUID của FAT / exFAT trông giống như 1122-3344, chuỗi UUID của NTFS trông như thế 1122334455667788.
  2. Mở thiết bị phân vùng bằng hexedit

    hexedit <partition device such as /dev/sda1>

  3. Nhấn /, nhập UUID theo thứ tự ngược lại (nếu blkidđược báo cáo 1234-ABCD, sau đó tìm kiếm CDAB3412) để tìm kiếm dữ liệu UUID trên đĩa.
  4. Khi UUID được định vị, thay đổi chúng, nhấn F2để lưu và thoát.
  5. blkid để xác minh UUID.
  6. Khi UUID được sửa đổi, bạn có thể cần cập nhật grub.cfgvà / hoặc fstabđể bạn có thể khởi động thành công vào lần tới.
  7. Thực thi fsck <partition device such as /dev/sda1>và xem thông báo "Có sự khác biệt giữa boot sector và sao lưu của nó" . Để giải quyết vấn đề, chọn "1) Sao chép bản gốc để sao lưu" và nếu bạn được hỏi "Thực hiện thay đổi? (Y / n)", bạn nhấn y.

Còn hfs / hfs + hoặc hfsplus thì sao?
Wlad

1
Bạn chỉ có thể sử dụng mkfs.exfat -i 01234567 /dev/partitionnamenơi mkfs.exfatlệnh được cài đặt bởi gói exfat-utils trên Fedora Linux. Có lẽ bạn nên thêm nó vào câu trả lời của mình, vì biến thể hexedit khá nguy hiểm!
erik

@erik Cảm ơn vì tiền boa, nhưng chúng tôi đang tìm kiếm một phương pháp để cập nhật UUID cũ thành UUID mới trên hệ thống tệp hiện có hoặc thiết bị chặn.
LiuYan 刘

Hey @LiuYan 刘 cho NTFS có ntfslabelcông cụ. Askubfox.com/questions/642591/ Lần
aaditya1234

6

Đối với XFS, sử dụng: xfs_admin -U <uuid> <device>

Sử dụng xfs_admin -u <device>để xem UUID (lưu ý tùy chọn chữ thường để xem, so với tùy chọn chữ hoa để đặt). Một bài đăng khác trên U & L đã chỉ ra blkidlệnh xem tất cả hoặc một số UUID trên hệ thống.


2

Trả lời một phần cho VFAT

Đối với hệ thống tệp ext * và xfs đã có câu trả lời tốt. Nhưng đối với VFAT, tôi thực sự khuyên bạn nên sử dụng mlabel của gói mtools. Sử dụng trình soạn thảo hex là NGUY HIỂM.

Sử dụng một cái gì đó như thế này để tạo một UUID mới:

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

Nếu bạn không ngại kiểm tra quyền truy cập độc quyền theo cách thủ công (như với tất cả các lệnh khác được mô tả ở đây), bạn có thể thực hiện dưới dạng một lệnh nhưmlabel -n -i /dev/sdb3 ::
telcoM

2

BTRFS

sudo btrfstune -u /dev/sdaX

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

Chạy btrfsckđược khuyến khích vì thay đổi UUID trong BTRFS không phải là hoạt động nguyên tử.


0

Theo Fedora 27, tôi thấy rằng thứ tự của các đối số đóng vai trò quan trọng ... Bạn phải viết thiết bị trước, nếu không thì UUID không được thay đổi. Ví dụ

tune2fs /dev/sdb1 -U random

1
Điều đó có vẻ như là hành vi bất thường, ít nhất là được đưa ra mô tả của trang người đàn ông trực tuyến hiển thị -Utrước device.
Jeff Schaller

0

Để thay đổi lệnh dd dẫn đến phân chia đĩa trùng lặp UUID / s - Sử dụng GParted.

Từ giao diện người dùng GParted, chọn ổ đĩa, chọn phân vùng, phân vùng ngắt kết nối. Từ 'Thư mục phân vùng', chọn 'UUID MỚI', lặp lại cho đến khi tất cả các ổ đĩa trùng lặp phân vùng uuid / s được đánh dấu để thay thế. Đối với đĩa có thể khởi động, không thay thế uuid phân vùng UEFI.

Xem lại ký tự ổ đĩa đã chọn và phân vùng / s - Tất cả OK? ...

Nhấp vào biểu tượng 'Áp dụng tất cả các hoạt động' trên giao diện người dùng GParted.
Đối với các đĩa có thể khởi động, hãy chỉnh sửa tệp / etc / fstab UUID = chuỗi / s và điểm gắn kết / s.:


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.