ユーザ用ツール

サイト用ツール


linux:softwareraid

Linux Software RAID

HDDの障害によるデータの損失に備えるために、RAIDは有効な手段である。一度RAIDを使い始めると、実際にトラブルに見舞われたことはほとんどないが、もう非RAID構成ではどうも不安で仕方がない。

RAIDには、ハードウェアで構成するものとソフトウェアで構成するものがある。最近では、マザーボードにRAID機能が搭載されていることも多いが、Linuxではどうも使い勝手が悪いところがある。また、RAIDが搭載されていないマザーボードでも運用しなければならないことがあることや、Linuxでの運用の柔軟性などから、基本的にはLinuxのカーネルが提供するソフトウェアRAIDを使っている。以下では、Gentooでの設定方法を記録しておく。

ここではRAID 1でミラーリングされたディスク上にGentooをインストールする方法を記述する。この手順が理解できれば、他のパターンでも簡単に設定できるだろう。

参考資料など

起動

Install CDで起動する。

RAID用カーネルモジュールのロード

RAID1 = ミラーリングで構成するので、RAID1モジュールをロードする。

> modprobe raid1

ロードしなくてもコマンドの発行で自動的にロードするはずだが念のためロードしておく。

パーティションの作成

パーティションごとにRAIDを構成する。

ここでは、「/boot」「/」「swap」の3種類を作成する。

> gdisk /dev/sda
  • 2TB超のHDDを想定してGPTパーティションテーブルを作成する。
  • GPTパーティションテーブルを作成するにはpartedが用いられるがgdisk(sys-apps/gptfdisk)の方が便利。
  • UEFIでは必要ない(らしい:未検証)が、BIOS-GPTでgrug2を利用する場合、core.imgを置く特別なパーティション(パーティションタイプ:ef02(bios_brub))が必要となる。これは先頭から2Tib以内に置く必要がある。容量は1Mib程度でよいらしい。
  • パーティションタイプをLinux RAIDにする。
  • GPTはディスクの先頭とは別にディスクの末尾にバックアップを持つ。パーティションテーブルを初期化(破壊)するためには、ddで先頭とともに末尾も埋めなければならない。

デバイスファイル作成

RAIDデバイス数に応じて作成する。

# mknod /dev/md1 b 9 1
# mknod /dev/md2 b 9 2
# mknod /dev/md3 b 9 3

RAIDの構成

mdadmコマンドでRAIDデバイスを構成

grub0.97でRAID1を利用する場合には、「/boot」および「/」パーティションについては古いメタデータ形式にする必要がある。

基本的には–metadata=0.90で全て作成する。

grub2が標準で利用可能になったので、–metadata=1.2など新しい形式でも利用可能。その場合、–nameオプションで名前を指定することもできる。指定しなければ、その時のホスト名を基準に作成されるようだ。

> mdadm --create --verbose --metadata=0.90 /dev/md1 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
> mdadm --create --verbose --metadata=0.90 /dev/md2 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2
> mdadm --create --verbose --metadata=0.90 /dev/md3 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3

#grub2以降の場合
> mdadm --create --verbose /dev/md3 --name=NAME --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3
  • –level
    • RAIDのモード。lever=1はミラーリング
  • –raid-devices
    • RAIDを構成するデバイス数。後で変更できる。
    • デバイスを実HDD数よりも多くした場合、存在しないデバイスをmissingとして指定する。

2TB以降のディスクを利用する場合の注意点

  • metadata=0.90でのみカーネルのmdデバイス自動構成が利用できる。metadata=1.x以降はudevを通して構成される。
  • metadata=0.90は2TBまでしか扱えない。
    • 2TB以上のディスクの場合は、パーティションテーブルをGPT、metadata=1.xを利用する。
  • grub1では、metadata=1.xを扱えないのでそのままでは起動できない。
    • grub2を利用することを検討する。
    • grub1を使う場合にはinitrdが必要であり、少なくともinitrdが置かれているパーティション(=/boot)はmetadata=0.90でなければならない。
    • rootfsもgrubが扱えない形式(metadata=1.x)であればマウントできず起動できない。
    • initrdを利用すればrootfsがmetadata=1.xでもマウントできる。grub2でもmetadata1.xではカーネルのデバイスの自動決定がうまく動かないようなので、initrdで/etc/mdadm.confを読み込んでRAIDをスタートさせてからマウントしないといけないようだ

initfamfsの作成

> genkernel --mdadm --mdadm-config=/etc/mdadm.conf initramfs

Gentooではgenkernelコマンドを利用して作成できる。RAIDを利用するためには、mdadmオプションを指定してinitramfsを作成しなければならない。またRAIDの構成情報も指定してやる(標準の場所なら指定しなくても問題ない)。

grubのパラメータの変更

title Gentoo Linux 3.x.y-gentoo
kernel /vmlinuz-3.x.y-gentoo root=/dev/ram0 real_root=/dev/md2 domdadm
initrd /initramfs-genkernel-x86_64-3.x.y-gentoo
  • root=/dev/ram0に変更して一時的にオンメモリファイルシステムをマウントする。
  • real_root カーネルがロードされた後にrootfsとなるデバイス。元のrootデバイスを指定する。
  • domdadm initrdのbusyboxがmdadmを実行するためのスイッチ(Gentoo特有の設定)。
  • initrd initramfsのファイルを指定する。
  • カーネルでもinitrd(initramfs)が利用できるように設定しておく。

以上でinitrdを利用してRAIDを構成できるようになる。

RAIDデバイスの準備

mdadmでRAIDデバイスを作成するとデバイスの構成が始まる。検証しなくても問題なく動作するが、初回はチェックしておくのがよいだろう。RAIDデバイスのステータスは

  • /proc/mdstat

で確認できる。watchコマンドなどでデバイス構成の進捗を確認するとよい。

> watch --interval=1 cat /proc/mdstat

デバイス構成中でも操作は可能だが、できれば完了するまで待つのがよいかもしれない。

RAID構成情報の記述

metadata=0.9を利用する場合には、(確かmetadataにデバイス名が記録されているので)構成ファイルを記述しなくても自動的に元の構成が再現される。metadata=1.*の場合は、カーネルのRAID自動構成は機能するが、デバイス名が/dev/md127など意図しないものとなる。

metadata=1.*ではudevのruleでmdadmコマンドが呼ばれて/etc/mdadm.confに沿ってRAIDデバイスが構成される。rootfsの場合には、initrdで仮のファイルシステムでカーネルをロードして、その中のbusyboxでmdadmを実行してRAIDを構成する。rootfsでなければ、カーネルの自動構成は機能する。

> mdadm --detail --scan >> /etc/mdadm.conf 

OSのインストールなど

以上の手順で/dev/md*ができるので、このデバイスにファイルシステムを作成して通常通り利用する。

linux/softwareraid.txt · 最終更新: 2016/05/08 12:13 by Wiki Editor

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki