Ubuntu16.04でmdadmを使用してRAIDアレイを管理する方法
序章
RAIDアレイは、個々のディスクを特定の構成の仮想ストレージデバイスに結合することにより、パフォーマンスと冗長性を向上させます。 Linuxでは、mdadm
ユーティリティを使用すると、ソフトウェアRAIDアレイを簡単に作成および管理できます。
以前のガイドでは、 Ubuntu16.04でmdadmを使用してRAIDアレイを作成する方法について説明しました。 このガイドでは、Ubuntu16.04サーバーでRAIDアレイを管理する方法を示します。 ほとんどの場合、RAIDアレイの管理は非常に簡単です。
前提条件
このガイドを完了するには、ルート以外のsudo
ユーザーにアクセスする必要があります。 Ubuntu 16.04初期サーバーセットアップガイドに従って、適切なユーザーをセットアップできます。
前述のように、このガイドではRAIDアレイ管理について説明します。 このガイドを開始する前に、 Ubuntu 16.04 でmdadmを使用してRAIDアレイを作成する方法に関するガイドに従って、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: <none>
ここでの出力は非常に高密度であり、小さなスペースで多くの情報を提供します。
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10]
. . .
Personalities 行は、カーネルが現在サポートしているさまざまなRAIDレベルと構成を示しています。
md0 で始まる行は、RAIDデバイスの説明の始まりを示しています。 次のインデントされた行も、このデバイスを説明しています。
. . .
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
. . .
最初の行は、アレイがアクティブ(障害ではない)であり、RAID10として構成されていることを示しています。 その後、アレイの構築に使用されたコンポーネントデバイスが一覧表示されます。 括弧内の数字は、アレイ内のデバイスの現在の「役割」を示しています(これは、デバイスに与えられるデータのコピーに影響します)。
. . .
209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
. . .
この例で表示される2行目は、仮想デバイスが提供するブロック数、メタデータバージョン(この例では1.2)、およびアレイのチャンクサイズを示しています。 これはRAID10アレイであるため、アレイのレイアウトに関する情報も含まれています(この例では、データの各チャンクの2つのコピーを「近い」レイアウトに格納するように構成されています)。
角括弧内の最後の項目は両方とも、正常なセットから現在使用可能なデバイスを表しています。 数字の括弧内の最初の数字は正常なアレイのサイズを示し、2番目の数字は現在使用可能なデバイスの数を示します。 他の括弧はアレイの状態を視覚的に示しており、「U」は正常なデバイスを表し、「_」は障害のあるデバイスを表します。
アレイが現在アセンブルまたはリカバリしている場合は、進行状況を示す別の行がある可能性があります。 次のようになります。
. . .
[>....................] 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など)に追加できます。 アクティブなデバイスに障害が発生しない限り、スペアはアレイによってアクティブに使用されません。 これが発生すると、アレイはデータをスペアドライブに再同期して、アレイを完全な状態に修復します。 スペア
スペアを追加するには、アレイと新しいデバイスをmdadm --add
コマンドに渡すだけです。
- sudo mdadm /dev/md0 --add /dev/sde
アレイが劣化状態にない場合は、新しいデバイスがスペアとして追加されます。 デバイスが現在劣化している場合、再同期操作はすぐにスペアを使用して障害のあるドライブを交換し始めます。
スペアを追加した後、新しいデバイスの向きを反映するように構成ファイルを更新します。
- sudo nano /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レベルによってわずかに異なります。
RAID1または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
プロセスが完了するまで、デバイスを引き続き使用できます。
RAID5または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の場所を指している必要があります。
ノート
バックアップファイルは、このプロセス中の非常に短いが重要な時間にのみ使用され、その後自動的に削除されます。 これが必要な時間は非常に短いため、ディスク上のファイルが表示されることはほとんどありませんが、問題が発生した場合は、アレイの再構築に使用できます。 この投稿には、詳細を知りたい場合の追加情報があります。
- 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
これで、アレイの容量に一致するファイルシステムが作成されます。
RAID0の場合
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
アレイがRAID4に変更されたことを示す出力が表示されます。
Outputmdadm: level of /dev/md0 changed to raid4
mdadm: added /dev/sdc
これは正常であり、予想されます。 データが既存のすべてのディスクに再配布されると、アレイはRAID0に戻ります。
次のように入力すると、アクションの進行状況を確認できます。
- 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
を使用する必要があります。 これにより、md
スーパーブロックが消去されます。これは、mdadm
がアレイの一部としてコンポーネントデバイスを組み立て、管理するために使用するヘッダーです。 これがまだ存在する場合は、他の目的でディスクを再利用しようとしたときに問題が発生する可能性があります。
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
. . .
# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0
終了したら、ファイルを保存して閉じます。
/etc/mdadm/mdadm.conf
ファイルからも配列への参照を削除またはコメントアウトします。
- nano /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では、これらすべてのテクノロジーを一緒に使用して、ストレージ機能を強化できます。