ソフトウェア RAID 上で LVM
この記事ではソフトウェア RAID や論理ボリュームマネージャ (LVM) を使って Arch Linux をインストール・設定する方法を説明します。RAID と LVM を組み合わせることは RAID だけを使うときに比べて様々な利点があります。
目次
イントロダクション
RAID と LVM は似ている技術のように思えるかもしれませんが、どちらも独自の特徴があります。この記事では3つの同じような 1TB の SATA ハードディスクを用いる例を使います。ドライブは /dev/sda
, /dev/sdb
, /dev/sdc
としてアクセスできると仮定します。IDE ドライブを使用する場合、性能を最大限に出すために、それぞれのドライブが別々のチャンネルのマスターになるようにしてください。
LVM 論理ボリューム | /
|
/var
|
/swap
|
/home
|
LVM ボリュームグループ | /dev/VolGroupArray
|
RAID アレイ | /dev/md0
|
/dev/md1
|
物理パーティション | /dev/sda1
|
/dev/sdb1
|
/dev/sdc1
|
/dev/sda2
|
/dev/sdb2
|
/dev/sdc2
|
ハードドライブ | /dev/sda
|
/dev/sdb
|
/dev/sdc
|
スワップ領域
別に RAID1 アレイを作成したり LVM 論理ボリュームを作成するなど、チュートリアルによってスワップ領域の扱い方は大分違います。スワップ領域を別のアレイに作成しても冗長性は高まりません。その代わり、スワップ領域が破損してシステムが操作できなくなる状態になるのを防ぐことには役立ちます。この問題はスワップ領域が root ディレクトリと同一のパーティションに存在する場合に発生することがあります。
MBR と GPT
Wikipedia:GUID Partition Table を参照してください。
1980年台の初期から広く使われている Master Boot Record (MBR) パーティションスキームには制限があり、最近のハードウェアでの使用に影響があります。GUID Partition Table (GPT) は Intel が開発した UEFI の仕様に基づく、パーティションテーブルの新しい標準レイアウトです。GPT には MBR と比べて多数の改善が施されていますが、GRUB2 で使う場合、ディスクの最初にパーティションを追加で作成する必要があります (参照: GPT 特有の手順)。
ブートローダー
このチュートリアルでは GRUB ではなく Syslinux を使います。GPT で GRUB を使用する場合、BIOS Boot Partition が追加で必要になります。
initramfs と組み合わせることで、GRUB は mdadm によって作成されるメタデータの最新デフォルトスタイル (1.2) に対応します。Arch Linux では initramfs は mkinitcpio によって置き換えられます。Syslinux はバージョン 1.0 しかサポートしていないので、--metadata=1.0
オプションが必要です。
ブートローダーによっては (例: GRUB Legacy, LILO) は 1.x のメタデータバージョンをサポートしておらず、旧式のバージョンの 0.90 が必要なことがあります。そのようなブートローダーを使用する場合、RAID のインストールをするときに /boot
アレイに --metadata=0.90
オプションを追加するようにしてください。
インストール
インストールガイドに書かれているとおりに、最新のインストールメディアを入手して Arch Linux インストーラーを起動してください。ガイドの指示に従ってネットワークの設定まで行なって下さい。
カーネルモジュールのロード
Alt
+F2
を押して別の TTY ターミナルを開いて下さい。適切な RAID (例: raid0
, raid1
, raid5
, raid6
, raid10
) と LVM (dm-mod
) のモジュールをロードします。以下は RAID1 と RAID5 を利用する場合の例です:
# modprobe raid1 # modprobe raid5 # modprobe dm-mod
ハードドライブの準備
ハードドライブにはそれぞれ 100MB の /boot
パーティションと 2048MB の /swap
パーティション、そして残り全部を使用する /
パーティションを作成します。
ブートパーティションは RAID1 にします。ブートパーティションをストライプしたり (RAID0)、RAID5 や RAID6 などにすることはできません。GRUB に RAID ドライバーがないのはこのためです。他のレベルを使用するとシステムが起動できなくなります。どれか一つのブートパーティションに問題が起こった場合、ブートローダーは /boot
アレイの他の2つのパーティションから通常通りに起動できます。
gdisk のインストール
ほとんどのディスクパーティショニングソフトウェア (fdisk や sfdisk) は GPT をサポートしていないため、gptfdisk をインストールしてブートローダーのパーティションのパーティションタイプを設定する必要があります。
pacman データベースを更新:
$ pacman-db-upgrade
パッケージリストを更新:
$ pacman -Syy
gptfdisk をインストールしてください。
ハードドライブのパーティション
gdisk
を使って3つのハードドライブ (/dev/sda
, /dev/sdb
, /dev/sdc
) に3つのパーティションを作成します:
Name Flags Part Type FS Type [Label] Size (MB) ------------------------------------------------------------------------------- sda1 Boot Primary linux_raid_m 100.00 # /boot sda2 Primary linux_raid_m 2000.00 # /swap sda3 Primary linux_raid_m 97900.00 # /
1番目のハードドライブを gdisk
で開いて下さい:
# gdisk /dev/sda
そしてプロンプトに以下のコマンドを入力:
- 新しいパーティションを追加:
n
- デフォルトのパーティション番号を選択:
Enter
- 最初のセクタはデフォルトを使用:
Enter
sda1
とsda2
の容量を MB で指定 (+100MB
と+2048M
)。sda3
はEnter
を押してディスクの残り全部を使用。- パーティションタイプは
Linux RAID
を選択:fd00
- テーブルをディスクに書き込んで終了:
w
上記の手順を /dev/sdb
と /dev/sdc
で繰り返して下さい。あるいは下の sgdisk
を使う方法を使って下さい。新しいテーブルをカーネルに認識させるために再起動が必要です。
sgdisk でパーティションを複製
GPT を使用する場合、sgdisk
を使って /dev/sda
のパーティションテーブルを他の2つのハードドライブに複製することができます:
$ sgdisk --backup=table /dev/sda $ sgdisk --load-backup=table /dev/sdb $ sgdisk --load-backup=table /dev/sdc
RAID のインストール
物理パーティションを作成したら、mdadm
で /boot, /swap, / アレイを設定することができます。mdadm
は RAID を管理するための高度なツールで、mdadm
を使うことでインストール環境の中に /etc/mdadm.conf
を作成します。
/dev/md0
に / アレイを作成:
# mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sd[abc]3
/dev/md1
に /swap アレイを作成:
# mdadm --create /dev/md1 --level=1 --raid-devices=3 /dev/sd[abc]2
/dev/md2
に /boot アレイを作成:
# mdadm --create /dev/md2 --level=1 --raid-devices=3 --metadata=1.0 /dev/sd[abc]1
同期
RAID ボリュームを作成したら、アレイの中の物理パーティションの中身が同期されます。/proc/mdstat
の出力を以下のように定期的に更新することで進捗を監視できます:
# watch -n .1 cat /proc/mdstat
アレイに関する詳細な情報は次のコマンドで確認できます:
# mdadm --misc --detail /dev/md[012] | less
同期が完了したら State
行が clean
になります。出力の一番下のテーブルの各デバイスの State
カラムが spare
または active sync
になるはずです。active sync
はアレイの各デバイスが有効になっていることを意味します。
スクラブ
定期的にデータ スクラブ を実行してエラーを確認・修復することを推奨します。
データスクラブを開始するには:
# echo check > /sys/block/md0/md/sync_action
mdadm に関連する他のタスク/アイテムと同じように、スクラブの状態も確認できます:
# cat /proc/mdstat
例:
$ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1] md0 : active raid1 sdb1[0] sdc1[1] 3906778112 blocks super 1.2 [2/2] [UU] [>....................] check = 4.0% (158288320/3906778112) finish=386.5min speed=161604K/sec bitmap: 0/30 pages [0KB], 65536KB chunk
実行中のデータスクラブを停止するには:
# echo idle > /sys/block/md0/md/sync_action
スクラブが完了したら、不良ブロックの数を確認することができます:
# cat /sys/block/md0/md/mismatch_cnt
check 操作は不良セクタとドライブの不一致をスキャンします。不良セクタは自動的に修復されます。不一致がみつかった場合 (良好セクタに不良データが含まれていた場合) は記録だけが取られ (下を参照)、対処は何もされません。管理者がセクタのデータを精査して、冗長情報からセクタを再構築して正しいデータを保持することができます。
スクラブに関するノート
定期的にスクラブを root で実行する cron ジョブを設定すると良いでしょう。raid-checkAUR を見て下さい。
スクラブの RAID1 と RAID10 に関するノート
RAID1 と RAID10 では書き込みはバッファされないので、アレイに問題がない場合でもアレイに不一致が検出されることがあります。不一致が検出されるのは一時的なデータ領域だけで、問題はありません。しかしながら、不一致がただの一時的なデータなのか、あるいは実際に問題が発生することを意味しているかの違いを明言することはできません。RAID1 と RAID10 アレイには偽陽性があります。それでも、デバイスに不良セクタが存在しないか確認するためにスクラブを行うことを推奨します。
LVM のインストール
このセクションでは2つの RAID を物理ボリューム (PV) に変換します。そして PV をボリュームグループ (VG) にまとめます。VG は論理ボリューム (LV) に分割することで実際のパーティションのように扱えるようになります (例: /
, /var
, /home
)。LVM のことをよく知らない場合は LVM の記事を読んで下さい。
物理ボリュームの作成
以下のコマンドを使って RAID を物理ボリューム (PV) に変換することで LVM から RAID にアクセスできるようにします。作成した RAID アレイの数だけコマンドを繰り返し実行してください:
# pvcreate /dev/md0
LVM で PV が追加されたことを確認するには:
# pvdisplay
ボリュームグループの作成
次に PV にボリュームグループ (VG) を作成します。
1番目の PV でボリュームグループ (VG) を作成:
# vgcreate VolGroupArray /dev/md0
LVM に VG が追加されたことを確認するには:
# vgdisplay
論理ボリュームの作成
通常のハードドライブの準備と同じように、VG に論理ボリューム (LV) を作成する必要があります。この例では /
, /var
, /swap
, /home
の LV を作成します。LV は /dev/mapper/VolGroupArray-<lvname>
や /dev/VolGroupArray/<lvname>
でアクセスできるようになります。
/ の LV を作成:
# lvcreate -L 20G VolGroupArray -n lvroot
/var の LV を作成:
# lvcreate -L 15G VolGroupArray -n lvvar
VG の残り容量を全て使用する /home の LV を作成:
# lvcreate -l +100%FREE VolGroupArray -n lvhome
LVM で LV が作成されたことを確認するには:
# lvdisplay
RAID 設定の更新
インストーラーは /etc/mdadm.conf
を使って対象のシステムに initrd を作成するので、RAID を設定するようにファイルを更新する必要があります。元のファイルは削除してかまいません。mdadm が自動的に設定します。mdadm を使って現在の構成で新しい設定ファイルを作成してください:
# mdadm --examine --scan > /etc/mdadm.conf
ハードドライブの準備
ファイルシステムやマウントポイントを設定して下さい。設定するのは PV (例: /dev/mapper/VolGroupArray-lvhome
) だけであり実際のディスク (例: /dev/sda1
) は弄らないようにします。
システムの設定
mkinitcpio.conf
mkinitcpio でフックを使うことで起動時にアレイを構築することができます。詳しくは mkinitcpio#RAID を使うを見て下さい。
/etc/mkinitcpio.conf
のMODULES
リストにdm_mod
モジュールを追加してください。/etc/mkinitcpio.conf
のHOOKS
リストにudev
モジュールの後ろにmdadm_udev
とlvm2
フックを追加してください。
再起動
設定が完了したらマシンを再起動してください:
# reboot
別のブートドライブにブートローダーをインストール
新しいシステムが起動できるようになったら、ブートローダーを他の2つのディスクにインストールすると良いでしょう。そうすることで、ディスクが故障しても、(BIOS でブートの順番を切り替えるなどして) 他のドライブからシステムを起動できます。使用するブートローダーのシステムによって手順は異なります:
Syslinux
root で新しいシステムにログインして次を実行:
# /usr/sbin/syslinux-install_update -iam
Syslinux は各 RAID アレイの MBR にブートローダーをインストールします:
Detected RAID on /boot - installing Syslinux with --raid Syslinux install successful
Attribute Legacy Bios Bootable Set - /dev/sda1 Attribute Legacy Bios Bootable Set - /dev/sdb1 Installed MBR (/usr/lib/syslinux/gptmbr.bin) to /dev/sda Installed MBR (/usr/lib/syslinux/gptmbr.bin) to /dev/sdb
GRUB Legacy
root で新しいシステムにログインして次を実行:
# grub grub> device (hd0) /dev/sdb grub> root (hd0,0) grub> setup (hd0) grub> device (hd0) /dev/sdc grub> root (hd0,0) grub> setup (hd0) grub> quit
ファイルシステムのパーティションスキームをバックアップ
ブートローダーを追加したら、それぞれのドライブのパーティションの状態を保存しておくと良いでしょう。どれかのドライブが故障したときにディスクを交換・再構築するのが楽になります。sfdisk
ツールを使って以下を実行することで保存できます:
# mkdir /etc/partitions # sfdisk --dump /dev/sda >/etc/partitions/disc0.partitions # sfdisk --dump /dev/sdb >/etc/partitions/disc1.partitions # sfdisk --dump /dev/sdc >/etc/partitions/disc2.partitions
管理
ソフトウェア RAID や LVM を管理する方法は RAID と LVM の記事を参照してください。
参照
- Setup Arch Linux on top of raid, LVM2 and encrypted partitions by Yannick Loth
- RAID vs. LVM on Stack Overflow
- What is better LVM on RAID or RAID on LVM? on Server Fault
- Managing RAID and LVM with Linux (v0.5) by Gregory Gulik
- Gentoo Linux x86 with Software Raid and LVM2 Quick Install Guide
- 2011-09-08 - Arch Linux - LVM & RAID (1.2 metadata) + SYSLINUX
- 2011-04-20 - Arch Linux - Software RAID and LVM questions
- 2011-03-12 - Arch Linux - Some newbie questions about installation, LVM, grub, RAID