最終更新: megaron_sanders 2017年02月25日(土) 17:43:33履歴
udevはlinuxで検出したデバイスを処理するためのデーモンです。 ubuntuも例にもれずこれを使っているので、USBデバイスを検出するとこれに記載されているルールに沿って処理されます。
RAIDデバイスを自動マウントするのに、/etc/fstab を利用することも考えたのですが、起動時の読み込みに限定されるのでUSBのHDDとかに柔軟に対応しようと考え、udevを利用することにしました。
あとはudevの勉強がてらメモを残します。 意外に簡単に出来たのでちょっと時間がある方は試してみるといいと思います。
RAIDデバイスを自動マウントするのに、/etc/fstab を利用することも考えたのですが、起動時の読み込みに限定されるのでUSBのHDDとかに柔軟に対応しようと考え、udevを利用することにしました。
あとはudevの勉強がてらメモを残します。 意外に簡単に出来たのでちょっと時間がある方は試してみるといいと思います。
udevでルールの定義は以下のものがあります。
こちは /lib/udev/rules.d にあるルール一覧です。
例えば 「/lib/udev/rules.d/63-md-raid-arrays.rules」の内容はこんな感じです。
この中にある「SUBSYSTEM」「ACTION」「KERNEL」「ENV」などがあります。 これらをカスタマイズして書く必要があります。
また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デバイスを作成したら、/etc/mdadm/mdadm.confに情報を書き込むように指示がありますが、確認すると既に新しいデバイス(ここでは「md3」)がちゃんと認識されているので、特に記載はしてません。 おそらくmdmonitorあたりにすでに情報が登録されていると思われます。
ただ何回か再起動すると「md」の後に続く数字が、変わることがあります。 自分は「md3」が「md127」として認識されていることがありました。 md3で固定であれば、それでマウントコマンドを記載すれば終わりなんだけど、無理なので以下の手順を踏んでマウントすることにしました。
ただ何回か再起動すると「md」の後に続く数字が、変わることがあります。 自分は「md3」が「md127」として認識されていることがありました。 md3で固定であれば、それでマウントコマンドを記載すれば終わりなんだけど、無理なので以下の手順を踏んでマウントすることにしました。
- UUIDでデイバスを認識して、固定のリンクを /dev/disk/by-id に作成する
- 作成した固定のリンクを使ってマウントコマンドを実行してマウントする
で、作成したのが以下の内容です。 これを /etc/udev/rules.d/10-myrule.rule に保存して再起動すればできました。
基本的に元のファイルをコピーしています。
この最初の部分で
この部分で最初の固定リンクを作成しています。 条件として
見ていてカンのいい人は気づくと思いますが、「==」となっているものは条件の指定・「=」は一致した場合に設定する内容を書いています。
ここで「SYMLINK+=」とすることで、リンクを作成しています。
このリンクを使って以下の部分でマウントしています。
条件の指定は
基本的に元のファイルをコピーしています。
この最初の部分で
- デバイス名が「md」で始まるもの
- blockデバイス (ストレージデバイス)
この部分で最初の固定リンクを作成しています。 条件として
- UUIDが条件に一致すること (UUIDはmdadm --detailで予め調べたものです)
見ていてカンのいい人は気づくと思いますが、「==」となっているものは条件の指定・「=」は一致した場合に設定する内容を書いています。
ここで「SYMLINK+=」とすることで、リンクを作成しています。
このリンクを使って以下の部分でマウントしています。
条件の指定は
- mdデバイスであること
- blockデバイスであること
- UUIDが条件に一致すること
コメントをかく