web-dev-qa-db-ja.com

blkidとmdadmのUUIDの違いは?

誰かがblkidmdadmによって報告されたUUIDの違いを説明できますか? 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

なぜ違うのですか、mdadmで使用されるUUIDをどのように変更しますか?

tune2fsはパーティションのUUIDを変更します(blkidが返すものを変更します)が、mdadmが使用するものを変更する方法がわかりません。

26
Chris

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

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

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

したがって、例として、GPTパーティショニングを備えた3つのドライブを持つシステムがあるとします。これらのドライブには、一意に識別する World Wide Name を含めることができます。 3つのドライブがそれぞれ1つのパーティション(/dev/sd[abc]1)でパーティション分割されているとしましょう。各パーティションには、GPTパーティションテーブルに格納されたGPT UUIDがあります。

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

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

これは、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/md0p1はPV UUIDを提供します。また、/dev/md0のGPTテーブルにパーティションUUIDがあります。 /dev/md0自体は、他のブロックデバイスから作成されます。 blkid /dev/sda1はRAIDメンバーのUUIDを返します。また、/dev/sdaのGPTテーブルにパーティションUUIDがあります。

23

異なる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:

# 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-cd36f654020dd8b8b4e5:e47b2e45:2093cd36:f654020dの比較になります。

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

4
frostschutz