Чем отличается 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. Он хранится в метаданных массива (на каждом члене). Члены массива также имеют свой собственный UUID (в системе md они могут также иметь UUID раздела, если они являются разделами GPT (которые сами будут храниться в таблице разделов GPT) или тома LVM ...).

blkidнемного вводит в заблуждение, так как он возвращает идентификатор структуры, хранящейся на устройстве (для таких структур, о которых он знает, как и большинство файловых систем, членов LVM и устройств подкачки). Также обратите внимание, что весьма обычно иметь блочные устройства со структурами с одинаковыми UUID (например, снимками LVM). И блочное устройство может содержать что угодно, включая вещи, структура которых не включает UUID.

Так, например, у вас может быть система с 3 дисками с разделением GPT. Эти диски могут иметь всемирное имя, которое однозначно идентифицирует его. Допустим, 3 диска разделены по одному разделу на каждый ( /dev/sd[abc]1). Каждый раздел будет иметь UUID GPT, хранящийся в таблице разделов GPT.

Если эти разделы составляют массив md RAID5. Каждый из них получит md UUID в качестве члена RAID, а массив получит UUID в качестве устройства md RAID.

Это /dev/md0может быть далее разделено с MSDOS или разделением типа GPT. Например, у нас может быть /dev/md0p1раздел с UUID GPT (хранится в таблице разделов GPT, которая хранится в данных / dev / md0).

Это может быть физический том для LVM. Как таковой он получит PV UUID. Группа томов также будет иметь VG UUID.

В этой группе томов вы должны создавать логические тома, каждый из которых получает LV UUID.

На одном из этих LV (например /dev/VG/LV) вы можете создать файловую систему ext4. Эта файловая система получит UUID ext4.

blkid /dev/VG/LVполучил бы (ext4) UUID этой файловой системы. Но как раздел внутри тома VG, он также получит UUID раздела (некоторые схемы разделения, такие как MSDOS / MBR, не имеют UUID). Эта группа томов состоит из членов 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, чем смешиваться с UUID.
Стефан Шазелас
MD UUID - мы восстановили сервер из резервной копии. Знаете ли вы, как обновить UUID устройства RAID? Я не вижу этой информации на странице руководства. Мы просто пытаемся найти самый простой способ заставить его работать (тестирование процедуры восстановления).
Крис
@ Крис, ты должен поднять другой вопрос для этого.
Стефан Шазелас
@ Крис: Вы хотите, чтобы UUID были другими. Если mdadm обнаружит, что несколько дисков принадлежат одному и тому же рейду, даже если это разные рейды (из-за конфликтов UUID), у вас будут реальные проблемы.
frostschutz
4

Другой UUID уже был объяснен. Они есть не только в файловых системах. Просто есть UUID для разных вещей: массив raid, устройство, раздел, контейнеры LUKS, PVM LVM ... и, наконец, файловые системы.

Лично меня раздражает то, что даже способ форматирования этих 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

Как вы можете видеть, они являются одинаковыми UUID, но blkidпечатают их тире, в -то время как mdadmиспользуются двоеточия :. Таким образом, вы получаете d8b8b4e5-e47b-2e45-2093-cd36f654020dпротив d8b8b4e5:e47b2e45:2093cd36:f654020d.

Очень раздражает, особенно если вы хотите работать с UUID в скриптах. Не очевидно, как конвертировать из одного форматирования в другое.

frostschutz
источник
А как насчет s /: / - / g или наоборот? ;)
ThiefMaster
на самом деле двоеточие :или тире -существуют просто для того, чтобы люди могли читать длинные UUID кусками и не теряться где-то посередине. UUID на самом деле является двоичным числом и не имеет тире или двоеточий. Он реализован в Linux как беззнаковое массив символов: unsigned char uuid_out[16]. Очевидно, спецификация UUID также имеет представление о вариантах и ​​версиях , которые мы можем увидеть реализованными, установив для старшего байта uuid_out[6]значение 4 .
TrinitronX
-1

UUID blkid выше «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 или что-то еще, чтобы избежать путаницы.

cioby23
источник