Ubuntu 18.04でmdadmを使いSSDでraid5を構成し、その後raid6に変更した
Introduction
PCクラスタを運用していて、共有ディレクトリのストレージ容量が圧迫されるようになってきた。
もともと1TBのHDDを一枚、nfsでぶらさげていたが、遅い、冗長性なし、容量不足、と三拍子揃っていたため、
高速で、冗長性があり、大容量なストレージの構築を目指した。
最初は、そこらへんに転がっていた1TBのSSD(怪しい中華のKingDian製)を4枚使って、mdadmでraid0を構築した。
構築は、
- /dev/sdaがOSインストールディスク、
- /dev/sd[b-e]がmkfs.ext4された空のディスク
なお、https://kledgeb.blogspot.com/2014/03/ubuntu-mdadm-47-raid-5.html を参考にした。
順調にraid5 with 4-SSDを構成
まずは普通にraid5を構成する。
sudo mdadm --create /dev/md127 --level=raid5 --raid-devices=4 --chunk=128 --verbose /dev/sdb /dev/sdc /dev/sdd /dev/sde
その後、
sudo mdadm --detail /dev/md127
にて詳細を確認。
問題なく構築が完了した。
データ入りSSDを誤ってraid5に組み込んでしまう
その後、容量不足のため、他で使っていて不要となった1TBのSSDを1枚追加しようとして、初歩的なミスからトラブルを引き起こしてしまう。
新たに追加するディスクは/dev/sdfだが、フォーマットを完了する以前に、追加してしまう。
sudo mdadm --add /dev/md127 /dev/sdf
ところが、追加自体はエラーを吐かずに完了してしまい、Array Sizeは3.7TBを示しているものの、マウント先のクライアントからは以前の2.7TBのままで、再マウントしても状況は変わらない。
SSDの取り出しとフォーマット、再マウントまで
そこで、追加した/dev/sdfをraidから切り離し、フォーマットした上で再度マウントした。
まず、
sudo mdadm --fail /dev/md127 /dev/sdf
として、/dev/sdfを故障SSDとして隔離する。
次に、
sudo mdadm --remove /dev/md127 /dev/sdf
として、/dev/sdfをremoveする。
その後、
sudo fdisk /dev/sdf
にて、既存のパーティションを全削除して、
sudo mkfs.ext4 /dev/sdf
として、ext4形式でフォーマットし、
sudo mdadm --add /dev/md127 /dev/sdf
にてadd,
sudo mdadm --grow --raid-devices=5 /dev/md127
にて、Array Sizeを拡張した。
ここで、Array Sizeは再び3.7TBへ増加したが、パーティションまでは拡張されていないため、マウント先のクライアントからは依然として2.7TBのままであった。そこで、調べたところ以下のコマンドに行き着いた。
sudo resize2fs /dev/md127
これにより、無事、5枚の1TB-SSDを用いて、raid5の3.7TBストレージを確保した。
raid5からraid6へ
raid5からraid6への拡張は簡単だった。新たにCrusial製の1TB-SSDを追加し、
/dev/sdgとして認識されたのを確認した上で、
sudo mdadm --add /dev/md127 /dev/sdg
sudo mdadm --grow /dev/md127 --level=raid6
以上で完了した。
なお、ディスクの再構成のため、5時間ほどかかった。
以上の作業により、容量3.7TB、SSDの2枚同時戦死に耐える高速ストレージを構築した。
以下追記(2019/8/30)
その後、1TBのSSDをさらに一枚追加した。
/dev/sdhとして認識され、
sudo mdadm --add /dev/md127 /dev/sdh
sudo mdadm --grow --raid-devices=7 /dev/md127
ここから、同期に1日程度を要したのち、
sudo resize2fs /dev/md127
にてパーティションのりサイズを行い、無事5TB(実効4.5TBくらい)のraid6ファイルシステムを構築した。
現在のところ余裕も2TB程できている。
Speed test
(2019/08/31追記)
hdparmでSpeed testを行ってみた。
Timing buffered disk reads: 3818 MB in 3.00 seconds = 1271.25 MB/sec
Timing buffered disk reads: 2630 MB in 3.00 seconds = 876.45 MB/sec
Timing buffered disk reads: 3604 MB in 3.00 seconds = 1200.54 MB/sec
Timing buffered disk reads: 4028 MB in 3.00 seconds = 1340.85 MB/sec
Timing buffered disk reads: 3878 MB in 3.00 seconds = 1292.41 MB/sec
Timing buffered disk reads: 4046 MB in 3.00 seconds = 1348.49 MB/sec
Timing buffered disk reads: 1438 MB in 3.00 seconds = 479.28 MB/sec
Timing buffered disk reads: 3398 MB in 3.14 seconds = 1082.78 MB/sec
Timing buffered disk reads: 3858 MB in 3.00 seconds = 1285.46 MB/sec
Timing buffered disk reads: 3168 MB in 3.00 seconds = 1055.98 MB/sec
平均して、1123.3 MB/secであった。
SSD一枚が550 MB/secくらいなので、おおよそ2倍くらいのread速度になった。
現状84コアのクラスター用で、ネットワークがギガビットイーサなので、ファイルサーバーとしてはこの程度の性能があれば遅延は気にならない。
もう少し高速化するかとも思っていたけれど。
Conclusion
今回、論文用の計算を回しながらSSDを追加したりraidレベルを変更したりしていた。
多少動作がもっさりしたものの、いずれも無事に完了した。
あとはOS入りディスクのバックアップを取っておけばかなり堅牢なシステムとなろう。
開発者の皆様、ありがとうございます。