
自宅サーバーメンテナンス
記述に誤りがありましたので内容を修正しています 2022年1月30日
7月31日に自宅サーバーの調子がおかしくなり、数時間落としてしまいました。 原因は二重化しているハードディスクの片側のBドライブが故障したものです。
そろそろ、前回のハードディスク交換から2年になるなぁと思っていた矢先の障害発生でした。やはりハードディスクは24時間x365日、運用していると2年が寿命のようです。 中には4年もったときもありますが、大体は時計で測ったように2年で障害が発生します。 Aドライブは生きていましたので、そのまま運用を継続できましたが1週間片肺で運用していました。
先週、注文していたハードディスクも到着しましたので、昨日キャンプから帰ってすぐにサーバーのメンテナンスを行い、ハードディスクを両方とも交換しました。
いままで使っていたハードディスクは1TBのものでしたが、今後のことも考え、2TBのものを2重化のため2つ購入しました。 私はサーバーのパーティション分けはユーザーエリアを含む「/」と「/boot」そしてSwapエリアの3つに分けているだけです。 前回交換した際は「/」のルート領域だけを大きくしたのですが、今後のことを考えると将来のメモリー増設に適応できるようにSwap領域も拡張し、またbootエリアも最近ちょっと手狭になっていたのでこのパーティションも増大させてみたいと思っていました。
そこで、単にRAID1でハードディスクを復元するだけでなく、3つのパーティションをそれぞれ拡張することをやってみました。あまり、このようなケースを紹介してるところもないようなのでノウハウを共有しておくとともに自分の備忘録としておきたいと思います。
まず、使っているOSはCentOS7で、いままでハードディスクは1TBのものを2台使って、Software RAIDのRAID1構成で組んでいました。
それぞれのパーティションはこんな感じです。
/boot が200MB
Swap が4GB
/ が残りの約980GBくらいです。
今使っているメモリーが4GBなのでSwapもこれくらいで十分ですし、/bootもこれくらいあれば十分なのですが、Swapは将来のメモリー増設に備えるため、そして/bootもKernelのアップデートがありこれをダウンロードすると、/bootが92%くらいの使用量になってしまいます。このため今回2TBのハードディスクを使用し、/bootを約5倍の1 GB、Swapも約10倍の42 GBに設定し、残りの約1.8TBを/に割り当てることにしました。
いままでパーティションサイズの違うRAID1での復旧をやったこともなかったのですが試行錯誤の上、何とかできました。
まず生きているハードディスクは、そのままにして障害の発生したハードディスクを取り外します。
どうやって壊れた側を判断するかは、いろいろ判断材料はありますが今回 cat /proc/mdstat でみると「sda」しか見えなくなり明らかに「sdb」の障害です。
新しいHDDのパーティション分けを、それぞれの新しいサイズを指定して作成します。
今回はsdbの交換なので、下記のコマンドで行います。
[root@XXX ~]# fdisk /dev/sdb
nコマンドで、パーティションの作成を行います。
ここで注意すべきはそれぞれのパーティションの順番を今まで通りにしておく方がいいと思います。
ちなみにこれが今までのパーティション
そして、これが新しいものです。(完了後に撮影)
ちなみにsda1はswapエリア、sda2は/boot、sda3が/です。
こんな感じで順番は同じにしておいたほうが良いと思います。
その後、「sdb」のパーティションIDをtコマンドでRAID用に「fd」に設定します。
もう一つ忘れていけないのは「/boot」のパーティションを起動可能のフラグをaコマンドで設定します。
以上を終えたらpコマンドで設定を確認。 この時点ではまだ書き込みされていません。
wコマンドでハードディスクに書き込みます。
この状態でAディスクは今までの1TBのサイズで小さなパーティション、そして新しいBディスクは2TBのサイズで大きく増大したパーティションになっています。
ここからBディスクの3つのパーティションをRAID1に参加させます。 こんな感じです。
# /bootエリア [root@XXX ~]# mdadm /dev/md125 --add /dev/sdb2 # /エリア [root@XXX ~]# mdadm /dev/md126 --add /dev/sdb3 # スワップエリア [root@XXX ~]# mdadm /dev/md127 --add /dev/sdb1
「/」エリアは巨大サイズなので数時間かかりますが、気長に待ちます。
すべての同期が終わると # cat /proc/mdstatで同期が完了したことが判ります。
同期が完了したら、新しいHDDでも起動できるようにGrub2をBootエリアに入れることを忘れずに
# 新しいハードディスクBへ GRUB 2 インストール [root@XXX ~]# grub2-install --boot-directory=/boot /dev/sdb #sdb2のように数字は入れない Installing for i386-pc platform. Installation finished. No error reported.
これで新しいBドライブ(sdb)は完了。 次はAドライブ(sda)を新しいHDDに交換して同様に繰り返します。
さて、ここまで出来ても新しい2TBのハードディスクで使用しているのは1TB分だけです。 そこで前回サイズを拡張したように
# mdadm --grow /dev/md125 --size=max mdadm: component size of /dev/md125 has been set to XXXXXXX # mdadm --grow /dev/md126 --size=max mdadm: component size of /dev/md126 has been set to YYYYYYY # mdadm --grow /dev/md127 --size=max mdadm: component size of /dev/md127 has been set to ZZZZZZZ
こんな感じで3つのパーティションを拡大し、さらに
# xfs_growfs /dev/md125 # xfs_growfs /dev/md126 # xfs_growfs /dev/md127
この3つでそれぞれの使用領域を拡大しておけばOKです。
以上の作業でそれぞれのパーティション容量の拡大ができました。