Ubuntu 16.04でmdadmを使用してRAIDアレイを管理する方法

前書き

RAIDアレイは、特定の構成で個々のディスクを仮想ストレージデバイスに結合することにより、パフォーマンスと冗長性を向上させます。 Linuxでは、mdadmユーティリティを使用すると、ソフトウェアRAIDアレイを簡単に作成および管理できます。

以前のガイドでは、how to create RAID arrays with mdadm on Ubuntu 16.04について説明しました。 このガイドでは、Ubuntu 16.04サーバーでRAIDアレイを管理する方法を示します。 ほとんどの場合、RAIDアレイの管理は非常に簡単です。

前提条件

このガイドを完了するには、root以外のsudoユーザーにアクセスする必要があります。 Ubuntu 16.04 initial server setup guideに従って、適切なユーザーを設定できます。

前述のように、このガイドではRAIDアレイ管理について説明します。 このガイドを開始する前に、how to create RAID arrays with mdadm on Ubuntu 16.04に関するガイドに従って、1つ以上のアレイを作成してください。 このガイドでは、操作対象のアレイが1つ以上あることを前提としています。

RAIDデバイスに関する情報のクエリ

適切な管理のための最も重要な要件の1つは、構造、コンポーネントデバイス、およびアレイの現在の状態に関する情報を見つける機能です。

RAIDデバイスに関する詳細情報を取得するには、-Dまたは--detailオプションを指定したRAIDデバイスをmdadmに渡します。

sudo mdadm -D /dev/md0

配列に関する重要な情報が表示されます。

Output/dev/md0:
        Version : 1.2
  Creation Time : Mon Aug  8 21:19:06 2016
     Raid Level : raid10
     Array Size : 209584128 (199.88 GiB 214.61 GB)
  Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Mon Aug  8 21:36:36 2016
          State : active
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : mdadmwrite:0  (local to host mdadmwrite)
           UUID : 0dc2e687:1dfe70ac:d440b2ac:5828d61d
         Events : 18

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync set-A   /dev/sda
       1       8       16        1      active sync set-B   /dev/sdb
       2       8       32        2      active sync set-A   /dev/sdc
       3       8       48        3      active sync set-B   /dev/sdd

このビューから、RAIDレベル、アレイサイズ、個々のピースのヘルス、アレイのUUID、コンポーネントデバイスとそれらの役割を確認できます。 このビューで提供される情報はすべて、かなり適切にラベル付けされています。

/dev/mdadm/mdadm.confファイルに追加するのに適した、配列の短縮された詳細を取得するには、詳細ビューで--briefまたは-bフラグを渡すことができます。

sudo mdadm -Db /dev/md0
OutputARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=0dc2e687:1dfe70ac:d440b2ac:5828d61d

RAIDデバイスの人間が読める形式の概要をすばやく取得するには、-Qオプションを使用してクエリを実行します。

sudo mdadm -Q /dev/md0
Output/dev/md0: 199.88GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.

これは、RAIDデバイスに関する重要な情報を一目で見つけるために使用できます。

コンポーネントデバイスに関する情報の取得

mdadmを使用して、個々のコンポーネントデバイスにクエリを実行することもできます。

-Qオプションをコンポーネントデバイスで使用すると、その一部であるアレイとその役割がわかります。

sudo mdadm -Q /dev/sdc
Output/dev/sdc: is not an md array
/dev/sdc: device 2 in 4 device active raid10 /dev/md0.  Use mdadm --examine for more detail.

-Eまたは--examineオプションを使用すると、より詳細な情報を取得できます。

sudo mdadm -E /dev/sdc
Output/dev/sdc:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 0dc2e687:1dfe70ac:d440b2ac:5828d61d
           Name : mdadmwrite:0  (local to host mdadmwrite)
  Creation Time : Mon Aug  8 21:19:06 2016
     Raid Level : raid10
   Raid Devices : 4

 Avail Dev Size : 209584128 (99.94 GiB 107.31 GB)
     Array Size : 209584128 (199.88 GiB 214.61 GB)
    Data Offset : 131072 sectors
   Super Offset : 8 sectors
   Unused Space : before=130984 sectors, after=0 sectors
          State : active
    Device UUID : b0676ef0:73046e93:9d9c7bde:c80352bb

    Update Time : Mon Aug  8 21:36:36 2016
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : 8be1be96 - correct
         Events : 18

         Layout : near=2
     Chunk Size : 512K

   Device Role : Active device 2
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)

この情報は、アレイデバイスで-Dオプションを使用したときに表示される情報と似ていますが、コンポーネントデバイスとアレイの関係に焦点を当てています。

/ proc / mdstat情報の読み取り

サーバー上でアセンブルされた各アレイの詳細情報を取得するには、/proc/mdstatファイルを確認してください。 多くの場合、これはシステム上のアクティブアレイの現在のステータスを見つける最良の方法です。

cat /proc/mdstat
OutputPersonalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
      209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]

unused devices: 

ここでの出力は非常に高密度で、少量のスペースで多くの情報を提供します。

/proc/mdstat

Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
. . .

Personalities行は、カーネルが現在サポートしているさまざまなRAIDレベルと構成を示しています。

md0で始まる行は、RAIDデバイスの説明の始まりを示しています。 続くインデントされた行もこのデバイスを説明しています。

/proc/mdstat

. . .
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
. . .

最初の行は、アレイがアクティブ(障害ではない)であり、RAID 10として構成されていることを示しています。 その後、アレイの構築に使用されたコンポーネントデバイスが一覧表示されます。 括弧内の数字は、アレイ内のデバイスの現在の「役割」を示しています(これは、デバイスのデータのコピーに影響します)。

/proc/mdstat

. . .
      209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
. . .

この例で表示される2行目には、仮想デバイスが提供するブロック数、メタデータバージョン(この例では1.2)、およびアレイのチャンクサイズが示されます。 これはRAID 10アレイであるため、アレイのレイアウトに関する情報も含まれています(この例は、各データチャンクの2つのコピーを「近くの」レイアウトに格納するように構成されています)。

角括弧内の最後の項目は両方とも、正常なセットのうち現在利用可能なデバイスを表します。 数値括弧内の最初の数字は正常なアレイのサイズを示し、2番目の数字は現在利用可能なデバイスの数を表します。 他の括弧は、アレイの健全性を視覚的に示すもので、「U」は正常なデバイスを表し、「_」は故障したデバイスを表します。

アレイが現在アセンブルまたはリカバリしている場合、進行状況を示す別の行が表示される場合があります。 これは次のようになります。

/proc/mdstat

. . .
      [>....................]  resync =  0.9% (2032768/209584128) finish=15.3min speed=225863K/sec
. . .

これは、現在適用されている操作と現在の進行状況をさまざまな方法で説明します。 また、現在の速度と完了までの推定時間も提供します。

システムで現在実行されているアレイを把握したら、いくつかのアクションを実行できます。

配列の停止

アレイを停止するための最初のステップは、アレイをアンマウントすることです。

マウントされたディレクトリの外に出て、次のように入力してアンマウントします。

cd ~
sudo umount /mnt/md0

次のように入力して、すべてのアクティブな配列を停止できます。

sudo mdadm --stop --scan

特定の配列を停止する場合は、それをmdadm --stopコマンドに渡します。

sudo mdadm --stop /dev/md0

これにより、アレイが停止します。 再度アクセスするには、アレイを再構築する必要があります。

配列の開始

構成ファイルまたは/proc/mdstatで定義されているすべてのアレイを開始するには、次のように入力します。

sudo mdadm --assemble --scan

特定の配列を開始するには、それを引数としてmdadm --assembleに渡すことができます。

sudo mdadm --assemble /dev/md0

これは、配列が構成ファイルで定義されている場合に機能します。

配列の正しい定義が構成ファイルにない場合でも、コンポーネントデバイスを渡すことで配列を開始できます。

sudo mdadm --assemble /dev/md0 /dev/sda /dev/sdb /dev/sdc /dev/sdd

アレイを組み立てたら、通常どおりにマウントできます。

sudo mount /dev/md0 /mnt/md0

これで、マウントポイントでアレイにアクセスできるようになります。

アレイへのスペアデバイスの追加

予備デバイスは、冗長性を提供するアレイ(RAID 1、5、6、または10など)に追加できます。 アクティブなデバイスに障害が発生しない限り、スペアはアレイによってアクティブに使用されません。 これが発生すると、アレイはデータをスペアドライブに再同期して、アレイを完全な状態に修復します。 アレイはドライブの障害に耐えられないため、スペアcannotが非冗長アレイ(RAID 0)に追加されます。

スペアを追加するには、アレイと新しいデバイスをmdadm --addコマンドに渡すだけです。

sudo mdadm /dev/md0 --add /dev/sde

アレイが劣化状態にない場合、新しいデバイスはスペアとして追加されます。 デバイスが現在劣化している場合、再同期操作はすぐにスペアを使用して障害のあるドライブを交換し始めます。

スペアを追加したら、構成ファイルを更新して、新しいデバイスの向きを反映させます。

sudo nano /etc/mdadm/mdadm.conf

配列定義に対応する現在の行を削除またはコメントアウトします。

/etc/mdadm/mdadm.conf

. . .
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=d81c843b:4d96d9fc:5f3f499c:6ee99294

その後、現在の構成を追加します。

sudo mdadm --detail --brief /dev/md0 | sudo tee -a /etc/mdadm/mdadm.conf

新しい情報は、mdadmユーティリティが配列をアセンブルするために使用されます。

アレイ内のアクティブデバイスの数を増やす

アセンブリ内のアクティブデバイスの数を増やすことにより、アレイを拡大することができます。 正確な手順は、使用しているRAIDレベルによって若干異なります。

RAID 1または10

最後のセクションで示したように、新しいデバイスをスペアとして追加することから始めます。

sudo mdadm /dev/md0 --add /dev/sde

アレイ内のRAIDデバイスの現在の数を確認します。

sudo mdadm --detail /dev/md0
Output/dev/md0:
        Version : 1.2
  Creation Time : Wed Aug 10 15:29:26 2016
     Raid Level : raid1
     Array Size : 104792064 (99.94 GiB 107.31 GB)
  Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
   Raid Devices : 2
  Total Devices : 3
    Persistence : Superblock is persistent

    . . .

この例では、2つのデバイスをアクティブに使用するようにアレイが構成されており、アレイで使用できるデバイスの総数は3つです(スペアを追加したため)。

次に、アレイを再構成して、追加のアクティブデバイスを追加します。 スペアは、追加のドライブ要件を満たすために使用されます。

sudo mdadm --grow --raid-devices=3 /dev/md0

アレイは、追加のアクティブディスクで再構成を開始します。 データの同期の進行状況を表示するには、次を入力します。

cat /proc/mdstat

プロセスが完了すると、デバイスを引き続き使用できます。

RAID 5または6

最後のセクションで示したように、新しいデバイスをスペアとして追加することから始めます。

sudo mdadm /dev/md0 --add /dev/sde

アレイ内のRAIDデバイスの現在の数を確認します。

sudo mdadm --detail /dev/md0
Output/dev/md0:
        Version : 1.2
  Creation Time : Wed Aug 10 18:38:51 2016
     Raid Level : raid5
     Array Size : 209584128 (199.88 GiB 214.61 GB)
  Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
   Raid Devices : 3
  Total Devices : 4
    Persistence : Superblock is persistent

    . . .

この例では、3つのデバイスをアクティブに使用するようにアレイが構成されており、アレイで使用可能なデバイスの総数は4つです(スペアを追加したため)。

次に、アレイを再構成して、追加のアクティブデバイスを追加します。 スペアは、追加のドライブ要件を満たすために使用されます。 RAID5またはRAID6アレイを拡張するときは、--backup-fileと呼ばれる追加オプションを含めることが重要です。 これは、重要な情報を含むバックアップファイルが格納される配列の場所offを指している必要があります。

Note

[.note]#バックアップファイルは、このプロセス中の非常に短いが重要な時間にのみ使用され、その後自動的に削除されます。 これが必要な時間は非常に短いため、ディスク上のファイルは表示されない可能性がありますが、何か問題が発生した場合は、アレイの再構築に使用できます。 詳細を知りたい場合は、This postにいくつかの追加情報があります。

sudo mdadm --grow --raid-devices=4 --backup-file=/root/md0_grow.bak /dev/md0

次の出力は、クリティカルセクションがバックアップされることを示しています。

Outputmdadm: Need to backup 3072K of critical section..

アレイは、追加のアクティブディスクで再構成を開始します。 データの同期の進行状況を表示するには、次を入力します。

cat /proc/mdstat

このプロセスが完了すると、デバイスを引き続き使用できます。

形状変更が完了したら、追加のスペースを利用するためにアレイ上のファイルシステムを拡張する必要があります。

sudo resize2fs /dev/md0

アレイには、容量に合ったファイルシステムが必要です。

RAID 0を使用

RAID 0アレイにはスペアドライブを使用できないため(破損したRAID 0アレイをスペアで再構築する機会はありません)、アレイを拡張すると同時に新しいデバイスを追加する必要があります。

最初に、アレイ内のRAIDデバイスの現在の数を調べます。

sudo mdadm --detail /dev/md0
Output/dev/md0:
        Version : 1.2
  Creation Time : Wed Aug 10 19:17:14 2016
     Raid Level : raid0
     Array Size : 209584128 (199.88 GiB 214.61 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    . . .

これで、新しいドライブの追加と同じ操作でRAIDデバイスの数を増やすことができます。

sudo mdadm --grow /dev/md0 --raid-devices=3 --add /dev/sdc

アレイがRAID 4に変更されたことを示す出力が表示されます。

Outputmdadm: level of /dev/md0 changed to raid4
mdadm: added /dev/sdc

これは正常で予想されることです。 データが既存のすべてのディスクに再配布されると、アレイはRAID 0に戻ります。

次のように入力して、アクションの進行状況を確認できます。

cat /proc/mdstat

同期が完了したら、追加のスペースを使用するようにファイルシステムのサイズを変更します。

sudo resize2fs /dev/md0

アレイには、容量に合ったファイルシステムが必要です。

アレイからデバイスを削除する

障害が発生した場合、またはディスクを切り替える必要がある場合は、RAIDアレイからドライブを削除することが必要になる場合があります。

デバイスを削除するには、最初にアレイ内で「失敗」としてマークする必要があります。 mdadm --detailを使用して、障害が発生したデバイスがあるかどうかを確認できます。

sudo mdadm --detail /dev/md0
Output/dev/md0:
        Version : 1.2
  Creation Time : Wed Aug 10 21:42:12 2016
     Raid Level : raid5
     Array Size : 209584128 (199.88 GiB 214.61 GB)
  Used Dev Size : 104792064 (99.94 GiB 107.31 GB)
   Raid Devices : 3
  Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Thu Aug 11 14:10:43 2016
          State : clean, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 1
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           Name : mdadmwrite:0  (local to host mdadmwrite)
           UUID : bf7a711b:b3aa9440:40d2c12e:79824706
         Events : 144

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8        0        1      active sync   /dev/sda
       2       8       16        2      active sync   /dev/sdb
       0       8       32        -      faulty   /dev/sdc

強調表示された行はすべて、ドライブが機能していないことを示しています(この例では/dev/sdc)。

問題のないドライブを削除する必要がある場合は、--failオプションを使用して手動で故障としてマークすることができます。

sudo mdadm /dev/md0 --fail /dev/sdc
Outputmdadm: set /dev/sdc faulty in /dev/md0

mdadm --detailの出力を見ると、デバイスに障害のマークが付けられていることがわかります。

デバイスに障害が発生したら、mdadm --removeを使用してアレイからデバイスを削除できます。

sudo mdadm /dev/md0 --remove /dev/sdc
Outputmdadm: hot removed /dev/sdc from /dev/md0

次に、スペアの追加に使用するのと同じmdadm --addコマンドを使用して、新しいドライブと交換できます。

sudo mdadm /dev/md0 --add /dev/sdd
Outputmdadm: added /dev/sdd

アレイは、新しいドライブにデータをコピーすることにより回復を開始します。

配列の削除

含まれるすべてのデータを含む配列を破壊するには、まず配列の停止に使用したプロセスに従うことから始めます。

まず、ファイルシステムをアンマウントします。

cd ~
sudo umount /mnt/md0

次に、配列を停止します。

sudo mdadm --stop /dev/md0

その後、RAIDデバイスを対象とする--removeコマンドを使用して、アレイ自体を削除します。

sudo mdadm --remove /dev/md0

アレイ自体を削除したら、各コンポーネントデバイスでmdadm --zero-superblockを使用する必要があります。 これにより、mdadmがアレイの一部としてコンポーネントデバイスをアセンブルおよび管理するために使用するヘッダーであるmdスーパーブロックが消去されます。 これがまだ存在する場合、他の目的でディスクを再利用しようとすると問題が発生する可能性があります。

lsblk --fs出力のFSTYPE列を確認すると、スーパーブロックがまだ配列に存在していることがわかります。

lsblk --fs
OutputNAME    FSTYPE            LABEL        UUID                                 MOUNTPOINT
sda     linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706
sdb     linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706
sdc     linux_raid_member mdadmwrite:0 bf7a711b-b3aa-9440-40d2-c12e79824706
sdd
vda
├─vda1  ext4              DOROOT       4f8b85db-8c11-422b-83c4-c74195f67b91 /
└─vda15

この例では、/dev/sda/dev/sdb、および/dev/sdcはすべて配列の一部であり、そのようにラベル付けされています。

次のように入力してラベルを削除します。

sudo mdadm --zero-superblock /dev/sda /dev/sdb /dev/sdc

次に、/etc/fstabファイル内の配列への参照を削除またはコメントアウトしてください。

sudo nano /etc/fstab

/etc/fstab

. . .
# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0

完了したら、ファイルを保存して閉じます。

配列への参照も/etc/mdadm/mdadm.confファイルから削除またはコメントアウトします。

nano /etc/mdadm/mdadm.conf

/etc/mdadm/mdadm.conf

# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=bf7a711b:b3aa9440:40d2c12e:79824706

完了したら、ファイルを保存して閉じます。

次のように入力して、initramfsを更新します。

sudo update-initramfs -u

これにより、初期ブート環境からデバイスが削除されます。

結論

Linuxのmdadmユーティリティを使用すると、使用する規則と情報を探すことができる場所を理解すれば、配列の管理がかなり簡単になります。 このガイドは決して網羅的なものではありませんが、日常的に実行する必要がある管理タスクの一部を紹介するのに役立ちます。

mdadmを使用したRAIDアレイの作成と管理に慣れたら、次に検討できるさまざまな方向性があります。 LVMなどのボリューム管理レイヤーはRAIDと緊密に統合され、スペースを論理ボリュームに柔軟に分割できます。 同様に、ファイルシステムを書き込む前に、LUKSおよびdm-crypt暗号化を使用してRAIDデバイスを暗号化します。 Linuxでは、これらすべてのテクノロジーを一緒に使用して、ストレージ機能を強化できます。

Related