ハードディスクを大容量に交換

VineLinux4.1をインストールしたハードディスク(40GB)の使用率が90%を越えてきたので、250GBのものに換装することにした。今の環境を丸ごと新しいハードディスクに引越し、パーティション容量だけを変更した。
以下はネットのあちこちで調べた方法の切り貼りなので、より正確な元ネタがどこかのサイト・ブログに存在する。ここには自分用の備忘録としてメモしておく。
以下の情報を参考にするときは自己責任でどうぞ。

(多くの操作でroot権限が必要になるので適当にsuすること。)

ハードディスク(HDD)換装の手順は大きく分けて次の4段階になる。

  1. 現在のHDDの内容を新しいHDDにまるごとコピー
  2. ブートフロッピーを作る
  3. パーティションの編集
  4. ブートローダの設定
  1. 現在のHDDの内容を新しいHDDにまるごとコピー

新しいHDDを接続する。パーティション設定やフォーマットは不要。
現在のHDDはIDEのプライマリマスター(/dev/hda)、コピー先である新しいHDDはIDEセカンダリマスター(/dev/hdc)に接続した。
次のようにddコマンドで/dev/hdaの全内容を/dev/hdcにコピーする。

dd if=/dev/hda of=/dev/hdc conv=sync,noerror bs=65536

40GBコピーするのに約2時間かかった。

  1. ブートフロッピーを作る


多分不要な作業 ここから
最初はブートフロッピーを作らずに、直接/dev/hdcのMBRに書き込もうとしたが上手くいかなった。念のためその時の操作も記録しておく(多分関係無い)。
新しいHDDのブートローダを設定しようと

grub-install /dev/hdc

としたところエラーになった。エラーメッセージでぐぐると、/boot/grub/device.mapに/dev/hdcのエントリが無いのが原因らしい。device.mapを編集して、"(hd2) /dev/hdc" を追加した。
その後、もう一度"grub-install /dev/hdc"するとエラーは消えたが、/dev/hdcを/dev/hdaに繋ぎ替えてもエラーが出て起動できなかったので、ブートフロッピーを作ることにした。
多分不要な作業 ここまで

grubのブートフロッピーを作るには、フロッピードライブに空のフロッピーディスクを入れ、次のコマンドを入力する。

mke2fs /dev/fd0
mount -t ext2 /dev/fd0 /mnt/floppy
grub-install --root-directory=/mnt/floppy '(fd0)'
umount /mnt/floppy
  1. パーティションの編集

PartitionExpertなどの市販のツールか、KNOPPIXに含まれるqtpartedなどでパーティションを編集する。今回はPartitionExpert(Fat32NTFSLinux-swap、EXT2EXT3、ReiserFSを編集可能)を使った。
容量を増やすのが目的なので、パーティションの順番はそのままで、容量の不足しているパーティションのサイズを大きくした。(一時的にパーティションを作成したり削除したりコピーしたりして最終的に目的のパーティションのサイズを変えた。ややこしくなるので省略。)
もしパーティションの数や順番を変えた場合は、後でLinuxの/etc/fstabなどを編集する必要があると思う。

  1. ブートローダの設定

HDDを換装後の状態に繋ぎ換える。元の/dev/hdaを取り外し、/dev/hdcに繋がっている新しいHDDを/dev/hdaに繋ぐ。
さっき作ったブートフロッピーでコンピュータを起動し、grubコマンドプロンプトで/dev/hda(コピー済みの新しいHDD)にブートローダを設定する。
今回は/bootが /dev/hda1 にある。/dev/hda1 はgrubでは (hd0,0) と表現されるので

grub> root (hd0,0)
grub> setup (hd0)
grub> reboot

として/dev/hdaのMBRに書き込む。


以上で換装は終了。ブートフロッピーを取り出して正常に起動するか確認する。仮にダメだったとしても、元の/dev/hdaはそのまま残っているので、簡単に元に戻すせる。