ความแตกต่างระหว่าง UUID จาก blkid และ mdadm?


26

คนที่สามารถอธิบายความแตกต่างระหว่างรายงานโดย UUID ของblkidและmdadm? ตัวอย่างหนึ่งในระบบ CentOS ของเรา:

[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

ทำไมมันแตกต่างกันและเราจะเปลี่ยน UUID ที่ใช้งานmdadmอย่างไร

ฉันเข้าใจว่าเราจะใช้tune2fsเปลี่ยน UUID สำหรับพาร์ติชัน (ซึ่งจะเปลี่ยนสิ่งที่ส่งคืนblkid) แต่ไม่แน่ใจว่าจะเปลี่ยนสิ่งที่mdadmใช้อย่างไร

คำตอบ:


23

คนแรกรายงาน UUID ของระบบไฟล์ ext4 บน mdอุปกรณ์บล็อก ช่วยให้ระบบระบุระบบไฟล์ที่ไม่ซ้ำกันในระบบไฟล์ที่มีอยู่ในระบบ ที่เก็บอยู่ในโครงสร้างของระบบไฟล์ที่อยู่ในข้อมูลที่เก็บไว้ในอุปกรณ์ md

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

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

ตัวอย่างเช่นคุณอาจมีระบบที่มีไดรฟ์ 3 ตัวพร้อมการแบ่งพาร์ติชัน GPT ไดรฟ์เหล่านั้นอาจมีชื่อWorld Wideซึ่งระบุว่าไม่ซ้ำกัน สมมติว่ามี 3 ไดรฟ์ถูกแบ่งพาร์ติชันด้วยหนึ่งพาร์ติชั่น ( /dev/sd[abc]1) แต่ละพาร์ติชันจะมี GPT UUID เก็บไว้ในตารางพาร์ติชัน GPT

หากพาร์ติชั่นเหล่านั้นประกอบเป็นอาร์เรย์ md RAID5 แต่ละคนจะได้รับ md UUID ในฐานะสมาชิก RAID และอาร์เรย์จะได้รับ UUID เป็นอุปกรณ์ md RAID

ที่/dev/md0สามารถแบ่งพาร์ติชันเพิ่มเติมได้ด้วยการแบ่งพาร์ติชันประเภท MSDOS หรือ GPT ตัวอย่างเช่นเราอาจมี/dev/md0p1พาร์ติชันที่มี GPT UUID (เก็บไว้ในตารางพาร์ติชัน GPT ที่เก็บไว้ในข้อมูลของ / dev / md0)

นั่นอาจเป็นปริมาณทางกายภาพสำหรับ LVM มันจะได้รับ PV UUID กลุ่มปริมาณจะมี VG UUID

ในกลุ่มวอลุ่มนั้นคุณจะสร้างโลจิคัลวอลุ่มซึ่งแต่ละอันจะได้รับ LV UUID

ในหนึ่งใน LVs เหล่านั้น (เช่น/dev/VG/LV) คุณสามารถสร้างระบบไฟล์ ext4 ระบบไฟล์นั้นจะได้รับ ext4 UUID

blkid /dev/VG/LVจะให้คุณ (ext4) UUID ของระบบไฟล์นั้น แต่เป็นพาร์ติชันภายในโวลุ่ม VG ก็จะได้รับพาร์ติชัน UUID (รูปแบบการแบ่งพาร์ติชันบางอย่างเช่น MSDOS / MBR ไม่มี UUIDs) กลุ่มวอลุ่มนั้นทำจากสมาชิก PV ซึ่งเป็นอุปกรณ์บล็อกอื่น ๆ blkid /dev/md0p1จะให้ PV UUID แก่คุณ นอกจากนี้ยังมี UUID พาร์ทิชันในตาราง GPT /dev/md0บน /dev/md0ตัวเองทำจากอุปกรณ์บล็อกอื่น ๆ blkid /dev/sda1จะส่งคืน UUID ของสมาชิกตรวจค้น นอกจากนี้ยังมี UUID พาร์ทิชันในตาราง GPT /dev/sdaบน


เราจะเปลี่ยน UUID ของอุปกรณ์ RAID ที่ใช้งานได้mdadmอย่างไร เราเพิ่งถ่ายภาพเซิร์ฟเวอร์อีกครั้งและ UUID นั้นแตกต่างกันดังนั้นเราจึงต้องการเรียกคืน UUID ก่อนหน้านี้เพื่อให้เราไม่จำเป็นต้องเปลี่ยนไฟล์ปรับแต่งทั้งหมด โดยพื้นฐานแล้ว/dev/md0มี UUID ใหม่และเราต้องการคืนค่าเดิม (ระบุจากข้อมูลสำรอง) ดังนั้นระบบจะบู๊ตโดยไม่ต้องการการเปลี่ยนแปลงเพิ่มเติม
คริส

@Chris, MD UUID (ดูman mdadm) หรือ ext4 UUID (ดูman tune2fs) เป็นปัญหาการบูตเกี่ยวกับการค้นหาระบบไฟล์รูทหรือเกี่ยวกับการประกอบอาร์เรย์ RAID ตาม mdadm.conf ที่เก็บไว้ใน initramfs ทั้งสองวิธีมันฟังดูง่ายกว่าที่ฉันจะอัปเดต mdadm.conf หรือ fstab / grub.cfg
Stéphane Chazelas

MD UUID - เรากู้คืนเซิร์ฟเวอร์จากการสำรองข้อมูล คุณรู้วิธีอัปเดต UUID ของอุปกรณ์ RAID หรือไม่ ฉันไม่เห็นข้อมูลนั้นใน manpage เรากำลังพยายามหาวิธีที่ง่ายที่สุดในการทำให้มันใช้งานได้ (ทดสอบขั้นตอนการกู้คืน)
Chris

@ Chris คุณควรตั้งคำถามอื่นอีก
Stéphane Chazelas

@Chris: คุณต้องการให้ UUID แตกต่างกัน หาก mdadm เห็นดิสก์หลายแผ่นที่เชื่อว่าเป็นของการจู่โจมเดียวกันแม้ว่าจะเป็นการโจมตีที่แตกต่างกัน (เพราะความขัดแย้งของ UUID) คุณจะมีปัญหาที่แท้จริง
frostschutz

4

มีการอธิบาย UUID ที่แตกต่างกันไปแล้ว ระบบไฟล์ไม่เพียง แต่มี มีเพียง UUIDs สำหรับสิ่งต่าง ๆ : อาร์เรย์การโจมตีอุปกรณ์พาร์ทิชันคอนเทนเนอร์ LUKS, LVM PV's ... และในที่สุดระบบไฟล์

สิ่งที่ทำให้ฉันรำคาญเป็นการส่วนตัวคือแม้กระทั่งว่ารูปแบบ UUID เหล่านั้นแตกต่างกัน

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

ที่คุณสามารถดูพวกเขาจะ UUIDs เดียวกัน แต่blkidพิมพ์พวกเขามีขีดกลาง-ในขณะที่การใช้ทวิภาคmdadm :ดังนั้นคุณจะได้รับd8b8b4e5-e47b-2e45-2093-cd36f654020dกับd8b8b4e5:e47b2e45:2093cd36:f654020dเมื่อเทียบกับ

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


แล้ว s /: / - / g หรือในทางกลับกันล่ะ? ;)
ThiefMaster

จริงๆแล้วลำไส้ใหญ่:หรือเส้นประ-จะมีเพียงเพื่อให้มนุษย์สามารถอ่าน UUIDs ยาวเป็นชิ้น ๆ และไม่หลงทางอยู่ตรงกลาง UUID เป็นเลขฐานสองและไม่มีเครื่องหมายขีดคั่นหรือโคลอน unsigned char uuid_out[16]มันถูกนำมาใช้ในลินุกซ์เป็นอาร์เรย์ตัวละครที่ได้รับการรับรอง: เห็นได้ชัดว่า UUID spec นอกจากนี้ยังมีความคิดของสายพันธุ์และรุ่นซึ่งเราสามารถเห็นการดำเนินการโดยการตั้งค่าไบต์ที่สำคัญมากที่สุดuuid_out[6]ถึง 4
TrinitronX

-1

blkid UUID ด้านบน "32cb0a6e-8148-44e9-909d-5b23df045bd1" เป็นอันที่ถูกต้องนั่นคือสิ่งที่ระบบปฏิบัติการจะใช้เพื่อค้นหาอาร์เรย์ RAID

mdadm มี UUID "ภายใน" ของตัวเองซึ่งไม่ได้ใช้โดยตรงจากระบบปฏิบัติการและเป็นสิ่งที่คุณใช้ในไฟล์ mdadm.conf เช่น:

"ARRAY / dev / md1 level = raid1 NUM-devices = 2 uuid = f204c558: babf732d: 85bd7296: bbfebeea"

mdadm ไม่ควรเรียก UUID ทุกอย่างเมื่อแยกจาก blkid และระบบปฏิบัติการที่รู้จัก บางทีมันควรจะเรียกว่า mduuid หรืออย่างอื่นเพื่อหลีกเลี่ยงความสับสน

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