Różnica między UUID od blkid i mdadm?

26

Czy ktoś może wyjaśnić różnicę między identyfikatorami UUID zgłaszanymi przez blkidi mdadm? Na jednym z naszych systemów CentOS, na przykład:

[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

Dlaczego się różnią i jak zmienilibyśmy używany przez UUID mdadm?

Rozumiem, że użyjemy tune2fsby zmienić UUID dla partycji (co zmieniłoby to, co zostanie zwrócone blkid), ale nie jestem pewien, jak zmienić to, co mdadmużywa.

Chris
źródło

Odpowiedzi:

23

Pierwszy raportuje UUID systemu plików ext4 na mdurządzeniu blokowym. Pomaga systemowi jednoznacznie zidentyfikować system plików wśród systemów plików dostępnych w systemie. To jest przechowywane w strukturze systemu plików, czyli w danych przechowywanych na urządzeniu MD.

Drugi to UUID urządzenia RAID. Pomaga podsystemowi md jednoznacznie zidentyfikować to konkretne urządzenie RAID. W szczególności pomaga zidentyfikować wszystkie urządzenia blokowe należące do macierzy RAID. Jest on przechowywany w metadanych tablicy (na każdym elemencie). Członkowie macierzy mają także swój własny UUID (w systemie md mogą mieć także UUID partycji, jeśli są partycjami GPT (które same byłyby przechowywane w tablicy partycji GPT) lub woluminami LVM ...).

blkidjest nieco mylące, ponieważ zwraca identyfikator struktury przechowywanej na urządzeniu (dla tego rodzaju struktur, o których wie, jak większość systemów plików, członków LVM i urządzeń wymiany). Zauważ również, że nierzadko występują urządzenia blokowe o strukturach z identycznymi identyfikatorami UUID (na przykład migawki LVM). A urządzenie blokowe może zawierać wszystko, w tym rzeczy, których struktura nie zawiera UUID.

Na przykład możesz mieć system z 3 dyskami z partycjonowaniem GPT. Te dyski mogą mieć ogólnoświatową nazwę, która jednoznacznie je identyfikuje. Powiedzmy, że 3 dyski są podzielone na partycje po jednej partycji ( /dev/sd[abc]1). Każda partycja będzie mieć identyfikator UUID GPT zapisany w tabeli partycji GPT.

Jeśli te partycje tworzą tablicę md RAID5. Każdy otrzyma identyfikator UUID md jako element RAID, a tablica otrzyma identyfikator UUID jako urządzenie RAID md.

Który /dev/md0może być dalej podzielony MsDos lub typu GPT podziału. Na przykład, możemy mieć /dev/md0p1partycję z GPU UUID (przechowywaną w tablicy partycji GPT, która jest przechowywana w danych / dev / md0).

To z kolei może być woluminem fizycznym dla LVM. Jako taki otrzyma identyfikator PV UUID. Grupa woluminów będzie również mieć identyfikator UUID VG.

W tej grupie woluminów utworzysz woluminy logiczne, z których każdy otrzyma identyfikator UUID LV.

Na jednym z tych LV (jak /dev/VG/LV) możesz stworzyć system plików ext4. Ten system plików otrzymałby identyfikator UUID ext4.

blkid /dev/VG/LVotrzyma (ext4) UUID tego systemu plików. Ale jako partycja wewnątrz woluminu VG otrzyma również identyfikator UUID partycji (niektóre schematy partycjonowania, takie jak MSDOS / MBR, nie mają identyfikatorów UUID). Ta grupa woluminów składa się z elementów PV, które same są innymi urządzeniami blokowymi. blkid /dev/md0p1dałby ci PV UUID. Ma także identyfikator UUID partycji w tabeli GPT /dev/md0. /dev/md0sam jest wykonany z innych urządzeń blokowych. blkid /dev/sda1zwróci identyfikator UUID członka rajdu. Ma także identyfikator UUID partycji w tabeli GPT /dev/sda.

Stéphane Chazelas
źródło
Jak zmienilibyśmy identyfikator UUID urządzenia RAID, z którego korzysta mdadm? Właśnie ponownie zobrazowaliśmy serwer, a identyfikatory UUID są różne, dlatego chcemy przywrócić poprzednie identyfikatory UUID, abyśmy nie musieli zmieniać wszystkich plików konfiguracyjnych. Zasadniczo /dev/md0ma nowy identyfikator UUID i chcemy przywrócić go do starego (zidentyfikowanego na podstawie kopii zapasowej), aby system uruchomił się bez potrzeby wprowadzania dalszych zmian.
Chris
@Chris, MD UUID (patrz man mdadm) czy ext4 UUID (patrz man tune2fs)? Czy problem z uruchomieniem dotyczy znalezienia głównego systemu plików lub złożenia tablicy RAID na podstawie pliku mdadm.conf przechowywanego w pliku initramfs. Tak czy inaczej, łatwiej jest mi zaktualizować plik mdadm.conf lub fstab / grub.cfg niż mieszać się z identyfikatorami UUID.
Stéphane Chazelas
MD UUID - przywróciliśmy serwer z kopii zapasowej. Czy wiesz, jak zaktualizować identyfikator UUID urządzenia RAID? Nie widzę tych informacji na stronie podręcznika. Staramy się tylko znaleźć najprostszy sposób, aby go uruchomić (testowanie procedury przywracania).
Chris
@Chris, powinieneś zadać kolejne pytanie.
Stéphane Chazelas
@Chris: Chcesz, aby UUID były inne. Jeśli mdadm zauważy, że wiele dysków uważa się za należących do tego samego nalotu, mimo że są to różne naloty (z powodu konfliktu UUID), będziesz miał prawdziwe problemy.
frostschutz
4

Inny UUID został już wyjaśniony. Mają je nie tylko systemy plików. Są tylko UUID dla różnych rzeczy: macierzy RAID, urządzenia, partycji, kontenerów LUKS, PV LVM ... i wreszcie systemów plików.

Denerwuje mnie osobiście to, że nawet sposób formatowania tych UUID jest inny.

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

Jak widać, są to te same UUID, ale blkiddrukuje je za pomocą myślników, -podczas gdy mdadmużywa dwukropków :. Więc masz d8b8b4e5-e47b-2e45-2093-cd36f654020dvs. d8b8b4e5:e47b2e45:2093cd36:f654020d.

Bardzo denerwujące, szczególnie jeśli chcesz pracować z UUID w skryptach. Nie jest oczywiste, jak przekonwertować z jednego formatowania na drugie.

frostschutz
źródło
Co z s /: / - / g lub odwrotnie? ;)
ThiefMaster
tak naprawdę dwukropek :lub kreska -są po prostu po to, aby ludzie mogli odczytać długie UUID w kawałkach i nie zgubić się gdzieś pośrodku. UUID jest tak naprawdę liczbą binarną i nie ma myślników ani dwukropków. Jest on realizowany w systemie Linux jako unsigned tablicy znaków: unsigned char uuid_out[16]. Najwyraźniej specyfikacja UUID ma również pojęcie wariantów i wersji , które możemy zobaczyć zaimplementowane poprzez ustawienie najbardziej znaczącego bajtu uuid_out[6]na 4 .
TrinitronX
-1

Identyfikator UUID blkid powyżej „32cb0a6e-8148-44e9-909d-5b23df045bd1” jest poprawny, to jest to, czego system operacyjny użyje do znalezienia macierzy RAID.

mdadm ma własny „wewnętrzny” identyfikator UUID, który nie jest używany bezpośrednio przez system operacyjny i jest używany w pliku mdadm.conf, np .:

„ARRAY / dev / md1 level = raid1 num-devices = 2 uuid = f204c558: babf732d: 85bd7296: bbfebeea”

mdadm nie powinien wywoływać żadnych UUID, gdy jest on oddzielny od tego, który rozpoznają blkid i system operacyjny. Może powinno się to nazywać mduuid lub coś innego, aby uniknąć zamieszania.

cioby23
źródło