web-dev-qa-db-ja.com

Linux md RAID:/ dev / md0と/ dev / md / 0

新しいシステムでは、/usr/share/mdadm/mkconf/etc/mdadm/mdadm.confの生成に使用されるスクリプト)は、/dev/md/0ではなく、デバイス名/dev/md0を使用する傾向があります。

new-system ~ # /usr/share/mdadm/mkconf | grep ARRAY
ARRAY /dev/md/0 metadata=1.2 UUID=a0021927:0e4f10bf:2c47dc72:ca0b352e name=unassigned:0

これにより、そこに/dev/md0を期待するユーザーに不快感を与える可能性がありますが、サーバーが問題なく起動するため、明らかに正常に動作します。

/proc/mdstatでは、デバイスは引き続き/dev/md0と呼ばれます。

new-system ~ # cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb2[2] sda2[0]
      1953381184 blocks super 1.2 [2/2] [UU]

unused devices: <none>

lsは、/dev/md/0/dev/md0へのシンボリックリンクであることを示しています。

new-system ~ # ls -l /dev/md/0 
lrwxrwxrwx 1 root root 6 Nov 20 14:06 /dev/md/0 -> ../md0

別の古いシステムでは、mkconfは代わりに/dev/md0を使用し、/dev/mdは空です。

old-system ~ # /usr/share/mdadm/mkconf | grep ARRAY
ARRAY /dev/md0 UUID=76472cf5:83fd8e5a:ad617046:69b2ebf1
old-system ~ # ls -l /dev/md
total 0

これらのデバイス名の違いを知りたいのですが、Googleで説明が見つかりません。 /dev/mdNは古い名前で、md/dev/md/Nデバイス名に移行する予定ですか?この変更は1.2メタデータに関連していますか(古いサーバーはまだ0.90を使用していますが、新しいサーバーはmd 1.2を使用しています)。


編集2017-09-11:私は Krzysztof Stasiakの答え が正しいと思います。私は今、この質問について完全に忘れていました。先週の金曜日にテストRAIDで遊んでいるとき、「複雑なセットアップでmd0、md1、md2などが何を実行するかを覚えるのではなく、なぜアレイに名前を付けないのか」と思ったので、次のことを試しました。

test-server ~ # mdadm --assemble /dev/mdfoobar /dev/loop[01]
mdadm: /dev/mdfoobar is an invalid name for an md device.  Try /dev/md/mdfoobar

そして実際にそれはうまくいきます:

test-server ~ # mdadm --assemble /dev/md/foobar /dev/loop[01]
mdadm: /dev/md/foobar has been started with 2 drives.

test-server ~ # ll /dev/md/foobar 
lrwxrwxrwx 1 root root 6 Sep 11 10:45 /dev/md/foobar -> ../md0

test-server ~ # cat /proc/mdstat 
Personalities : [raid1]
md0 : active (auto-read-only) raid1 loop0[0] loop1[1]
      102272 blocks super 1.2 [2/2] [UU]

unused devices: <none>

mdadm --assemble foobar DEV...も実行できます)。

man mdadmのセクションDEVICE NAMESに詳細な説明があります。

19

配列には独自の名前を付けることができ(0-127だけではありません)、mdadm 3.0.3以降では名前のみを使用できます。パスがサブフォルダー/dev/md/$nameを使用するように変更された場合、柔軟性が向上するか、配列をクリーンまたはグループ化します。 md配列が/dev/mdXの形式で作成された場合、新しい形式に対応するためのシンボリックリンクが追加されます。

1

デバイス名に関しては、 dev の方が適切です。私の理解に、

  1. md%dの命名はカーネルによって使用され、ドライバーによって直接生成されます md.c#L5284 、および/proc/partitionsおよびsysfsで使用されます。したがって、/devに表示されます

  2. /dev/md/...および/dev/disk/by-id/...は、udevdによってシンボリックリンクとして生成されます。私のシステムでは、対応するルールは/usr/lib/udev/rules.d/63-md-raid-arrays.rulesに保持されています。

    ...
    ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}"
    ...
    

Mdadmの this commit によると、udevファイルはopenSUSE 11.1-rc3にあるようです。このファイルをopenSUSE 11.0で確認しましたが、md/%dのシンボリックリンクがありません...

1
myaut

おそらく、元のパスはLinuxカーネルのバージョンまたはUnixシステムによって異なります。シンボリックリンク/dev/md/Nは、互換性の理由で存在する場合があります。 /dev/mdNの代わりにこのパスを使用する可能性のあるプログラムまたはスクリプト。

0
hongo