前書き
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では、これらすべてのテクノロジーを一緒に使用して、ストレージ機能を強化できます。