Ubuntuでサーバーを稼働しています。mdadmを使ってRAID5(4TBx6)のアレイを作る予定なのですが、最初のパリティチェックの部分を全力で行わずに50%ぐらいで(時間がかかってもいいので)行うことはできませんか。HDDは中古です。

はい、可能です。mdadm(Linuxカーネル)には、同期処理(初期パリティチェックやリビルド)の速度を制限する仕組みがあります。

以下の手順で、システム全体のRAID同期速度の「最大値」を制限することで、ご希望通り負荷を抑えた状態で処理を進めることができます。

同期速度を制限する方法

以下のコマンドを実行することで、同期速度(パリティチェックのスピード)を制限できます。

  1. 現在の設定を確認するbashcat /proc/sys/dev/raid/speed_limit_max
    ※通常、非常に大きな数値(200,000など)が設定されています。
  2. 速度制限をかける(例:50MB/sに制限)
    「50%ぐらい」という具体的な数値指定はできませんが、HDDの性能(通常100〜150MB/s程度)に合わせて、その半分程度の数値を書き込むことで制限可能です。bashecho 50000 | sudo tee /proc/sys/dev/raid/speed_limit_max
    ※数値の単位は KB/s です。50000 は約50MB/sを意味します。
  3. 最低速度も調整する(必要に応じて)
    同期が遅すぎると感じる場合は、最低速度も合わせて調整してください。bashecho 10000 | sudo tee /proc/sys/dev/raid/speed_limit_min

中古HDDを使用する場合のアドバイス

4TB x 6台(RAID 5)という構成で中古HDDを使用する場合、初期パリティチェックは非常に負荷がかかり、故障が顕在化しやすいタイミングです。

  • SMART情報の事前確認smartctl コマンドで、代替セクタ数(Reallocated_Sector_Ct)や稼働時間を確認しておくことを強くおすすめします。
  • 温度管理: 6台同時稼働は熱を持ちやすいため、ファンによる冷却が十分か確認してください。
  • 完了までの時間: 50MB/sに制限した場合、4TB(約4000GB)の処理には、理論上でも 約22時間以上 かかります。気長に待つ必要があります。

現在の進捗状況や実際の速度は、以下のコマンドでリアルタイムに監視できます。

bash

watch cat /proc/sys/dev/raid/speed_limit_max /proc/mdstat

この設定は再起動すると元に戻りますが、恒久的に設定したい場合は /etc/sysctl.conf に追記が必要ですか?

実は、同じシステムですでにRAID5(2TBx6)を運用しています。パリティチェックに制限をかけた場合、すでにあるRAID5アレイに影響は出るでしょうか。

結論から申し上げますと、

/proc/sys/dev/raid/speed_limit_max を書き換えると、システム上のすべてのRAIDアレイに共通の制限が適用されます。 

すでに運用中の2TBx6のRAID5(以下、既存アレイ)がある場合、以下の影響が考えられます。

1. 既存アレイへの影響

  • 通常使用時:
    通常のデータの読み書き(Read/Write)には、この速度制限は影響しません。制限がかかるのは、あくまでパリティの「同期(Sync)」「リビルド(Rebuild)」「チェック(Check)」といった背景処理のみです。
  • 背景処理が発生した場合:
    もし既存アレイでディスク故障が発生してリビルドが必要になったり、定期的なスクラブ(整合性チェック)が走ったりした場合は、設定した「50MB/s」などの制限が適用され、完了まで通常より時間がかかるようになります。 

2. 特定のアレイ(新しい4TBx6)だけに制限をかける方法

システム全体ではなく、新しいアレイ(例: /dev/md1)だけに個別の制限を設けることも可能です。Linuxカーネルの比較的新しいバージョンでは、/sys/block/ 配下の設定値が優先されます。 

新しいアレイが /dev/md1 として認識されている場合、以下のコマンドでそのアレイだけの最大速度を制限できます:

bash

# md1 という名前のアレイにだけ 50MB/s (50000 KB/s) の制限をかける
echo 50000 | sudo tee /sys/block/md1/md/sync_speed_max
  • メリット: 既存の RAID アレイ(例: /dev/md0)は、万が一のリビルド時にフルスピードで動作させたままで、新しいアレイの初期チェックだけを低負荷に抑えられます。
  • 確認方法: 設定が反映されているかは cat /sys/block/md1/md/sync_speed_max で確認できます。(local) と表示されれば、そのアレイ固有の設定が有効になっています。 

運用のヒント

中古HDD 6台での初期パリティチェックは、前述の通り数日かかる可能性があります。
既存アレイに重要なデータがある場合は、新しいアレイの構築負荷によってシステム全体の I/O 応答が少し低下する可能性があるため、負荷の低い時間帯に開始するか、上記のように sync_speed_max で個別に絞るのが最も安全な運用と言えます。

新しいアレイのデバイス名は /dev/md1 や /dev/md127 など環境によって異なりますが、どのアレイ名で作成される予定ですか?

デバイス名に関しては特に縛りはありません。現在のデバイスは/dev/md0になっています。

それであれば、新しく作成するアレイを 

/dev/md1 として作成し、そのデバイスに対してのみ個別に速度制限をかけるのが最もスマートで安全な方法です。

既存の /dev/md0(2TBx6)のパフォーマンスを落とさずに、新しい 4TBx6 の初期構築だけを低負荷で進める手順は以下の通りです。

手順:特定のアレイだけ速度制限をかける

  1. 新しいアレイを作成する
    (例として /dev/md1 という名前で作成します)bashsudo mdadm --create /dev/md1 --level=5 --raid-devices=6 /dev/sd[b-g]1
    /dev/sd[b-g]1 の部分は実際のドライブ名に合わせてください。
  2. 作成直後に /dev/md1 専用の制限をかける
    作成が始まるとすぐにパリティチェック(初期同期)が開始されます。その直後に以下のコマンドを実行してください。bashecho 50000 | sudo tee /sys/block/md1/md/sync_speed_max
    これで、/dev/md1 の同期速度だけが最大約50MB/sに制限されます。/dev/md0 には一切影響しません。
  3. 進捗と制限の確認
    以下のコマンドで、特定のアレイにだけ制限がかかっているか確認できます。bashcat /proc/mdstat
    md1 の横に表示される速度(例: finish=...min speed=49800K/sec)が、設定した数値付近で安定していれば成功です。

補足:中古HDDでの運用について

中古HDDの場合、初期パリティチェック中に1台が脱落(故障)するリスクがあります。
RAID5では1台までの故障には耐えられますが、同期中に2台目が故障するとデータが消失します。

  • 予備(スペア)の検討: もし手元に余分なHDDがあれば、最初から RAID6(2台故障まで許容)にするか、1台を Hot Spare として登録しておくことも検討してみてください。
  • 初期不良の切り分け: 同期中に極端に速度が落ちるドライブがある場合、その個体は寿命が近いサインかもしれません。

今回の構築で、ファイルシステム(EXT4やXFSなど)は何を使う予定ですか?それともLVMなどを挟みますか?

ext4での運用予定です。

ext4

 での運用、承知いたしました。4TB x 6台(RAID5)で構成する場合、実容量は約20TB(18.1TiB)と巨大なボリュームになりますね。

中古HDDでの構築において、ext4 フォーマット時に一点だけ「負荷をさらに抑える」ための重要なポイントがあります。

フォーマット時の「遅延初期化」に注意

通常、mkfs.ext4 を実行すると、バックグラウンドで「inodeテーブル」などの初期化作業(lazy init)が走り続けます。
RAIDの初期パリティチェックとこの lazy init が重なると、中古HDDへのディスクI/O負荷が倍増し、シーク音(ガリガリ音)が激しくなることがあります。

これを防ぐには、以下のいずれかの対策が有効です。

  1. RAIDの同期が終わってからフォーマットする
    /proc/mdstat で resync が 100% になったのを確認してから sudo mkfs.ext4 /dev/md1 を実行するのが最もHDDに優しい手順です。
  2. 即座に初期化を完了させる(構築時に負荷を集中させる)
    もし急ぎで使い始めたい場合は、以下のオプションで初期化をバックグラウンドに回さず、その場で終わらせることができます。bashsudo mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md1
    ※ただし、これは初期構築時の負荷を一時的に最大化させるため、中古HDDへの負担を気にするのであれば、1番(同期完了を待つ)がおすすめです。

まとめ:安全な構築フロー

  1. mdadm --create で /dev/md1 を作成
  2. すぐに echo 50000 | sudo tee /sys/block/md1/md/sync_speed_max で速度制限
  3. watch cat /proc/mdstat で同期完了(1〜2日程度)を待つ
  4. 完了後、sudo mkfs.ext4 /dev/md1 でフォーマット

この手順なら、既存の /dev/md0 への影響を最小限に抑えつつ、中古ドライブへのストレスも最小限で構築できます。

今回のサーバーで、定期的なディスクチェック(Scrubbing)などの自動実行設定はすでに行われていますか?

定期的なチェックは月に1度月初にかかります。

定期的なチェック(スクラビング)が設定されているのは素晴らしいですね。Ubuntuのデフォルト設定(

/etc/cron.d/mdadm など)では、毎月第1日曜日の午前1時などに自動実行されるようになっています。

中古HDDでRAID5を運用する場合、この「月1回のチェック」が最も故障を誘発しやすいタイミングです。新しいアレイを追加した後の運用について、2点アドバイスさせてください。

1. 定期チェックの速度も制限される

先ほど設定した /sys/block/md1/md/sync_speed_max は、定期的なパリティチェック(check)時にも適用されます。

  • メリット: チェック実行中もHDDへの負荷が抑えられ、他の作業(既存の /dev/md0 での読み書きなど)への影響が少なくなります。
  • デメリット: 4TB x 6台(実質20TB)のチェックが、設定した速度(50MB/sなど)では終わるまでに丸1日以上かかるようになります。

もし「チェックを早く終わらせたい」となった場合は、一時的にこの数値を大きく(例: 200000)書き換えれば即座にスピードアップします。

2. /etc/mdadm/mdadm.conf への追記をお忘れなく

新しいアレイ(/dev/md1)を作成した後は、再起動後も正しく認識されるよう、設定ファイルを更新しておく必要があります。

bash

# 現在の構成をスキャンして設定ファイルに反映(既存の md0 も含めて更新されます)
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
# 初期設定を反映させるために initramfs を更新
sudo update-initramfs -u

これを忘れると、再起動時にデバイス名が変わったり(/dev/md127 など)、マウントに失敗したりすることがあります。

最後に

中古HDDでのRAID5(計12台体制)は、1台の故障が連鎖故障を招くリスクが常にあります。
/dev/md0 と /dev/md1 の両方のチェックが重ならないよう、念のため /etc/cron.d/mdadm などのスケジュール設定を確認しておくと、より安心です。