「ソフトウェア RAID 上で LVM」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(en:Software RAID and LVMへの転送ページ)
 
(AshMyzk がページ「ソフトウェア RAID と LVM」を「ソフトウェア RAID 上で LVM」に移動しました: 英語版に追従)
 
(3人の利用者による、間の8版が非表示)
1行目: 1行目:
  +
[[Category:Arch の入手とインストール]]
#redirect[[en:Software RAID and LVM]]
 
  +
[[Category:ファイルシステム]]
  +
[[en:Software RAID and LVM]]
  +
[[ru:Software RAID and LVM]]
  +
{{Related articles start}}
  +
{{Related|RAID}}
  +
{{Related|LVM}}
  +
{{Related|Fake RAID でインストール}}
  +
{{Related|シングルドライブ環境を RAID に変換}}
  +
{{Related articles end}}
  +
この記事ではソフトウェア RAID や論理ボリュームマネージャ (LVM) を使って Arch Linux をインストール・設定する方法を説明します。[[RAID]] と [[LVM]] を組み合わせることは RAID だけを使うときに比べて様々な利点があります。
  +
  +
== イントロダクション ==
  +
  +
{{Warning|[[RAID]] 記事の警告をよく読んで下さい。特に RAID5 を使う場合は注意が必要です。}}
  +
  +
[[RAID]] と [[LVM]] は似ている技術のように思えるかもしれませんが、どちらも独自の特徴があります。この記事では3つの同じような 1TB の SATA ハードディスクを用いる例を使います。ドライブは {{ic|/dev/sda}}, {{ic|/dev/sdb}}, {{ic|/dev/sdc}} としてアクセスできると仮定します。IDE ドライブを使用する場合、性能を最大限に出すために、それぞれのドライブが別々のチャンネルのマスターになるようにしてください。
  +
  +
{{Tip|インストールを行うときは、インストールに関連するドライブだけを接続することを推奨します。}}
  +
  +
{| border="1" width="100%" style="text-align:center;"
  +
|width="150px" align="left" | '''LVM 論理ボリューム'''
  +
|{{ic|/}}
  +
|{{ic|/var}}
  +
|{{ic|/swap}}
  +
|{{ic|/home}}
  +
|}
  +
{| border="1" width="100%" style="text-align:center;"
  +
|width="150px" align="left" | '''LVM ボリュームグループ'''
  +
|{{ic|/dev/VolGroupArray}}
  +
|}
  +
{| border="1" width="100%" style="text-align:center;"
  +
|width="150px" align="left" | '''RAID アレイ'''
  +
|{{ic|/dev/md0}}
  +
|{{ic|/dev/md1}}
  +
|}
  +
{| border="1" width="100%" style="text-align:center;"
  +
|width="150px" align="left" | '''物理パーティション'''
  +
|{{ic|/dev/sda1}}
  +
|{{ic|/dev/sdb1}}
  +
|{{ic|/dev/sdc1}}
  +
|{{ic|/dev/sda2}}
  +
|{{ic|/dev/sdb2}}
  +
|{{ic|/dev/sdc2}}
  +
|}
  +
{| border="1" width="100%" style="text-align:center;"
  +
|width="150px" align="left" | '''ハードドライブ'''
  +
|{{ic|/dev/sda}}
  +
|{{ic|/dev/sdb}}
  +
|{{ic|/dev/sdc}}
  +
|}
  +
  +
=== スワップ領域 ===
  +
  +
{{note|パフォーマンスを優先したい場合は、カーネルにスワップパーティションを使わせるようにしてください。カーネルはデフォルトでストライピングを行います。}}
  +
  +
別に RAID1 アレイを作成したり LVM 論理ボリュームを作成するなど、チュートリアルによってスワップ領域の扱い方は大分違います。スワップ領域を別のアレイに作成しても冗長性は高まりません。その代わり、スワップ領域が破損してシステムが操作できなくなる状態になるのを防ぐことには役立ちます。この問題はスワップ領域が root ディレクトリと同一のパーティションに存在する場合に発生することがあります。
  +
  +
=== MBR と GPT ===
  +
  +
[[Wikipedia:GUID Partition Table]] を参照してください。
  +
  +
1980年台の初期から広く使われている [[Master Boot Record]] (MBR) パーティションスキームには制限があり、最近のハードウェアでの使用に影響があります。[[GUID Partition Table]] (GPT) は Intel が開発した [[Wikipedia:Unified Extensible Firmware Interface|UEFI]] の仕様に基づく、パーティションテーブルの新しい標準レイアウトです。GPT には MBR と比べて多数の改善が施されていますが、GRUB2 で使う場合、ディスクの最初にパーティションを追加で作成する必要があります (参照: [[GRUB#GUID Partition Table (GPT) 特有の手順|GPT 特有の手順]])。
  +
  +
=== ブートローダー ===
  +
  +
このチュートリアルでは [[GRUB]] ではなく [[Syslinux]] を使います。[[GPT]] で GRUB を使用する場合、[[GRUB#GUID Partition Table (GPT) 特有の手順|BIOS Boot Partition]] が追加で必要になります。
  +
  +
initramfs と組み合わせることで、GRUB は mdadm によって作成されるメタデータの最新デフォルトスタイル (1.2) に対応します。Arch Linux では initramfs は [[mkinitcpio]] によって置き換えられます。Syslinux はバージョン 1.0 しかサポートしていないので、{{ic|<nowiki>--metadata=1.0</nowiki>}} オプションが必要です。
  +
  +
ブートローダーによっては (例: [[GRUB Legacy]], [[LILO]]) は 1.x のメタデータバージョンをサポートしておらず、旧式のバージョンの 0.90 が必要なことがあります。そのようなブートローダーを使用する場合、[[#RAID のインストール|RAID のインストール]]をするときに {{ic|/boot}} アレイに {{ic|<nowiki>--metadata=0.90</nowiki>}} オプションを追加するようにしてください。
  +
  +
== インストール ==
  +
  +
[[インストールガイド]]に書かれているとおりに、最新のインストールメディアを入手して Arch Linux インストーラーを起動してください。ガイドの指示に従ってネットワークの設定まで行なって下さい。
  +
  +
==== カーネルモジュールのロード ====
  +
  +
{{ic|Alt}}+{{ic|F2}} を押して別の TTY ターミナルを開いて下さい。適切な RAID (例: {{ic|raid0}}, {{ic|raid1}}, {{ic|raid5}}, {{ic|raid6}}, {{ic|raid10}}) と LVM ({{ic|dm-mod}}) のモジュールをロードします。以下は RAID1 と RAID5 を利用する場合の例です:
  +
# modprobe raid1
  +
# modprobe raid5
  +
# modprobe dm-mod
  +
  +
=== ハードドライブの準備 ===
  +
  +
{{note|ハードドライブの準備が既にできている場合は、[[#RAID のインストール|RAID のインストール]]まで進んで下さい。ハードドライブの準備は他のパーティショニングソフトウェアでも行えます (参照: [http://yannickloth.be/blog/2010/08/01/installing-archlinux-with-software-raid1-encrypted-filesystem-and-lvm2/ Article])。}}
  +
  +
ハードドライブにはそれぞれ 100MB の {{ic|/boot}} パーティションと 2048MB の {{ic|/swap}} パーティション、そして残り全部を使用する {{ic|/}} パーティションを作成します。
  +
  +
ブートパーティションは RAID1 にします。ブートパーティションをストライプしたり (RAID0)、RAID5 や RAID6 などにすることはできません。GRUB に RAID ドライバーがないのはこのためです。他のレベルを使用するとシステムが起動できなくなります。どれか一つのブートパーティションに問題が起こった場合、ブートローダーは {{ic|/boot}} アレイの他の2つのパーティションから通常通りに起動できます。
  +
  +
==== gdisk のインストール ====
  +
  +
ほとんどのディスクパーティショニングソフトウェア (fdisk や sfdisk) は GPT をサポートしていないため、{{Pkg|gptfdisk}} をインストールしてブートローダーのパーティションのパーティションタイプを設定する必要があります。
  +
  +
[[pacman]] データベースを更新:
  +
$ pacman-db-upgrade
  +
  +
パッケージリストを更新:
  +
$ pacman -Syy
  +
  +
'''gptfdisk''' をインストールしてください。
  +
  +
==== ハードドライブのパーティション ====
  +
  +
{{ic|gdisk}} を使って3つのハードドライブ ({{ic|/dev/sda}}, {{ic|/dev/sdb}}, {{ic|/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番目のハードドライブを {{ic|gdisk}} で開いて下さい:
  +
# gdisk /dev/sda
  +
  +
そしてプロンプトに以下のコマンドを入力:
  +
# 新しいパーティションを追加: {{ic|n}}
  +
# デフォルトのパーティション番号を選択: {{ic|Enter}}
  +
# 最初のセクタはデフォルトを使用: {{ic|Enter}}
  +
# {{ic|sda1}} と {{ic|sda2}} の容量を MB で指定 ({{ic|+100MB}} と {{ic|+2048M}})。{{ic|sda3}} は {{ic|Enter}} を押してディスクの残り全部を使用。
  +
# パーティションタイプは {{ic|Linux RAID}} を選択: {{ic|fd00}}
  +
# テーブルをディスクに書き込んで終了: {{ic|w}}
  +
  +
上記の手順を {{ic|/dev/sdb}} と {{ic|/dev/sdc}} で繰り返して下さい。あるいは下の {{ic|sgdisk}} を使う方法を使って下さい。新しいテーブルをカーネルに認識させるために再起動が必要です。
  +
  +
{{Note|各ディスクには全く同じパーティションを作成するようにしてください。異なるサイズのパーティショングループを組み合わせて RAID パーティションを作成することも可能ですが、冗長パーティションは一番小さいパーティションの倍数単位になり、無駄な領域が出てしまいます。}}
  +
  +
==== sgdisk でパーティションを複製 ====
  +
  +
GPT を使用する場合、{{ic|sgdisk}} を使って {{ic|/dev/sda}} のパーティションテーブルを他の2つのハードドライブに複製することができます:
  +
$ sgdisk --backup=table /dev/sda
  +
$ sgdisk --load-backup=table /dev/sdb
  +
$ sgdisk --load-backup=table /dev/sdc
  +
  +
{{Note|上記の方法を使ってドライブのパーティションテーブルを複製して、既存のシステムの置換ドライブとする場合 (例: RAID ドライブの交換)、{{ic|sgdisk -G /dev/<newDrive>}} でディスクとパーティションの UUID をランダムに作成して、UUID が一意になるようにしてください。}}
  +
  +
=== RAID のインストール ===
  +
  +
物理パーティションを作成したら、{{ic|mdadm}} で '''/boot''', '''/swap''', '''/''' アレイを設定することができます。{{ic|mdadm}} は RAID を管理するための高度なツールで、{{ic|mdadm}} を使うことでインストール環境の中に {{ic|/etc/mdadm.conf}} を作成します。
  +
  +
{{ic|/dev/md0}} に '''/''' アレイを作成:
  +
# mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sd[abc]3
  +
  +
{{ic|/dev/md1}} に '''/swap''' アレイを作成:
  +
# mdadm --create /dev/md1 --level=1 --raid-devices=3 /dev/sd[abc]2
  +
  +
{{Note|
  +
* データの消失を防ぐために RAID を使用する場合 (ディスクが故障したときに実行中のアプリケーションが落ちても気にしない場合)、スワップパーティションを RAID する必要はありません。複数のスワップパーティションを別々に使うことができます。
  +
* インストールするブートローダーが RAID メタデータのバージョン 1.x をサポートしていない場合、以下のコマンドに {{ic|<nowiki>--metadata=0.90</nowiki>}} オプションを追加してください。}}
  +
  +
{{ic|/dev/md2}} に '''/boot''' アレイを作成:
  +
# mdadm --create /dev/md2 --level=1 --raid-devices=3 --metadata=1.0 /dev/sd[abc]1
  +
  +
==== 同期 ====
  +
  +
{{Tip|新しいハードドライブで最初の再同期を避けたい場合、{{ic|--assume-clean}} フラグを追加してください。}}
  +
  +
RAID ボリュームを作成したら、アレイの中の物理パーティションの中身が同期されます。{{ic|/proc/mdstat}} の出力を以下のように定期的に更新することで進捗を監視できます:
  +
# watch -n .1 cat /proc/mdstat
  +
  +
{{Tip|{{ic|Alt+F3}} を打ってから上記のコマンドを実行すれば、同期作業の進捗を別の TTY ターミナルで確認できます。}}
  +
  +
アレイに関する詳細な情報は次のコマンドで確認できます:
  +
# mdadm --misc --detail /dev/md[012] | less
  +
同期が完了したら {{ic|State}} 行が {{ic|clean}} になります。出力の一番下のテーブルの各デバイスの {{ic|State}} カラムが {{ic|spare}} または {{ic|active sync}} になるはずです。{{ic|active sync}} はアレイの各デバイスが有効になっていることを意味します。
  +
  +
{{Note|RAID 同期はファイルシステムから見えないため、インストールを進めてコンピュータを再起動できます。}}
  +
  +
==== スクラブ ====
  +
定期的にデータ [https://en.wikipedia.org/wiki/Data_scrubbing スクラブ] を実行してエラーを確認・修復することを推奨します。
  +
{{Note|アレイのサイズや設定によっては、スクラブには数時間以上かかることもあります。}}
  +
  +
データスクラブを開始するには:
  +
# echo check > /sys/block/md0/md/sync_action
  +
  +
mdadm に関連する他のタスク/アイテムと同じように、スクラブの状態も確認できます:
  +
# cat /proc/mdstat
  +
  +
例:
  +
{{hc|$ cat /proc/mdstat|<nowiki>
  +
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
  +
</nowiki>}}
  +
  +
実行中のデータスクラブを停止するには:
  +
# echo idle > /sys/block/md0/md/sync_action
  +
  +
スクラブが完了したら、不良ブロックの数を確認することができます:
  +
# cat /sys/block/md0/md/mismatch_cnt
  +
  +
check 操作は不良セクタとドライブの不一致をスキャンします。不良セクタは自動的に修復されます。不一致がみつかった場合 (良好セクタに不良データが含まれていた場合) は記録だけが取られ (下を参照)、対処は何もされません。管理者がセクタのデータを精査して、冗長情報からセクタを再構築して正しいデータを保持することができます。
  +
  +
===== スクラブに関するノート =====
  +
{{Note|{{ic|/sys/block/md0/md/sync_action}} に ''repair'' を echo することもできますが、不一致のデータが存在した場合に自動的に更新されてしまうため危険です。パリティとデータブロックのどちらが正しいのかわからないためです。不良データが正しいデータで置き換えられるかどうかは運任せになってしまいます。}}
  +
  +
定期的にスクラブを root で実行する cron ジョブを設定すると良いでしょう。{{AUR|raid-check}} を見て下さい。
  +
  +
===== スクラブの RAID1 と RAID10 に関するノート =====
  +
RAID1 と RAID10 では書き込みはバッファされないので、アレイに問題がない場合でもアレイに不一致が検出されることがあります。不一致が検出されるのは一時的なデータ領域だけで、問題はありません。しかしながら、不一致がただの一時的なデータなのか、あるいは実際に問題が発生することを意味しているかの違いを明言することはできません。RAID1 と RAID10 アレイには偽陽性があります。それでも、デバイスに不良セクタが存在しないか確認するためにスクラブを行うことを推奨します。
  +
  +
=== LVM のインストール ===
  +
  +
このセクションでは2つの RAID を物理ボリューム (PV) に変換します。そして PV をボリュームグループ (VG) にまとめます。VG は論理ボリューム (LV) に分割することで実際のパーティションのように扱えるようになります (例: {{ic|/}}, {{ic|/var}}, {{ic|/home}})。LVM のことをよく知らない場合は [[LVM]] の記事を読んで下さい。
  +
  +
==== 物理ボリュームの作成 ====
  +
  +
以下のコマンドを使って RAID を物理ボリューム (PV) に変換することで LVM から RAID にアクセスできるようにします。作成した RAID アレイの数だけコマンドを繰り返し実行してください:
  +
# pvcreate /dev/md0
  +
  +
{{Note|既存のボリュームグループに PV を作成する場合は失敗することがあります。そのような場合は {{ic|-ff}} オプションを追加すると良いでしょう。}}
  +
  +
LVM で PV が追加されたことを確認するには:
  +
# pvdisplay
  +
  +
==== ボリュームグループの作成 ====
  +
  +
次に PV にボリュームグループ (VG) を作成します。
  +
  +
1番目の PV でボリュームグループ (VG) を作成:
  +
# vgcreate VolGroupArray /dev/md0
  +
  +
LVM に VG が追加されたことを確認するには:
  +
# vgdisplay
  +
  +
==== 論理ボリュームの作成 ====
  +
  +
通常のハードドライブの準備と同じように、VG に論理ボリューム (LV) を作成する必要があります。この例では {{ic|/}}, {{ic|/var}}, {{ic|/swap}}, {{ic|/home}} の LV を作成します。LV は {{ic|/dev/mapper/VolGroupArray-<lvname>}} や {{ic|/dev/VolGroupArray/<lvname>}} でアクセスできるようになります。
  +
  +
'''/''' の LV を作成:
  +
# lvcreate -L 20G VolGroupArray -n lvroot
  +
  +
'''/var''' の LV を作成:
  +
# lvcreate -L 15G VolGroupArray -n lvvar
  +
  +
{{Note|LVM にスワップ領域を追加したい場合、{{ic|-C y}} オプションを使って {{ic|/swap}} LV を作成してください。連続的なパーティションにすることで、複数のディスクや物理エクステントにスワップ領域がまたがってしまうことを避けることができます: {{ic|# lvcreate -C y -L 2G VolGroupArray -n lvswap}}。}}
  +
  +
VG の残り容量を全て使用する '''/home''' の LV を作成:
  +
# lvcreate -l +100%FREE VolGroupArray -n lvhome
  +
  +
LVM で LV が作成されたことを確認するには:
  +
# lvdisplay
  +
  +
{{Tip|比較的小規模な論理ボリュームから始めて後から必要に応じて拡張できます。拡張用にボリュームグループに空き領域を残しておくと良いでしょう。}}
  +
  +
=== RAID 設定の更新 ===
  +
  +
インストーラーは {{ic|/etc/mdadm.conf}} を使って対象のシステムに initrd を作成するので、RAID を設定するようにファイルを更新する必要があります。元のファイルは削除してかまいません。mdadm が自動的に設定します。mdadm を使って現在の構成で新しい設定ファイルを作成してください:
  +
# mdadm --examine --scan > /etc/mdadm.conf
  +
  +
{{Note|インストーラーの中から {{ic|mdadm.conf}} ファイルが正しく書き込まれたか確認するために[[RAID#設定ファイルの更新|設定ファイルの更新]]セクションのノートを読んで下さい。}}
  +
  +
=== ハードドライブの準備 ===
  +
  +
ファイルシステムやマウントポイントを設定して下さい。設定するのは PV (例: {{ic|/dev/mapper/VolGroupArray-lvhome}}) だけであり実際のディスク (例: {{ic|/dev/sda1}}) は弄らないようにします。
  +
  +
{{Warning|{{ic|mkfs.xfs}} はチャンクサイズやストライプサイズをアライメントしてパフォーマンスを最適化しません (参照: [http://www.linuxpromagazine.com/Issues/2009/108/RAID-Performance Optimum RAID])。}}
  +
  +
=== システムの設定 ===
  +
  +
{{Warning|インストールに進む前に [[LVM]] の手順に従って下さい。}}
  +
  +
==== mkinitcpio.conf ====
  +
  +
[[mkinitcpio]] でフックを使うことで起動時にアレイを構築することができます。詳しくは [[mkinitcpio#RAID を使う]]を見て下さい。
  +
# {{ic|/etc/mkinitcpio.conf}} の {{ic|MODULES}} リストに {{ic|dm_mod}} モジュールを追加してください。
  +
# {{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} リストに {{ic|udev}} モジュールの後ろに {{ic|mdadm_udev}} と {{ic|lvm2}} フックを追加してください。
  +
  +
=== 再起動 ===
  +
  +
設定が完了したらマシンを再起動してください:
  +
# reboot
  +
  +
=== 別のブートドライブにブートローダーをインストール ===
  +
  +
新しいシステムが起動できるようになったら、ブートローダーを他の2つのディスクにインストールすると良いでしょう。そうすることで、ディスクが故障しても、(BIOS でブートの順番を切り替えるなどして) 他のドライブからシステムを起動できます。使用するブートローダーのシステムによって手順は異なります:
  +
  +
==== Syslinux ====
  +
  +
root で新しいシステムにログインして次を実行:
  +
# /usr/sbin/syslinux-install_update -iam
  +
{{Note|[[GPT]] を使用する場合、ブートフラグを設定するバックエンドとして {{pkg|gptfdisk}} パッケージが必要になります。}}
  +
  +
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
  +
  +
=== ファイルシステムのパーティションスキームをバックアップ ===
  +
  +
ブートローダーを追加したら、それぞれのドライブのパーティションの状態を保存しておくと良いでしょう。どれかのドライブが故障したときにディスクを交換・再構築するのが楽になります。<code>sfdisk</code> ツールを使って以下を実行することで保存できます:
  +
# 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]] の記事を参照してください。
  +
  +
== 参照 ==
  +
* [http://yannickloth.be/blog/2010/08/01/installing-archlinux-with-software-raid1-encrypted-filesystem-and-lvm2/ Setup Arch Linux on top of raid, LVM2 and encrypted partitions] by Yannick Loth
  +
* [https://stackoverflow.com/questions/237434/raid-verses-lvm RAID vs. LVM] on [[Wikipedia:Stack Overflow|Stack Overflow]]
  +
* [http://serverfault.com/questions/217666/what-is-better-lvm-on-raid-or-raid-on-lvm What is better LVM on RAID or RAID on LVM?] on [[Wikipedia:Server Fault|Server Fault]]
  +
* [http://www.gagme.com/greg/linux/raid-lvm.php Managing RAID and LVM with Linux (v0.5)] by Gregory Gulik
  +
* [https://www.gentoo.org/doc/en/gentoo-x86+raid+lvm2-quickinstall.xml Gentoo Linux x86 with Software Raid and LVM2 Quick Install Guide]
  +
* 2011-09-08 - Arch Linux - [https://bbs.archlinux.org/viewtopic.php?id=126172 LVM & RAID (1.2 metadata) + SYSLINUX]
  +
* 2011-04-20 - Arch Linux - [https://bbs.archlinux.org/viewtopic.php?pid=965357 Software RAID and LVM questions]
  +
* 2011-03-12 - Arch Linux - [https://bbs.archlinux.org/viewtopic.php?id=114965 Some newbie questions about installation, LVM, grub, RAID]

2024年8月26日 (月) 16:42時点における最新版

関連記事

この記事ではソフトウェア 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

同期

ヒント: 新しいハードドライブで最初の再同期を避けたい場合、--assume-clean フラグを追加してください。

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

# watch -n .1 cat /proc/mdstat
ヒント: Alt+F3 を打ってから上記のコマンドを実行すれば、同期作業の進捗を別の TTY ターミナルで確認できます。

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

# 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
ノート: LVM にスワップ領域を追加したい場合、-C y オプションを使って /swap LV を作成してください。連続的なパーティションにすることで、複数のディスクや物理エクステントにスワップ領域がまたがってしまうことを避けることができます: # lvcreate -C y -L 2G VolGroupArray -n lvswap

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
ノート: インストーラーの中から 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
ノート: GPT を使用する場合、ブートフラグを設定するバックエンドとして gptfdisk パッケージが必要になります。

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 の記事を参照してください。

参照