2014年7月5日土曜日

自宅 FreeBSD サーバの HDD 交換

FreeBSD 9.2 で稼働している自宅サーバのハードディスクの交換をようやく実行しました。

自宅サーバとして使っている富士通 FMV ESPRIMO D5220 です。
掃除をしていないためかなりホコリが溜まっていました。

先週、準備不足から一週間の延期をしていたものですが、昨日7月4日の深夜というか7月5日の早朝(3時45分)からデータ移行作業を開始して、7月5日の夕方(18時49分)終了しました。データの移行作業だけで、およそ16時間も掛かってしまいました。

一応段取りとしては、新しく購入した 2TB のハードディスクへ、仮設の FreeBSD サーバを設定したハードディスクを別途用意して、データの移行作業(dump & restore)をする試験を何度も繰り返して、動作させるシェルスクリプトの有効性を確認しました。データ移行作業をシェルスクリプト化するのは、作業手順の一つの間違いが大切なデータの破壊に繋がるため、人間が極力介在しない形でデータ移行作業を行うためです。そのためシェルスクリプトの検証作業はとても大切なのです。

この有効性を確認したシェルスクリプトを使って本番のデータ移行作業に取り掛かりました。しかしいきなりのハプニングが発生しました。FreeBSD サーバはすべてオリジナル・ビルドを行なっていて、それもプロセッサの特性を prescott に指定してビルドしていました。しかしデータ移行作業で使うマシンのプロセッサは northwood でした。Pentium4 の一世代だけの違いにも関わらず、なんとユーザーランドの各コマンドが動作しないのです。mount や ls ぐらいしか動作せず、絶対必要な dump や restore を始め、df や top さえも coredump を吐いて停止する始末なのです。

データ移行作業中の様子です。

これではもともと FreeBSD サーバを稼働させていたマシン上でデータ移行作業をしようと考えましたが、 SATA 端子が一個しかなく、そして手持ちの SATA RAID カード類も FreeBSD では動作が不安定な SiliconImage のチップを使用したものしかなく、いきなり行き詰ってしまいました(涙)。

そこで FreeBSD のインストール用 Live-CD を使って、この Live-CD で稼働している FreeBSD 上で二台のハードディスクのデータ移行作業をすることとしました。

ここで再びデータ移行作業用のシェルスクリプトを改造することを開始しました。現在稼働中の FreeBSD サーバのハードディスクを使って検証するのは怖いので、仮設の FreeBSD サーバのハードディスクと新設するハードディスクの間で再び動作検証をして、問題のないことを確認しました。

ここで自信を持って現在の FreeBSD サーバのハードディスクから新設するハードディスクへデータの移行作業を開始することとなりました。

順調に dump & restore を開始して、一番大きなスライス(FreeBSD のパーティションのようなもの)の /usr の部分のデータ移行作業を行なっていたとき、いきなりエラー表示を発してシェルスクリプトが停止してしまいました。大汗が出てしまいました。心臓に悪いです!

エラー表示をみるとテンポラリ・ディレクトリ(一時データを収容するディレクトリ)が無いということでした。今までは小さな容量のデータの移行作業のためにテンポラリ・ディレクトリが存在しなくても何とか dump & restore コマンドが動作していたようです。本番では大量のデータが存在するため .snap ファイル関連のデータも巨大になるようで、テンポラリ・ディレクトリが必要のようでした。

そこで急遽、テンポラリ・ディレクトリを現在の FreeBSD サーバのハードディスクの中に存在するテンポラリ用のスライス(/tmp)に設定してみました。そして再挑戦でデータ移行作業を開始しました。すると今回はテンポラリ・ディレクトリの中にテンポラリ・ファイルが作られていて、動作も順調に進みました。この再挑戦開始時刻が早朝の3時45分だったわけです。夕方の6時頃から開始して10時間ほど悪戦苦闘した結果でした。

この後は、データ移行作業が終了するのを待つだけでした。

データ移行作業中のダンプ画面です。
左から進捗状況の割合、終了予定時刻などが表示されています。

11時35分ごろデータの移行作業が50パーセントを超えて18時ごろになると90パーセント台になり、いよいよ終了かと思っていると、終了予定時刻の表示がだんだんと遅くなってようやく18時49分に作業が終了しました。

作業終了時のモニタ画面の様子です。

すぐにサーバ用のマシンへ新しいハードディスクを設置して電源を投入して動作確認をしました。ブート画面が表示されるまでのドキドキ感が半端ないものがありました。しかしブートが順調に続いて、ログイン・プロンプトが表示されて一安心しました。

すぐにデスクトップ・パソコンからブラウザで自宅サーバのウェブサイトを閲覧したり、メール・サーバへアクセスを行なって動作確認を行いました。もちろん IP 電話関係の Asterisk 周りも確認しました。すべて以前と同様に動作しているのを確認してデータ移行作業を終了することができました。

--- Dump & Restore スクリプト ---

この作業で使用したダンプ&リストアのスクリプトを以下の URL でダウンロードできます。
データはフロッピーディスクのイメージデータです。 dd コマンドでフロッピーディスクへ書き込んでください。なおこのイメージは MS-DOS フォーマットではなく、FreeBSD フォーマットとなっています。
例 dd if=dump-restore.img of=/dev/fd0

ダウンロード URL
https://drive.google.com/open?id=0B5QdaY5lu2e3eWpCVFJqWDE1aTA&authuser=0

使用方法は FreeBSD のインストールディスクからマシンを起動させた後、[Install], [Shell], [LiveCD] の動作モードの選択のうち [LiveCD] を選んでスクリプトを実行します。

具体的には以下の通りです。

[LiveCD] で起動後、root (パスワードなし)でログインします。そしてフロッピーディスクを /mnt へマウントして、/mnt へ移動した後、dump.sh スクリプトを実行します。これでコピー元のハードディスク内の各スライスのデータがコピー先のハードディスクへダンプ&リストアされます。
# mount /dev/fd0 /mnt
# cd /mnt
# ./dump.sh
このスクリプトが想定しているスライスの内容です。スクリプトでは転送先のハードディスクをスライス分割しません。事前に手動でスライスの分割をしておいてください。なおこのスクリプトは、スワップ領域として ada0s1b を使用します。
  • ada0s1a /
  • ada0s1b swap
  • ada0s1d /var
  • ada0s1e /tmp
  • ada0s1f /usr
スライスの分割方法についてはこちらを参考にしてください。特に 4KB セクタのハードディスクを使用する場合には参考になると思います。
自宅サーバのハードディスク交換の予行演習
http://near-unix.blogspot.jp/2014/06/blog-post.html

フロッピーディスクの中にはスクリプトで使用するハードディスクのマウントポイント(ディレクトリ)も含まれています。ada0 がコピー元のオリジナルのハードディスクで、ada1 がコピー先のハードディスクとなります。必ず dmesg コマンドなどでハードディスクの物理的な接続を確認してください。
  • ada0
  • ada0s1a
  • ada0s1d
  • ada0s1e
  • ada0s1f
  • ada1
  • ada1s1a
  • ada1s1d
  • ada1s1e
  • ada1s1f

注意:いきなり本番のハードディスクでスクリプトを実行しないでください。必ず別に用意した試験用ハードディスクでスクリプトの動作を確認してください。最悪、ハードディスクの内容をすべて消去してしまいます。

dump.sh スクリプトだけを参照したい読者さんは次の URL からダウンロードしてください。
dump.sh ダウンロード
https://drive.google.com/open?id=0B5QdaY5lu2e3SlgtanBxVHNSSW8&authuser=0


0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。