ソフトウェア RAID 上で LVM

提供: ArchWiki
2017年4月26日 (水) 00:10時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

関連記事

この記事ではソフトウェア RAID や論理ボリュームマネージャ (LVM) を使って Arch Linux をインストール・設定する方法を説明します。RAIDLVM を組み合わせることは RAID だけを使うときに比べて様々な利点があります。

イントロダクション

警告: RAID 記事の警告をよく読んで下さい。特に RAID5 を使う場合は注意が必要です。

RAIDLVM は似ている技術のように思えるかもしれませんが、どちらも独自の特徴があります。この記事では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

ハードドライブの準備

ノート: ハードドライブの準備が既にできている場合は、RAID のインストールまで進んで下さい。ハードドライブの準備は他のパーティショニングソフトウェアでも行えます (参照: Article)。

ハードドライブにはそれぞれ 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

そしてプロンプトに以下のコマンドを入力:

  1. 新しいパーティションを追加: n
  2. デフォルトのパーティション番号を選択: Enter
  3. 最初のセクタはデフォルトを使用: Enter
  4. sda1sda2 の容量を MB で指定 (+100MB+2048M)。sda3Enter を押してディスクの残り全部を使用。
  5. パーティションタイプは Linux RAID を選択: fd00
  6. テーブルをディスクに書き込んで終了: w

上記の手順を /dev/sdb/dev/sdc で繰り返して下さい。あるいは下の sgdisk を使う方法を使って下さい。新しいテーブルをカーネルに認識させるために再起動が必要です。

ノート: 各ディスクには全く同じパーティションを作成するようにしてください。異なるサイズのパーティショングループを組み合わせて RAID パーティションを作成することも可能ですが、冗長パーティションは一番小さいパーティションの倍数単位になり、無駄な領域が出てしまいます。

sgdisk でパーティションを複製

GPT を使用する場合、sgdisk を使って /dev/sda のパーティションテーブルを他の2つのハードドライブに複製することができます:

$ sgdisk --backup=table /dev/sda
$ sgdisk --load-backup=table /dev/sdb
$ sgdisk --load-backup=table /dev/sdc
ノート: 上記の方法を使ってドライブのパーティションテーブルを複製して、既存のシステムの置換ドライブとする場合 (例: RAID ドライブの交換)、sgdisk -G /dev/<newDrive> でディスクとパーティションの UUID をランダムに作成して、UUID が一意になるようにしてください。

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
ノート:
  • データの消失を防ぐために RAID を使用する場合 (ディスクが故障したときに実行中のアプリケーションが落ちても気にしない場合)、スワップパーティションを RAID する必要はありません。複数のスワップパーティションを別々に使うことができます。
  • インストールするブートローダーが RAID メタデータのバージョン 1.x をサポートしていない場合、以下のコマンドに --metadata=0.90 オプションを追加してください。

/dev/md2/boot アレイを作成:

# mdadm --create /dev/md2 --level=1 --raid-devices=3 --metadata=1.0 /dev/sd[abc]1

同期

ヒント: If you want to avoid the initial resync with new hard drives add the --assume-clean flag.

RAID ボリュームを作成したら、アレイの中の物理パーティションの中身が同期されます。/proc/mdstat の出力を以下のように定期的に更新することで進捗を監視できます:

# watch -n .1 cat /proc/mdstat
ヒント: Follow the synchronization in another TTY terminal by typing Alt+F3 and then execute the above command.

アレイに関する詳細な情報は次のコマンドで確認できます:

# mdadm --misc --detail /dev/md[012] | less

同期が完了したら State 行が clean になります。出力の一番下のテーブルの各デバイスの State カラムが spare または active sync になるはずです。active sync はアレイの各デバイスが有効になっていることを意味します。

ノート: RAID 同期はファイルシステムから見えないため、インストールを進めてコンピュータを再起動できます。

スクラブ

定期的にデータ スクラブ を実行してエラーを確認・修復することを推奨します。

ノート: アレイのサイズや設定によっては、スクラブには数時間以上かかることもあります。

データスクラブを開始するには:

# 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 操作は不良セクタとドライブの不一致をスキャンします。不良セクタは自動的に修復されます。不一致がみつかった場合 (良好セクタに不良データが含まれていた場合) は記録だけが取られ (下を参照)、対処は何もされません。管理者がセクタのデータを精査して、冗長情報からセクタを再構築して正しいデータを保持することができます。

スクラブに関するノート
ノート: /sys/block/md0/md/sync_actionrepair を echo することもできますが、不一致のデータが存在した場合に自動的に更新されてしまうため危険です。パリティとデータブロックのどちらが正しいのかわからないためです。不良データが正しいデータで置き換えられるかどうかは運任せになってしまいます。

定期的にスクラブを 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
ノート: 既存のボリュームグループに PV を作成する場合は失敗することがあります。そのような場合は -ff オプションを追加すると良いでしょう。

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
ノート: If you would like to add the swap space to the LVM create a /swap LV with the -C y option, which creates a contiguous partition, so that your swap space does not get partitioned over one or more disks nor over non-contiguous physical extents: # lvcreate -C y -L 2G VolGroupArray -n lvswap.

VG の残り容量を全て使用する /home の LV を作成:

# lvcreate -l +100%FREE VolGroupArray -n lvhome

LVM で LV が作成されたことを確認するには:

# lvdisplay
ヒント: You can start out with relatively small logical volumes and expand them later if needed. For simplicity, leave some free space in the volume group so there is room for expansion.

RAID 設定の更新

インストーラーは /etc/mdadm.conf を使って対象のシステムに initrd を作成するので、RAID を設定するようにファイルを更新する必要があります。元のファイルは削除してかまいません。mdadm が自動的に設定します。mdadm を使って現在の構成で新しい設定ファイルを作成してください:

# mdadm --examine --scan > /etc/mdadm.conf
ノート: インストーラーの中から mdadm.conf ファイルが正しく書き込まれたか確認するために設定ファイルの更新セクションのノートを読んで下さい。

ハードドライブの準備

ファイルシステムやマウントポイントを設定して下さい。設定するのは PV (例: /dev/mapper/VolGroupArray-lvhome) だけであり実際のディスク (例: /dev/sda1) は弄らないようにします。

警告: mkfs.xfs はチャンクサイズやストライプサイズをアライメントしてパフォーマンスを最適化しません (参照: Optimum RAID)。

システムの設定

警告: インストールに進む前に LVM の手順に従って下さい。

mkinitcpio.conf

mkinitcpio でフックを使うことで起動時にアレイを構築することができます。詳しくは mkinitcpio#RAID を使うを見て下さい。

  1. /etc/mkinitcpio.confMODULES リストに dm_mod モジュールを追加してください。
  2. /etc/mkinitcpio.confHOOKS リストに udev モジュールの後ろに mdadm_udevlvm2 フックを追加してください。

再起動

設定が完了したらマシンを再起動してください:

# reboot

別のブートドライブにブートローダーをインストール

新しいシステムが起動できるようになったら、ブートローダーを他の2つのディスクにインストールすると良いでしょう。そうすることで、ディスクが故障しても、(BIOS でブートの順番を切り替えるなどして) 他のドライブからシステムを起動できます。使用するブートローダーのシステムによって手順は異なります:

Syslinux

root で新しいシステムにログインして次を実行:

# /usr/sbin/syslinux-install_update -iam
ノート: For this to work with GPT, the gptfdisk package is needed as the backend for setting the boot flag.

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 を管理する方法は RAIDLVM の記事を参照してください。

参照