LinuxのHDD交換作業メモ

 古いコンパクトなデスクトップマシンを「遊び用サーバ」として使っていたのですが、ほら、よくあるじゃないですか。「遊びのつもりが、本気になっちゃう」ってこと。誰ですか?オトナな世界の想像をしたのは。私、子どもらのケンカをイメージしてたんですけど。


 ともかく、その「自称サーバ」のHDDが窮屈になってきました。 40GB のディスクを、ダマシダマシ容量を空けて使ってきたのですが、常に残り容量数百メガバイトという状態に、すっかり疲れてしまい、HDDを交換することに。古いマシンなので IDE ですが、結構手に入りにくいんですね、今は。 売られているのは SATA がメイン。


 ということで、40GB, 5400rpm から、320GB, 7200rpm へと交換しました。「ディスクの中身を丸ごとコピーして、容量を拡大する」という方針で行いました(OS再インストールしてひとつひとつ設定するのではなく。
 以下、その作業メモです。作業にあたっては特に以下のページをとても参考にさせていただきました。特にキムラデービーの @meijik さんには 5月のとある日記で「続きはまた後日」のまま「続き」が見つからないと連絡したら、速攻で続きを書いてくださって、どうもありがとうございました。


http://blog.kimuradb.com/?day=20100531
http://www.nipr.ac.jp/~kazue/linuxformat.html
http://www.yuknak.com/main/useful/HowtoHDD/diskcopy/diskcopy1.html

作業の概要

 おおざっぱな手順として以下のようになります。


(1)新しいHDDを買ってきた
(2)EASEUS DiskCopy というツールをダウンロードしブータブルなCDに焼いた
(3)CD付、新旧2台のHDDを接続可能なマシンにHDDを接続して DiskCopy CDで起動、コピー
(4)新HDDで起動
(5)fdiskで、HDDの未使用領域に 拡張領域として LVS エリアを作成
(6)pvcreate/vgextend/lvextend のコマンドを使用して ボリウムグループに LVSを追加
(7)resize2fs で ファイルシステムとして認識させた


 以下各手順についてなるべく簡潔(当社比)に。

(1)新しいHDDを買ってきた

 手に入りやすいHDDがほとんど SATA になっている中、IDEのHDDを見つけました。SATAに比べて割高感がありますが、仕方ないですね。 320GB で 8,957円でした。(もっと安いのもありますが「当日届く」amazonで注文したので)

(2)EASEUS DiskCopy というツールをダウンロードしブータブルなCDに焼いた

 以下のURLから DiskCopy というツールをダウンロードして、(zipファイルなので展開後出てきた)iso ファイルを CD に焼きます。
 http://www.easeus.com/disk-copy/download.htm
 

(3)CD付、新旧2台のHDDを接続可能なマシンにHDDを接続して DiskCopy CDで起動、コピー

 新旧2台のHDDとCD-ROMドライブをマシンに接続して、(2)で焼いた DiskCopy のCDでブートします。
 ソースとディスティネーションのディスクの指定を間違わないように注意しながら、画面の指示通りに進めます。
 コピー時間は 40GB(画面の表示による)で1時間5分かかりました。

(4)新HDDで起動

 旧HDDを外して、新HDDをマスタにして(私はここで不要なのでCDも外しちゃいましたが)、起動。
 ちゃんと立ち上がるかドキドキしますが、無事起動しました。

(5)fdiskで、HDDの未使用領域に 拡張領域として LVS エリアを作成

 root で fdisk コマンドを実行。対話型のツールなので、以下のコマンドを駆使。
 p: 現在の設定状況の表示
 n: 領域を作成


 ディスク自体は 320GB あるけど、hda1, hda2 で 約40GBしか使われていないことがわかります。

Disk /dev/hda: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14        4865    38973690   8e  Linux LVM


 hda2 は LVM なので、新しい領域を作って、それをこのボリウムグループに追加していく作戦をとります(special thanks @meijik さん!)

 n(領域作成) → e(拡張領域) → [enter](デフォルトの開始シリンダ) → [enter](デフォルトの終了シリンダ)

 の操作で、残り全領域をまず 拡張領域として確保します(hda3 になります)

デバイス Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14        4865    38973690   8e  Linux LVM
/dev/hda3            4866       38913   273490560    5  拡張領域

 この拡張領域の中に、論理領域を作って行きます。全部まとめても良いかもしれませんが、ここは @meijik さんの「取り扱いしやすいように分けておく」に従って 40GB ごとに分けることにしました。こまんどはこんな感じ。

 n(領域作成) → l(論理領域) → [enter](デフォルトの開始シリンダ) → +40960M(終了シリンダとして40GBぶんを指定)

これを繰り返していって(最後の領域は全シリンダを使うように指定)、確認すると、こうなりました。

デバイス Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14        4865    38973690   8e  Linux LVM
/dev/hda3            4866       38913   273490560    5  拡張領域
/dev/hda5            4866        9846    40009851   83  Linux
/dev/hda6            9847       14827    40009851   83  Linux
/dev/hda7           14828       19808    40009851   83  Linux
/dev/hda8           19809       24789    40009851   83  Linux
/dev/hda9           24790       29770    40009851   83  Linux
/dev/hda10          29771       34751    40009851   83  Linux
/dev/hda11          34752       38913    33431233+  83  Linux

 通常の Linux 領域になっているので(83)、これを LVM (8e) に変更します。コマンドは:

 t (タイプID変更) → 5(領域番号) → 8e (Linux LVM)
 t (タイプID変更) → 6(領域番号) → 8e (Linux LVM)
 t (タイプID変更) → 7(領域番号) → 8e (Linux LVM)
    :        :       :

デバイス Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14        4865    38973690   8e  Linux LVM
/dev/hda3            4866       38913   273490560    5  拡張領域
/dev/hda5            4866        9846    40009851   8e  Linux LVM
/dev/hda6            9847       14827    40009851   8e  Linux LVM
/dev/hda7           14828       19808    40009851   8e  Linux LVM
/dev/hda8           19809       24789    40009851   8e  Linux LVM
/dev/hda9           24790       29770    40009851   8e  Linux LVM
/dev/hda10          29771       34751    40009851   8e  Linux LVM
/dev/hda11          34752       38913    33431233+  8e  Linux LVM

 すべて上記のとおり変更されたことを確認したら

 w (書き込み)

 コマンドで、書き込みします。以下のメッセージが出るのでサーバを再起動します。

領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。

警告: 領域テーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。
カーネルはまだ古いテーブルを使っています。
新しいテーブルは次回リブート時に使えるようになるでしょう。
ディスクを同期させます。

 気になったので一応、再起動後にも fdisk の p コマンドで、設定が上記のものと変わっていないことを確認しました。OK。

(6)pvcreate/vgextend/lvextend のコマンドを使用して ボリウムグループに LVSを追加

 この段階では df で見ても空き領域は増えていません。ボリウムグループに追加する必要があります。

# pvcreate -v /dev/hda5
    Set up physical volume for "/dev/hda5" with 80019702 available sectors
    Zeroing start of device /dev/hda5
  Physical volume "/dev/hda5" successfully created

# vgextend VolGroup00 /dev/hda5
  Volume group "VolGroup00" successfully extended

 現在の状況を見てみる。

# vgdisplay
  --- Volume group ---
  VG Name               VolGroup00
   : 
  Alloc PE / Size       1189 / 37.16 GB
  Free  PE / Size       1220 / 38.12 GB ←★ここのサイズを次の作業で使う
# lvextend -l +1220 /dev/VolGroup00/LogVol00  ←★ここに先ほどのサイズを指定する
  Extending logical volume LogVol00 to 74.53 GB
  Logical volume LogVol00 successfully resized

(7)resize2fs で ファイルシステムとして認識させた

 そしてここまでで指定したボリウムの変更を、ファイルシステムとして認識させます。

# resize2fs /dev/VolGroup00/LogVol00 
 resize2fs 1.39 (29-May-2006)
 Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required
 Performing an on-line resize of /dev/VolGroup00/LogVol00 to 19218432 (4k) blocks.
 The filesystem on /dev/VolGroup00/LogVol00 is now 19218432 blocks long.

 処理には数分かかりましたが、終了後 df を見てみると、領域増えました\(^O^)/


 同様に他の領域も投入。 こんな感じでまとめて lextend/resize2fs できます。

pvcreate -v /dev/hda7
pvcreate -v /dev/hda8
pvcreate -v /dev/hda9
vgextend VolGroup00 /dev/hda7
vgextend VolGroup00 /dev/hda8
vgextend VolGroup00 /dev/hda9
vgdisplay                  ←★ここで見たサイズを
lvextend -l +3660 /dev/VolGroup00/LogVol00 ←★ここで指定する
resize2fs /dev/VolGroup00/LogVol00


 最終結果。

# df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                      287G   32G  241G  12% /    ←★ここっ!ここっ!!
/dev/hda1              99M   36M   59M  38% /boot
tmpfs                 502M     0  502M   0% /dev/shm

 いやぁ、嬉しい嬉しい。成金ってこういう気分なんだろうなぁと思いました(笑)。
 一気にディスク領域を手に入れて、どうやって使って良いか困っちゃって、不思議な使い方をしちゃう、みたいな(笑)。


 その後 MySQLInnoDB 領域を 2GB * 10個追加して起動したのですが、、、貧弱なマシンのこと。起動完了まで(領域作成まで)22分もかかりました orz。


番外編:ハマったところ

 この「自称サーバー」。実はCDドライブがついていないので、HDDをはずして他のマシンで作業しようと考えていました。 そのマシンをあけてびっくり。SATA。。。orz
 IDEな他のマシンを用意してみるも、こんどは何故かCDドライブが開かない。。  更に古いマシンからCDドライブだけ抜いて接続してみると、マシンが貧弱なせいかツールがうまく起動しない(途中で止まる)。役たたずめ!
 CDドライブを最初の「自称サーバー」に付ければ良いと気づき作業を開始するも、もともとがコンパクトなデスクトップマシンなので、電源コネクタが不足することが判明。。 そんなわけで「役立たず」なマシンには電源係になってもらい、なんとか作業を続行できたのでした(実はIDEケーブルもコネクタの少ない短いやつだったので他から引っこ抜いてきた)。 今回の作業の中で一番たいへんだったのがこの「接続する」ところだったなー。みなさんも「CDドライブ」「IDE等のケーブルコネクタの数」「電源コネクタの数」は事前にしっかりとご確認ください。
 そんな作業だったので、ケーブルとか置き方とかがひどい状態に(+_+)。 一時的なので許して!!と自分で言い訳をしながら(笑)。



.