LinuxサーバのHDD交換

ということで、LinuxサーバのHDDを新たに購入したモノと交換した。その作業覚え書き。
用意したもの。

  • 新しいHDD(今回はWesternDigital WD1200BEVE-00WZT0 / 120GB P-ATA)
  • 2.5inch用USB-HDDケース(今回は手持ちの玄人志向の安い奴)

作業対象はノートPCでIDEポートは1つしかない。デスクトップに接続して作業するのも面倒だしそもそも変換ケーブルがない。ということでUSB-HDDケースを活用してやることにした。

新HDDのフォーマット

いきなりノートPCのHDDを新HDDに交換し、DebianのインストールCDでブート→パーティション作成→フォーマットを行った。
USB-HDDケースに新HDDを入れて作業すればいいのだが、このノートPCはUSB1.1ポートしかなくフォーマットが壊滅的に遅い。時間も惜しいのでIDE直付けで行った。USB2.0ポートを持ったマシンなら我慢出来る速度が出るかもしれないので、その時はfdiskやcfdiskでパーティション設定、mkfs.ext3やmkswap等でフォーマットを行えばよい。またブートパーティションにフラグ指定を忘れないこと。
その他特に注意する点もないが、パーティション構成は旧HDDと合わせておいたほうが後々楽だと思う。

旧HDDの内容を新HDDへコピー

旧HDDをノートPCに戻しブート。新HDDはUSB-HDDケースにいれてUSB接続する。例によってSCSIデバイスとして認識されるので、/dev/sdaが出来る。以前のHDDは/のsda1とswapのsda5の2パーティション構成だったので新HDDでも同じに合わせてある(いやもう面倒なので)。
HDDの丸コピーにはdump / restoreコマンドを使用する(入ってなければ随時apt-getで入れる)。まずLinux自身をシングルモードに変更する(余計なプロセスを動かさない)。
# init 1; exit
次にsda1を/mntへマウント。
# mount /dev/sda1 /mnt
次に/mntへ移動してHDDコピー実行。
# cd /mnt
# dump 0uaf - / | restore xf -

しばらく放置しておくとコピー完了。ownerの設定を聞かれるのでyesにしておく。
最後にsda1をアンマウントして終了。
# cd /
# umount /mnt

GRUBブートFDの作成

このままでは新HDDのMBRにGRUBがインストールされていないのでブート出来ない。grub-installでsdaに書き込めればいいのだがエラーで出来なかった(USB-HDDだとダメ?)。しょうがないのでFDブートしてやることに。起動FDは、
# grub-floppy /dev/fd0
として作成可能。上手くいかなければGRUBのstage1とstage2をddで書き込んでもいい。
# dd if=stage1 of=/dev/fd0
# dd if=stage2 of=/dev/fd0 seek=1

FDブートからHDD上のLinuxカーネルを起動

新HDDをノートPCに装着し、上記FDでブート。GRUBが起動するので、
# root (hd0,0)
# kernel /boot/vmlinuz-2.6.18-6-686 root=/dev/hda1 ro
# initrd /boot/initrd.img-2.6.18-6-686
# boot

としてブート。各パラメータは環境依存。grubのmenu.lstを参考にするとよい。

GRUBをMBRへインストール

無事HDDから起動したら、
# grub-install /dev/hda
としてMBRにGRUBを書き込んでおしまい。

HDDの緒元

$ sudo hdparm -tT /dev/hda
/dev/hda:
Timing cached reads: 288 MB in 2.00 seconds = 143.88 MB/sec
Timing buffered disk reads: 84 MB in 3.04 seconds = 27.63 MB/sec

当然ながら以前の6.4GHDDよりべらぼうに速い。その前に使ってた60GBのに比べてもかなり速い。
$ sudo hdparm -i /dev/hda
/dev/hda:
Model=WDC WD1200BEVE-00WZT0, FwRev=01.01A01, SerialNo=WD-WXEX********
Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=50
BuffType=unknown, BuffSize=8192kB, MaxMultSect=16, MultSect=off
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=234441648
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 *udma2 udma3 udma4 udma5 udma3 udma4 udma5
AdvancedPM=yes: unknown setting WriteCache=enabled
Drive conforms to: Unspecified: ATA/ATAPI-1 ATA/ATAPI-2 ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5 ATA/ATAPI-6 ATA/ATAPI-7

元々440BXというudma2までしか対応していないマシンなのでこれ以上はどうしようもなし。