Sự khác biệt giữa UUID từ blkid và mdadm?


26

Ai đó có thể giải thích sự khác biệt giữa UUID được báo cáo bởi blkidmdadmkhông? Trên một trong các hệ thống CentOS của chúng tôi, ví dụ:

[root@server ~]# blkid | grep /dev/md1
/dev/md1: UUID="32cb0a6e-8148-44e9-909d-5b23df045bd1" TYPE="ext4"

[root@server ~]# mdadm --detail /dev/md1 | grep UUID
UUID : f204c558:babf732d:85bd7296:bbfebeea

Tại sao chúng khác nhau và chúng ta sẽ thay đổi UUID được sử dụng mdadmnhư thế nào?

Tôi hiểu rằng chúng tôi sẽ sử dụng tune2fsđể thay đổi UUID cho phân vùng (sẽ thay đổi những gì được trả về blkid) nhưng không chắc chắn làm thế nào để thay đổi những gì mdadmsử dụng.

Câu trả lời:


23

Cái đầu tiên báo cáo UUID của hệ thống tập tin ext4 trên mdthiết bị khối. Nó giúp hệ thống xác định hệ thống tệp duy nhất trong số các hệ thống tệp có sẵn trên hệ thống. Điều đó được lưu trữ trong cấu trúc của hệ thống tập tin, đó là trong dữ liệu được lưu trữ trên thiết bị md.

Cái thứ hai là UUID của thiết bị RAID. Nó giúp hệ thống con md xác định duy nhất thiết bị RAID cụ thể đó. Đặc biệt, nó giúp xác định tất cả các thiết bị khối thuộc về mảng RAID. Nó được lưu trữ trong siêu dữ liệu của mảng (trên mỗi thành viên). Các thành viên mảng cũng có UUID riêng (trong hệ thống md, họ cũng có thể có UUID phân vùng nếu chúng là phân vùng GPT (chính nó sẽ được lưu trữ trong bảng phân vùng GPT) hoặc khối lượng LVM ...).

blkidlà một chút sai lệch, vì những gì nó trả về là ID của cấu trúc được lưu trữ trên thiết bị (đối với những loại cấu trúc mà nó biết về giống như hầu hết các hệ thống tệp, thành viên LVM và thiết bị trao đổi). Cũng lưu ý rằng không có gì lạ khi có các thiết bị khối có cấu trúc với UUID giống hệt nhau (ví dụ: ảnh chụp nhanh LVM). Và một thiết bị khối có thể chứa bất cứ thứ gì, kể cả những thứ mà cấu trúc của nó không bao gồm UUID.

Vì vậy, ví dụ, bạn có thể có một hệ thống với 3 ổ đĩa, với phân vùng GPT. Những ổ đĩa đó có thể có World Wide Name xác định nó là duy nhất. Giả sử 3 ổ đĩa được phân vùng với một phân vùng mỗi ( /dev/sd[abc]1). Mỗi phân vùng sẽ có một UPT GPT được lưu trữ trong bảng phân vùng GPT.

Nếu các phân vùng đó tạo thành một mảng md RAID5. Mỗi người sẽ nhận được một UUID md với tư cách là thành viên RAID và mảng sẽ nhận được UUID dưới dạng thiết bị RAID md.

Điều đó /dev/md0có thể được phân vùng hơn nữa với phân vùng kiểu MSDOS hoặc GPT. Chẳng hạn, chúng ta có thể có một /dev/md0p1phân vùng với GPT UUID (được lưu trữ trong bảng phân vùng GPT được lưu trữ trong dữ liệu của / dev / md0).

Điều đó có thể lần lượt là một khối lượng vật lý cho LVM. Như vậy, nó sẽ nhận được một PV UUID. Nhóm âm lượng cũng sẽ có VG UUID.

Trong nhóm âm lượng đó, bạn sẽ tạo các khối hợp lý, mỗi khối nhận được UUID LV.

Trên một trong những LV đó (như /dev/VG/LV), bạn có thể tạo một hệ thống tập tin ext4. Hệ thống tập tin đó sẽ nhận được một UUID ext4.

blkid /dev/VG/LVsẽ giúp bạn có được (ext4) UUID của hệ thống tập tin đó. Nhưng là một phân vùng bên trong khối VG, nó cũng sẽ nhận được một UUID phân vùng (một số lược đồ phân vùng như MSDOS / MBR không có UUID). Nhóm khối đó được tạo thành từ các PV thành viên mà chính họ là các thiết bị khối khác. blkid /dev/md0p1sẽ cung cấp cho bạn PV UUID. Nó cũng có một UUID phân vùng trong bảng GPT trên /dev/md0. /dev/md0chính nó được tạo ra từ các thiết bị khối khác. blkid /dev/sda1sẽ trả lại UUID thành viên đột kích. Nó cũng có một UUID phân vùng trong bảng GPT trên /dev/sda.


Làm cách nào để thay đổi UUID của thiết bị RAID như được sử dụng bởi mdadm? Chúng tôi chỉ tái tạo một máy chủ và các UUID khác nhau, vì vậy chúng tôi muốn khôi phục các UUID trước đó để chúng tôi không cần thay đổi tất cả các tệp cấu hình. Về cơ bản, /dev/md0có một UUID mới và chúng tôi muốn trả nó về cái cũ (được xác định từ bản sao lưu) để hệ thống khởi động mà không cần thay đổi thêm.
Chris

@Chris, MD UUID (xem man mdadm) hoặc U4ID ext4 (xem man tune2fs)? Là vấn đề khởi động về việc tìm hệ thống tập tin gốc hoặc về việc lắp ráp mảng RAID dựa trên mdadm.conf được lưu trữ trong initramfs. Dù bằng cách nào, việc cập nhật mdadm.conf hoặc fstab / grub.cfg trở nên đơn giản hơn so với việc kết hợp với UUID.
Stéphane Chazelas

MD UUID - chúng tôi đã khôi phục máy chủ từ bản sao lưu. Bạn có biết cách cập nhật UUID của thiết bị RAID không? Tôi không thể xem thông tin đó trong trang. Chúng tôi chỉ đang cố gắng tìm ra cách đơn giản nhất để khiến nó hoạt động (kiểm tra quy trình khôi phục).
Chris

@Chris, bạn nên đưa ra một câu hỏi khác cho điều đó.
Stéphane Chazelas

@Chris: Bạn muốn UUID khác biệt. Nếu mdadm thấy nhiều đĩa tin rằng thuộc về cùng một cuộc đột kích mặc dù đó là các cuộc tấn công khác nhau (vì xung đột UUID), bạn sẽ gặp vấn đề thực sự.
frostschutz

4

Các UUID khác nhau đã được giải thích. Không chỉ các hệ thống tập tin có chúng. Chỉ có UUID cho những thứ khác nhau: mảng đột kích, thiết bị, phân vùng, thùng chứa LUKS, LVM PV ... và cuối cùng là hệ thống tập tin.

Điều làm cá nhân tôi khó chịu là ngay cả cách các UUID được định dạng cũng khác nhau.

blkid:

# blkid /dev/sda1
/dev/sda1: 
UUID="d8b8b4e5-e47b-2e45-2093-cd36f654020d"
UUID_SUB="3c3e6eac-2139-3f7a-16b7-57280934d88e"
PARTUUID="6a89cedf-69e1-40db-b08c-1c8e45af59f5" 

mdadm:

# mdadm --examine /dev/sda1 | grep UUID
     Array UUID : d8b8b4e5:e47b2e45:2093cd36:f654020d
    Device UUID : 3c3e6eac:21393f7a:16b75728:0934d88e

Như bạn có thể thấy, chúng là cùng một UUID, nhưng blkidin chúng bằng dấu gạch ngang -trong khi mdadmsử dụng dấu hai chấm :. Vì vậy, bạn nhận được d8b8b4e5-e47b-2e45-2093-cd36f654020dso với d8b8b4e5:e47b2e45:2093cd36:f654020d.

Rất khó chịu, đặc biệt nếu bạn muốn làm việc với UUID trong các tập lệnh. Không rõ ràng làm thế nào để chuyển đổi từ định dạng này sang định dạng khác.


Còn s /: / - / g hoặc ngược lại thì sao? ;)
ThiefMaster

thực sự là dấu hai chấm :hoặc dấu gạch ngang -đơn giản để con người có thể đọc các UUID dài trong các đoạn và không bị lạc ở đâu đó ở giữa. UUID thực sự là một số nhị phân và không có dấu gạch ngang hoặc dấu hai chấm. Nó được triển khai trong Linux dưới dạng một mảng ký tự không dấu : unsigned char uuid_out[16]. Rõ ràng thông số UUID cũng có ý tưởng về các biến thể và phiên bản , mà chúng ta có thể thấy được triển khai bằng cách đặt byte quan trọng nhất uuid_out[6]thành 4 .
TrinitronX

-1

UUID blkid ở trên "32cb0a6e-8148-44e9-909d-5b23df045bd1" là chính xác, đó là những gì HĐH sẽ sử dụng để tìm mảng RAID.

mdadm có UUID "nội bộ" của riêng nó không được HĐH sử dụng trực tiếp và là thứ bạn sử dụng trong tệp mdadm.conf, vd:

"ARRAY / dev / md1 level = raid1 num-thiết bị = 2 uuid = f204c558: babf732d: 85bd7296: bbfebeea"

mdadm không nên gọi bất cứ thứ gì UUID khi nó tách biệt với cái mà blkid và HĐH nhận ra. Có lẽ nó nên được gọi là mduuid hoặc một cái gì đó khác để tránh nhầm lẫn.

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.