CentOS8でRAID1(ミラーリング)を組む

RAIDは複数のストレージをまとめて1つのストレージとして使うものです。

どのように1つのストレージと扱うかによってRAID0、RAID1、RAID5、RAID1+0など様々なRAIDが存在しますが、今回はこの中で(私的に)最も単純なRAID1を使ってみたいと思います。

この記事で行うこと

  1. 各RAIDについて
  2. RAID1の用途
  3. RAIDの作成手順
    1. パーティションを作成する
    2. RAIDを作成する
    3. RAIDをフォーマットする

1. 各RAIDについて

前述の通り、RAIDには色々な種類があります。以下に主な物を挙げていきます。

  • RAID0(ストライピング)

データを細切れにして複数のストレージに分けて記録します。

同時に複数のストレージに記録や読み出しが出来るため速度は向上しますが、細切れに分けて記録しているため片方のストレージに問題が起ると全てのストレージがダメになります。

ハイリスクハイリターンです。

  • RAID1(ミラーリング)

全く同じデータを複数のストレージに同じように記録します。

読み込みは複数のストレージから行えるので速度が向上しますが、書き込みの速度は最も遅いストレージに引っ張られることになります。

何より全く同じ情報を複数のストレージに記録しているため、使える容量が減ります。(RAID内の最も容量の小さいストレージの容量となります)

リスクは1番低いですが、高コストです。

  • RAID5・RAID6(パリティ)

複数のストレージに細切れにデータを記録しますが、ストレージが壊れても残ったストレージの情報から壊れたストレージの情報を復元出来るように冗長性を持たせます。

細切れなのでデータの読み書きの速度は若干速いです。

またRAID5の場合は1つのストレージ、RAID6の場合は2つのストレージまで壊れても復元が出来ます。

代わりに、容量はRAID5の場合は構成しているストレージから1つ分を減らした容量、RAID6の場合は2つ分を減らした容量となります。(ストレージ6つで構成している場合は、RAID5はストレージ5つ分の、RAID6はストレージ6つ分の容量となります)

なお、RAID5は3台以上、RAID6は4台以上のストレージが必要となります。

ここまでみると、リスクもリターンもほどほどといった所でしょうか。

ただ、RAID5・6は壊れて復元不能になったという話もよく聞きます。1つ目が壊れたことに気づかなかった不注意だったり、復元中に他のストレージも壊れたり、RAIDを管理するシステム(コントローラ)の方が壊れたり……などなど。

多くの場合は不注意やRAID5・6への不理解が原因のようですが、どうとは言えません。(私は使ったことないですし)

  • RAID1+0

これはRAID1で纏めたストレージを複数集めてRAID0として使うものです。

構成上最低4つのストレージが必要となります。

RAID0の速度とRAID1の堅牢性を組み合わせた形態……ですが、今時HDDでRAID0組んだところでSSDには敵わないですし、大人しくSSDでRAID1組めば?と思わないこともないです。(あくまで主観ですが)

それぞれのRAID1の纏まりの中で1つでもストレージが生存している限りは動きますが、RAID1の纏まりの単位で全滅するとアウトです。

2. RAID1の用途

前述の通り、RAID1は複数のストレージに全く同じデータを書き込むものになります。

主たる用途としては可用性向上です。ストレージが壊れても壊れていないストレージがある限り問題なく動き続けます。

RAID5のようにデータをどこに保管しているかの管理が不要で構成情報が最低限で済むため、無事なストレージが1つでもあれば他のPCから復元するといった事も成功しやすいです。

ただし、バックアップとは違い「間違ってディスク内のデータを削除した」などのミスやランサムウェアといったデータ自体を書き換えるものには無力です。

他の手段でそういった誤ったデータの扱いに対する対策をしていて、あくまで「ハードウェアが壊れる」事に対する対策を行いたいという事であればバックアップと同等の対策となり得るでしょう。

ちなみに、上述したランサムやミスに対する対策は時間差でバックアップを取っていく他ないです。ミスに気づいてからミスを起こす前の状態に戻せるようにすることが必要となります。

3. RAIDの作成手順

RAID1を作成する手順を説明します。

なお、RAID1を作成するには新たに同容量のストレージを2つ用意する必要があります。(ストレージの容量が違っても構いませんが、その場合はRAIDの容量は小さい方のストレージの容量となります。)

なお、現在使っているストレージとは別に2つ必要です。先に新しいストレージ1つでRAIDを作ってRAIDにデータを移してから、元々データがあったストレージをフォーマットしてRAIDに加えるという方法でストレージを1つだけ足してRAIDにするという方法もありますが、複雑でリスクもあるのでここでは詳しくは紹介しません。

3-1. パーティションを作成する

まずRAIDにするパーティションを作成します。

パーティション作成の手順は以下の記事で確認出来ます。

この記事の1番目の手順を実行します

もし、異なるサイズのストレージでRAIDを作る際にはサイズを小さい方のストレージに合わせるようにしましょう。

なおRAIDで使うディスクのタイプは「Linux raid 自動」にすることが多いですが、上の記事内でも述べているように、基本的には気にする必要はありません。

気になる場合は変えておくようにしてください。

3-2. RAIDを作成する

RAIDは mdadm というコマンドで管理します。

[root@localhost ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
  • mdadm : RAIDを管理するためのコマンドです。新規でRAIDを作る以外にも復元したり構成を変更したりできます。
  • --create : RAIDを新規作成するためのオプションです。
  • /dev/md0 : 新規で作成するRAIDのデバイス名です。通常は md +数字とします。mdはMultiple Diskの略です。(たぶん)
  • --level=1 : --level はRAIDの種類を決めるオプションです。今回はRAID1を作成するので1を指定します。
  • --raid-devices=2 : --raid-devices はそのRAIDで使用するストレージの数を指定します。今回は2つで作成するため、2を指定しています。
  • /dev/sdb1 /dev/sdc1 : RAIDとして使用するストレージを指定します。先ほど作成したパーティションを指定してください。指定するストレージの数は先ほど --raid-devices で指定した数と一致します。

なおコマンドを実行する際に以下のメッセージが出てきますが、これはブート用ディスクとして利用する際には古いバージョンのメタデータを指定するか新しいメタデータを読み込めるブートローダーを使用してという注意です。

今回はブート用ディスクとしては使用する予定がないので、そのまま y を入力して進めます。

mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array?

RAIDの情報は /proc/mdstat というファイルにリアルタイムで記載されます。

そのため、このファイルを読むことで表示出来ます。

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
      15127040 blocks super 1.2 [2/2] [UU]
      [>....................]  resync =  4.2% (636992/15127040) finish=7.5min speed=31849K/sec

unused devices: <none>
  • cat : 複数ファイルを読み込んで連結して表示するコマンドです。ただ、単一ファイルを指定した場合はそのファイルだけが表示されるので、短いファイルの中身を手軽に読みたい場合にも使います。スクロール機能などは無いので長いファイルを読むには向いていません。

しばらく状況を監視していたい場合には都度コマンドを打ち込まなくても watch コマンドを使う事で同じコマンドを繰り返し実行してくれます。

[root@localhost ~]# watch --interval 5 cat /proc/mdstat
  • watch : 全画面で一定時間毎にコマンドを実行した結果を表示するコマンドです。
  • --interval 5 : --interval は何秒ごとにコマンドを実行するかを指定するオプションです。今回は5秒を指定しています。指定が無い場合は2秒ごとに実行されます。
  • cat /proc/mdstat : 実行するコマンドの内容です。指定した時間毎にこのコマンドが実行されて結果が表示されます。

なお、終了する際にはCtrl+cを押します。

3-3. RAIDをフォーマットする

RAIDの構築が終わったら以下のように resync とある行が消えます。

Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
      15127040 blocks super 1.2 [2/2] [UU]

また、 fdisk -l を実行すると以下のように構築したRAIDが表示されます。

ディスク /dev/md0: 14.4 GiB, 15490088960 バイト, 30254080 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト

あとは、通常のディスクと同様にフォーマットを行います。

この記事の「2. フォーマットの実行」の部分となります

最後に、マウントしてあげれば通常のディスク同様に使用できます。

まとめ

今回はRAID1の作成方法について説明しました。

これでハードウェアの故障によるデータの損失リスクを下げることが出来ます。

しかし、このままでは片方のストレージが壊れたときに新しいストレージに入れ替える方法が分かりません。

次回は、この方法について説明したいと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です