blkid と mdadm の UUID の違いは何ですか?

blkid と mdadm の UUID の違いは何ですか?

blkidとによって報告される UUID の違いを説明していただけますかmdadm? たとえば、当社の CentOS システムの 1 つでは次のようになります。

[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

答え1

最初のものは、ブロック デバイス上の ext4 ファイルシステムの UUID を報告しますmd。これは、システムで使用可能なファイルシステムの中からファイルシステムを一意に識別するのに役立ちます。これは、ファイルシステムの構造、つまり md デバイスに保存されているデータに保存されます。

2 つ目は、RAID デバイスの UUID です。これは、md サブシステムが特定の RAID デバイスを一意に識別するのに役立ちます。特に、RAID アレイに属するすべてのブロック デバイスを識別するのに役立ちます。これは、アレイのメタデータ (各メンバー) に保存されます。アレイ メンバーにも独自の UUID があります (md システムでは、GPT パーティション (それ自体が GPT パーティション テーブルに保存されます) または LVM ボリュームの場合は、パーティション UUID も持つ場合があります)。

blkid少し誤解を招くかもしれません。返されるのはデバイスに格納されている構造の ID です (ほとんどのファイルシステム、LVM メンバー、スワップ デバイスなど、デバイスが認識している種類の構造)。また、ブロック デバイスに同一の UUID を持つ構造が存在することも珍しくありません (たとえば、LVM スナップショット)。また、ブロック デバイスには、構造に UUID が含まれないものも含め、あらゆるものを含めることができます。

例えば、GPTパーティションを持つ3つのドライブを持つシステムがあるとします。これらのドライブにはワールドワイドネームこれはそれを一意に識別します。3 つのドライブがそれぞれ 1 つのパーティションに分割されているとします ( /dev/sd[abc]1)。各パーティションには、GPT パーティション テーブルに格納された GPT UUID があります。

これらのパーティションが md RAID5 アレイを構成する場合、各パーティションは RAID メンバーとして md UUID を取得し、アレイは md RAID デバイスとして UUID を取得します。

これは、/dev/md0MSDOS または GPT タイプのパーティション分割でさらにパーティション分割できます。たとえば、/dev/md0p1GPT UUID (/dev/md0 のデータに格納されている GPT パーティション テーブルに格納) を持つパーティションを作成できます。

これは、LVM の物理ボリュームである可能性があります。そのため、PV UUID を取得します。ボリューム グループには VG UUID もあります。

そのボリューム グループでは、論理ボリュームを作成し、それぞれに LV UUID が付与されます。

これらの LV の 1 つ (など/dev/VG/LV) に、ext4 ファイルシステムを作成できます。そのファイルシステムは ext4 UUID を取得します。

blkid /dev/VG/LVは、そのファイルシステムの (ext4) UUID を取得します。ただし、VG ボリューム内のパーティションとして、パーティション UUID も取得します (MSDOS/MBR などの一部のパーティション スキームには UUID がありません)。そのボリューム グループは、それ自体が他のブロック デバイスであるメンバー PV で構成されています。は、blkid /dev/md0p1PV UUID を取得します。また、 の GPT テーブルにパーティション UUID があります/dev/md0/dev/md0それ自体は、他のブロック デバイスで構成されています。は、blkid /dev/sda1raid メンバー UUID を返します。また、 の GPT テーブルにパーティション UUID があります/dev/sda

答え2

さまざまな UUID についてはすでに説明しました。ファイルシステムだけが UUID を持っているわけではありません。RAID アレイ、デバイス、パーティション、LUKS コンテナ、LVM PV...、そして最後にファイルシステムなど、さまざまなものに UUID があります。

個人的に私を苛立たせているのは、それらの 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 --examine /dev/sda1 | grep UUID
     Array UUID : d8b8b4e5:e47b2e45:2093cd36:f654020d
    Device UUID : 3c3e6eac:21393f7a:16b75728:0934d88e

ご覧のとおり、これらは同じ UUID ですが、blkidはダッシュを使用して印刷します-が、 はmdadmコロンを使用します:。つまり、d8b8b4e5-e47b-2e45-2093-cd36f654020dvs.になりますd8b8b4e5:e47b2e45:2093cd36:f654020d

特にスクリプトで UUID を操作する場合は非常に面倒です。あるフォーマットから別のフォーマットに変換する方法が明確ではありません。

答え3

上記の blkid UUID「32cb0a6e-8148-44e9-909d-5b23df045bd1」は正しいもので、OS が RAID アレイを見つけるために使用するものです。

mdadm には独自の「内部」 UUID があり、これは OS によって直接使用されず、mdadm.conf ファイルで使用されます。例:

「配列 /dev/md1 レベル=raid1 デバイス数=2 uuid=f204c558:babf732d:85bd7296:bbfebeea」

mdadm は、blkid と OS が認識するものとは別のものを UUID と呼ぶべきではありません。混乱を避けるために、mduuid など他の名前にすべきかもしれません。

関連情報