flea heart なwiki - udevでRAIDドライブを起動時に自動マウント
udevはlinuxで検出したデバイスを処理するためのデーモンです。 ubuntuも例にもれずこれを使っているので、USBデバイスを検出するとこれに記載されているルールに沿って処理されます。

RAIDデバイスを自動マウントするのに、/etc/fstab を利用することも考えたのですが、起動時の読み込みに限定されるのでUSBのHDDとかに柔軟に対応しようと考え、udevを利用することにしました。
あとはudevの勉強がてらメモを残します。 意外に簡単に出来たのでちょっと時間がある方は試してみるといいと思います。


udevについて

udevでルールの定義は以下のものがあります。
  • /lib/udev/rules.d …… デフォルトルールが格納されている場所です。 このルールを編集してはいけません。
  • /etc/udev/rules.d/*.rules …… カスタマイズルールを格納する場所です。 自分でルールを書く場合はこちらに作成します。

こちは /lib/udev/rules.d にあるルール一覧です。


例えば 「/lib/udev/rules.d/63-md-raid-arrays.rules」の内容はこんな感じです。


この中にある「SUBSYSTEM」「ACTION」「KERNEL」「ENV」などがあります。 これらをカスタマイズして書く必要があります。
またudevのルールには以下のような流れがあります。
  • ルールファイルは字句順で処理される
  • /etc/udev/rules.d/ と /lib/udev/rules.d/ に同じファイルがあった場合は、/etc/udev/rules.d/ にあるファイルで上書きされる

ルールを作る前に今接続されているデバイスの情報を取得する方法を確認してみます。
これについては以下のコマンドを使うと簡単に表示されます。
# udevadm info [devicename]

# udevadm info --attribute-walk --name [devicename]


この表示の利用の仕方を記載すると長くなるので、別の機会に書きます。

RAIDデバイス作成直後

RAIDデバイスを作成して再起動した直後のデバイスの認識状況を確認します。 RAIDデバイスを作成したら、/etc/mdadm/mdadm.confに情報を書き込むように指示がありますが、確認すると既に新しいデバイス(ここでは「md3」)がちゃんと認識されているので、特に記載はしてません。 おそらくmdmonitorあたりにすでに情報が登録されていると思われます。



ただ何回か再起動すると「md」の後に続く数字が、変わることがあります。 自分は「md3」が「md127」として認識されていることがありました。 md3で固定であれば、それでマウントコマンドを記載すれば終わりなんだけど、無理なので以下の手順を踏んでマウントすることにしました。
  • UUIDでデイバスを認識して、固定のリンクを /dev/disk/by-id に作成する
  • 作成した固定のリンクを使ってマウントコマンドを実行してマウントする

udev ルール作成

で、作成したのが以下の内容です。 これを /etc/udev/rules.d/10-myrule.rule に保存して再起動すればできました。



基本的に元のファイルをコピーしています。
この最初の部分で
  • デバイス名が「md」で始まるもの
  • blockデバイス (ストレージデバイス)
に限定して、それ以外はこのファイルをスキップするようになっています。



この部分で最初の固定リンクを作成しています。 条件として
  • UUIDが条件に一致すること (UUIDはmdadm --detailで予め調べたものです)
これに合致するものは /dev/disk/by-id/ 配下に固定のリンクを作成しています。
見ていてカンのいい人は気づくと思いますが、「==」となっているものは条件の指定・「=」は一致した場合に設定する内容を書いています。
ここで「SYMLINK+=」とすることで、リンクを作成しています。



このリンクを使って以下の部分でマウントしています。



条件の指定は
  • mdデバイスであること
  • blockデバイスであること
  • UUIDが条件に一致すること
になっていますが、最初の2つはこのファイルの先頭で既にチェック済みなので、なくても大丈夫だと思います。

追記

マウントはこれで出来たのですが、最初のマウント時書き込みが出来ませんでした。 おそらく所有者設定が不足していたようです。
とりあえずマウント後にchownで強制的に書き換えると、2回目以降は普通に書き込みできるので今回はこれで回避しましたが、本当はもうちょっと変更する必要がありそうです。