ウブントゥ22.04でmdadmを使用してRAIDアレイを管理する方法
はじめに
RAIDアレイは、個々のディスクを特定の設定で仮想ストレージデバイスに組み合わせることで、パフォーマンスと冗長性を向上させます。Linuxでは、mdadmユーティリティがソフトウェアRAIDアレイを作成し管理します。
以前のガイドでは、Ubuntu 22.04でmdadmを使用してRAIDアレイを作成する方法を説明しました。このガイドでは、Ubuntu 22.04サーバーでRAIDアレイを管理する方法を紹介します。
前提条件
このガイドに従うには、非ルートのsudoユーザーへのアクセスが必要です。適切なユーザーを設定するために、当社のUbuntu 22.04初期サーバーセットアップガイドに従うことができます。
以前に言及したように、このガイドではRAIDアレイの管理について説明します。このガイドを始める前に、Ubuntu 22.04でmdadmを使用してRAIDアレイを作成する方法に関する当社のガイドに従って、1つ以上のアレイを作成してください。このガイドでは、1つ以上のアレイを操作することを前提としています。
Info
RAIDデバイスに関する情報を取得する。
適切な管理のために最も重要な要件の1つは、アレイの構造、構成デバイス、および現在の状態に関する情報を見つける能力です。
RAIDデバイスの詳細な情報については、mdadmにRAIDデバイスを-Dまたは–detailオプションと一緒に渡してください。
- sudo mdadm -D /dev/md0
重要な情報は、配列に関して表示されます。
/dev/md0: Version : 1.2 Creation Time : Thu Sep 29 17:07:10 2022 Raid Level : raid10 Array Size : 209582080 (199.87 GiB 214.61 GB) Used Dev Size : 104791040 (99.94 GiB 107.31 GB) Raid Devices : 4 Total Devices : 4 Persistence : Superblock is persistent Update Time : Thu Sep 29 17:08:24 2022 State : clean, resyncing Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : near=2 Chunk Size : 512K Consistency Policy : resync Name : raid2:0 (local to host raid2) UUID : 8069bcc7:72e7b49f:fba1c780:560a85e0 Events : 35 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
ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=8069bcc7:72e7b49f:fba1c780:560a85e0
RAIDデバイスの簡潔な人間が読める要約を取得するには、-Qオプションを使用してクエリしてください。
- sudo mdadm -Q /dev/md0
/dev/md0: 199.88GiB raid10 4 devices, 0 spares. Use mdadm –detail for more detail.
一目でRAIDデバイスの重要な情報を把握するためにこれが利用できます。
コンポーネントデバイスに関する情報の入手
個別のコンポーネントデバイスを調べるために、mdadmを使用することもできます。
コンポーネントデバイスと共に使用する場合、-Qオプションはそのデバイスがどの配列の一部であり、どの役割を果たしているかを示します。
- sudo mdadm -Q /dev/sdc
/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
/dev/sdc: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : 8069bcc7:72e7b49f:fba1c780:560a85e0 Name : RAID2204:0 (local to host RAID2204) Creation Time : Wed Oct 5 15:56:03 2022 Raid Level : raid10 Raid Devices : 4 Avail Dev Size : 209582080 sectors (99.94 GiB 107.31 GB) Array Size : 209582080 KiB (199.87 GiB 214.61 GB) Data Offset : 133120 sectors Super Offset : 8 sectors Unused Space : before=132968 sectors, after=0 sectors State : clean Device UUID : 027f74c5:6d488509:64844c7a:add75d88 Update Time : Wed Oct 5 16:13:57 2022 Bad Block Log : 512 entries available at offset 136 sectors Checksum : 98edf3ae – correct Events : 35 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
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [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>
ここでは出力が非常に密集しており、少ないスペースで多くの情報を提供しています。
/proc/mdstat のフレーズを日本語で自然に言い換えてください。1つのオプションで構いません。
/proc/mdstat -> 「/proc/mdstat ファイル」
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
. . .
パーソナリティのラインは、カーネルが現在サポートしている異なるRAIDレベルと構成を説明しています。
md0という行は、RAIDデバイスの説明の始まりを表しています。続くインデントされた行も、このデバイスについて説明しています。
. . .
md0 : active raid10 sdd[3] sdc[2] sdb[1] sda[0]
. . .
最初の行は、配列がアクティブであり、故障していないこと、そしてRAID 10として設定されていることを述べています。その後、配列の構築に使用されたコンポーネントデバイスがリストされています。かっこの中の数字は、デバイスが配列内で現在の役割を示しており、デバイスが与えられるデータのコピーに影響を与えます。
. . .
209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
. . .
この例に表示される2行目には、仮想デバイスが提供するブロックの数、メタデータのバージョン(この例では1.2)、配列のチャンクサイズが表示されます。RAID 10の配列であるため、配列のレイアウトに関する情報も含まれています。この例では、データの各チャンクの2つのコピーをニアレイアウトで格納するように構成されています。
角括弧内の最後の項目は、両方とも健全なセット内で現在利用可能なデバイスを表しています。数値の括弧内の最初の数字は、健全な配列のサイズを示し、2番目の数字は現在利用可能なデバイスの数を表しています。他の括弧は、配列の状態を視覚的に示しており、Uは健全なデバイスを、_は故障したデバイスを表しています。
もし現在の配列が組み立てまたは回復中である場合、進捗状況を表示する別の行があるかもしれません。
/proc/mdstat –> /proc/mdstat
. . .
[>....................] resync = 0.9% (2032768/209584128) finish=15.3min speed=225863K/sec
. . .
これは、さまざまな方法で適用されている操作と現在の進捗状況を説明します。また、現在の速度と完了までの予想時間も提供します。
現在シ ステム上で実行され ている配列の状況がよく分かったら、いくつかの行動を取ることができます。
配列の停止
配列を停止するためには、最初にアンマウントする必要があります。
cd ~コマンドを使って、マウントされたディレクトリの外に出てください。
- 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のような予備のデバイスを追加することができます。アクティブなデバイスが故障しない限り、予備デバイスはアレイによってアクティブに使用されません。デバイスの故障が発生した場合、アレイはデータを予備ドライブに再同期し、アレイを完全な状態に修復します。予備デバイスは冗長性のないアレイ(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またはRAID 10を使用して
最初に、前のセクションで示されたように、新しいデバイスをスペアとして追加します。
- sudo mdadm /dev/md0 –add /dev/sde
アレイ内の現在のRAIDデバイスの数を調べてください。
- sudo mdadm –detail /dev/md0
/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つであることが明らかになります。
今、アレイを再構成してアクティブデバイスを追加してください。予備デバイスは追加されたドライブ要件を満たすために使用されます。このコマンドでは、ターゲットとなるRAIDデバイスの数を置き換えることを忘れないでください。ここでは、2つのデバイスを持つRAID 1を3つに増やしています。4つのデバイスがあるRAID 10で、追加のドライブがある場合は、それを5つに増やしてください。
- 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
/dev/md0: Version : 1.2 Creation Time : Wed Oct 5 18:38:51 2022 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つです。
今、アレイを再構成して、追加のアクティブデバイスを持たせてください。スペアは、追加のドライブ要件を満たすために使用されます。RAID 5またはRAID 6アレイを拡張する際には、–backup-fileという追加オプションを含めることが重要です。これにより、重要な情報が格納されるバックアップファイルの場所がアレイの外部を指します。
Note
- sudo mdadm –grow –raid-devices=4 –backup-file=/root/md0_grow.bak /dev/md0
次の出力は、クリティカルセクションがバックアップされることを示しています。 (Tsugi no shutsuryoku wa, kuritikaru sekushon ga bakkappu sa reru koto o shimeshiteimasu.)
mdadm: Need to backup 3072K of critical section..
追加のアクティブディスクで配列が再構成され始めます。データの同期の進行状況を表示するには、次のコマンドを実行してください。
- cat /proc/mdstat
このプロセスが完了するまで、デバイスを引き続き使用することができます。
リシェイプが完了したら、追加スペースを利用するためにアレイ上のファイルシステムを拡張する必要があります。
- sudo resize2fs /dev/md0
あなたの配列は、容量に合わせたファイルシステムを持つようになります。
RAID 0を使用する
RAID 0アレイには予備ドライブを持つことはできません。なぜなら、故障したRAID 0アレイを修復するための予備の機会がありませんからです。アレイを増やすと同時に、新しいデバイスを追加する必要があります。
まず、アレイ内の現在のRAIDデバイスの数を調べてください。 (Mazu, arei nai no genzai no RAID debaisu no kazu o shirabete kudasai.)
- sudo mdadm –detail /dev/md0
/dev/md0: Version : 1.2 Creation Time : Wed Aug 10 19:17:14 2020 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に変更されたことを示す出力が表示されます。
mdadm: 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
/dev/md0: Version : 1.2 Creation Time : Wed Aug 10 21:42:12 2020 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 2020 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
mdadm: set /dev/sdc faulty in /dev/md0
mdadm –detail の出力を確認すると、デバイスが現在故障とマークされていることがわかります。
デバイスが故障した場合、mdadm –removeを使用して配列から取り外すことができます。
- sudo mdadm /dev/md0 –remove /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md0
それから、スペアを追加するときに使用する mdadm –add コマンドと同じコマンドを使用して、新しいドライブにそれを置き換えることができます。
- sudo mdadm /dev/md0 –add /dev/sdd
mdadm: 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
NAME 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と緊密に統合されており、スペースを論理ボリュームに柔軟に分割することができます。詳細については、当ウェブサイトの「LVMコンセプト入門」チュートリアルを参照してください。
同様に、RAIDデバイスにファイルシステムを書き込む前にLUKSとdm-crypt暗号化が一般的に使われます。Linuxでは、これらのテクノロジーを組み合わせてストレージの機能を向上させることができます。