ディスク領域の耐障害性を高める方法として、複数のHDDやSSDを組み合わせることで対応するRAID(Redundant Array of Independent Disks)という技術があります。
これにより、耐障害性の向上(一部のディスクが故障してもデータが失われない)や、パフォーマンスの向上(複数のディスクに分散して読み書きを行う)といったメリットが得られます。
mdadmは、Linuxカーネルに組み込まれたソフトウェアRAID機能を制御するためのコマンドラインツールです。mdadmを使用することで、RAIDアレイの作成、管理、監視、そして障害からの復旧といった一連の操作を行うことができます。
この記事では、mdadmを用いてUbuntu(Linux)上でソフトウェアRAIDを構築し、管理する方法をまとめます。
- HDDやSSDの故障によるデータ損失を防ぎたい。
- 複数のHDDやSSDを一つの領域として使いたい。
mdadmでRAIDを構築する方法
前提条件
- Ubuntuがインストールされており、ターミナルが利用できること。
- RAIDを構成するための複数のディスク(ここでは2台とします)がシステムに接続されていること。
- スーパーユーザー権限(sudo)を持っていること。
手順
1. ディスクの確認
まず、RAIDを構成するディスクのデバイス名を確認します。
lsblk
通常、/dev/sda、/dev/sdb、/dev/nvme0n1 のような名前で表示されます。RAIDに使用するディスクのデバイス名をメモしておきます。(ここでは例として /dev/sdb と /dev/sdc を使用します。)
誤ったディスクを指定するとデータが消去される可能性があります。慎重に確認してください。
2. パーティションの作成(推奨)
ディスク全体をRAIDデバイスとして使用することも可能ですが、パーティションを作成して使用することを推奨します。(パーテーションテーブルに管理情報が残るため。)
fdisk、gdisk、gparted などのツールを使用して、RAIDに使用する各ディスクに同一のサイズのLinux RAID (タイプ fd00) パーティションを作成します。
ここでは gdisk を用いたパーティション作成の例を示します。(GPTの場合はgdisk, MBRの場合はfdisk)
sudo gdisk /dev/sda
nを入力して新しいパーティションを作成します。- プライマリパーティション (
p) を選択します。 - パーティション番号、開始セクタ、終了セクタを指定します(通常はデフォルトで問題ありません)。
tを入力してパーティションのタイプを変更します。- タイプコード
fd00を入力して “Linux RAID” を選択します(fdiskの場合はfd)。 pで設定を確認することができます。wを入力して変更を書き込みます。
3. mdadmパッケージのインストール
mdadm コマンドがインストールされていない場合は、以下のコマンドでインストールします。
sudo apt update
sudo apt install -y mdadm
4. RAIDアレイの作成
mdadm --create コマンドを使用してRAIDアレイを作成します。RAIDレベル、使用するパーティションなどを指定します。
RAID 1 の場合は --level=1、使用するデバイスを --raid-devices=2 で指定し、続けてデバイス名を指定します。
sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
- –create /dev/md0: /dev/md0 という名前のRAIDデバイスを作成します。
- –verbose: 詳細な出力を表示します。
- –level=1: RAIDレベルを1(ミラーリング)に設定します。
- –raid-devices=2: 使用するデバイスの数を2つと指定します。
- /dev/sda1 /dev/sdb1: RAIDを構成するパーティションを指定します。
作成状況は以下のコマンドで確認できます。
cat /proc/mdstat
上記のコマンドを実行すると以下のように表示されます。resyncが100%になるまで待ちます。
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
1953381376 blocks super 1.2 [2/2] [UU]
[>....................] resync = 3.4% (67102976/1953381376) finish=152.3min speed=206312K/sec
bitmap: 15/15 pages [60KB], 65536KB chunk
RAIDアレイの作成には時間がかかります。
5. ファイルシステムの作成
RAIDアレイの作成が完了したら、作成した /dev/md0 デバイスにファイルシステムを作成します。ここではext4ファイルシステムを作成する例を示します。
sudo mkfs.ext4 /dev/md0
6. RAIDデバイスのマウント
RAIDデバイスをマウントするためのディレクトリを作成します。
sudo mkdir /mnt/raid
作成したマウントポイントにRAIDデバイスをマウントします。
sudo mount /dev/md0 /mnt/raid
7. 自動マウントの設定
システム起動時にRAIDデバイスが自動的にマウントされるように設定します。/etc/fstab ファイルを編集します。
まず、RAIDデバイスのUUIDを確認します。
sudo blkid /dev/md0
UUIDをコピーし、/etc/fstab ファイルをテキストエディタで開き、以下の行を追加します。
UUID=<RAIDデバイスのUUID> /mnt/raid ext4 defaults 0 2
作成したRAID構成を保存し、起動時に自動的に認識されるように設定します。
sudo mdadm --detail --scan | sudo tee /etc/mdadm/mdadm.conf
sudo update-initramfs -u
mdadmでRAIDを管理する方法
ここでは、構築したmdadm RAIDアレイを管理するための基本的な操作について解説します。
RAIDアレイの状態確認
RAIDアレイの現在の状態を確認するには、以下のコマンドを使用します。
cat /proc/mdstat
sudo mdadm --detail /dev/md0
これにより、RAIDレベル、状態(アクティブ、リビルド中、故障など)、参加しているディスク、エラー情報などを確認できます。
故障したディスクの確認
RAIDアレイの状態を確認する際に、故障したディスクは[UUU_]のようにアンダースコア (_) が表示されます。
sudo mdadm --detail /dev/md0
上記コマンドでは、故障したディスクが Failed Devices の項目に表示されます。
故障したディスクの取り換え
1. 故障したディスクをシステムから物理的に取り外す前に、RAIDアレイからそのディスクを「故障」としてマークします。
sudo mdadm --manage /dev/md0 --fail /dev/sdb1
/dev/sdb1 は故障したパーティションのデバイス名に置き換えてください。
2. 故障したディスクの物理的な交換をします。システムをシャットダウンし、故障した物理ディスクを新しいディスクと交換します。
3. 交換した新しいディスクに、故障したディスクと同じようにパーティションを作成し、パーティションタイプを “Linux raid autodetect” (タイプコード fd00) に設定します。
4. 新しいパーティションをRAIDアレイに追加し、リビルドを開始します。
sudo mdadm --manage /dev/md0 --add /dev/sdb1
/dev/sdb1 は新しく作成したパーティションのデバイス名に置き換えてください。
リビルドの進行状況は、cat /proc/mdstat コマンドで確認できます。
スペアディスクの追加
障害発生時に自動的にリビルドを開始するためのスペアディスクを追加できます。
Bashsudo mdadm --manage /dev/md0 --add /dev/sdd1
/dev/sdd1 はスペアとして使用するパーティションのデバイス名に置き換えてください。
RAIDアレイの削除
RAIDアレイを完全に削除する場合は、以下の手順を実行します。
1. RAIDデバイスをアンマウントします。
sudo umount /mnt/raid
2. /etc/fstab からRAIDデバイスのエントリを削除またはコメントアウトします。
3. RAIDアレイを停止させます。
sudo mdadm --stop /dev/md0
4. RAIDアレイのメタデータをディスクからクリアします。
sudo mdadm --zero-superblock /dev/sdb1 /dev/sdc1
この操作はデータを完全に消去します。慎重に行ってください。
5. /etc/mdadm/mdadm.conf からRAIDアレイの設定を削除します。
6. initramfsを更新します。
sudo update-initramfs -u
RAIDの種類と目的
RAID (Redundant Array of Independent Disks) には、データの冗長性、パフォーマンスの向上、またはその両方を目的とした複数の構成レベルが存在します。ここでは、代表的なRAIDレベルとその目的について解説します。
RAID 0
複数のディスクにデータを分散して書き込むことで、読み書きの高速化を実現します。
冗長性はないため、1台でもディスクが故障すると全てのデータが失われます。
目的: パフォーマンスの向上、大容量ストレージの実現。
こんな人におすすめ: 高速な処理を求めるが、データの耐障害性は重視しないユーザー。
RAID 1
2台のディスクに全く同じデータを書き込むことで、高い耐障害性を実現します。
読み取り速度は向上する可能性がありますが、書き込み速度は単一ディスクと同程度です。
利用できる容量は半分になります。
目的: 高いデータの耐障害性。
こんな人におすすめ: データの損失を避けたいユーザー。
RAID 5
3台以上のディスクを使用し、データとパリティ(誤り訂正符号)を分散して記録します。
1台のディスクが故障しても、パリティ情報からデータを復旧できます。
読み取り速度の向上と、ある程度の書き込み速度の向上が期待できます。
利用できる容量は、総ディスク容量から1台分のディスク容量を引いたものになります。
目的: データの耐障害性と容量パフォーマンスのバランス。
こんな人におすすめ: ある程度のパフォーマンスと耐障害性を両立したいユーザー、一般的なサーバー用途。
RAID 6
4台以上のディスクを使用し、2種類のパリティ情報を分散して記録します。
2台のディスクが同時に故障しても、データを復旧できます。
RAID 5よりも高い耐障害性を持ちますが、書き込み速度はRAID 5よりも遅くなる傾向があります。
利用できる容量は、総ディスク容量から2台分のディスク容量を引いたものになります。
目的: より高いデータの耐障害性。
こんな人におすすめ: 極めて重要なデータを保存し、高い耐障害性を求めるサーバー。
RAID 10 (1+0)
RAID 1で構成された複数のペアを、RAID 0で統合した構成です。
高い耐障害性と高速なパフォーマンスを両立できます。
最低4台のディスクが必要です。
利用できる容量は、総ディスク容量の半分になります。
目的: 高いパフォーマンスと高い耐障害性の両立。
こんな人におすすめ: 高速な処理とデータの保護を両方重視するサーバー、データベースサーバー。
RAIDとバックアップの違い
RAIDとバックアップは、どちらもデータ保護を目的とした技術ですが、その役割と仕組みは大きく異なります。
RAIDはデータの可用性を高め、システムを継続的に運用するための技術であり、バックアップはデータそのものを保護し、あらゆるデータ損失のリスクから復旧するための対策です。両者は補完的な関係にあり、どちらか一方だけでなく、両方を適切に導入することが、安全なデータ管理には不可欠です。
RAID
主な目的: データの可用性の向上、システムダウンタイムの削減。ディスク障害が発生しても、システムを停止させることなく運用を継続できる可能性を高めます。また、RAIDレベルによってはパフォーマンスの向上も期待できます。
仕組み: 複数の物理ディスクを論理的な一つのドライブとして扱い、冗長性を持たせることで耐障害性を実現します。
注意点: RAIDはハードウェア障害に対する耐性はありますが、論理的なエラー(誤操作によるファイル削除、ファイルシステムの破損、ウイルス感染など)からはデータを保護できません。
バックアップ
主な目的: データ損失からの復旧。システム障害、ハードウェア故障、人的ミス、災害など、あらゆる事態に備えてデータを安全な場所に保管します。
仕組み: データを別のストレージデバイス(外付けHDD、NAS、クラウドストレージなど)にコピーし、保管します。
重要性: RAIDを構築していても、バックアップは不可欠です。RAIDだけでは防げないデータ損失のリスクに対応するために、定期的なバックアップを実施することが重要です。
ソフトウェアRAIDとハードウェアRAIDの違い
RAIDには、処理をソフトウェアで行う「ソフトウェアRAID」と、専用のハードウェアコントローラーで行う「ハードウェアRAID」があります。
ハードウェアRAIDはCPUなどの負荷が掛からないというメリットがある一方、導入が高価であるというデメリットがあります。
ソフトウェアRAIDは手軽に導入することができるというメリットがあります。

コメント