P-ATAからS-ATAへ

家のサーバのディスク領域が90%を超えて相当やばくなったので思い切ってHDDの容量拡大とシリアルATAへの移行を進めました。OSはCentOSで特に問題ないのですがマザーボード上のS-ATAインターフェースが古いためSATA-II対応のボードを追加してからHDDを接続します。このボードにはsil3124が乗ってるのでモジュールがロードされれば/dev/sda,sdbという感じで認識されます。
またこのサーバはソフトウェアでRAID1構成にしているので柔軟に運用できます。例えば余り意味ないんですがディスク3台でスペア無しのRAID1とかもできます。これ使って/dev/hda,hdc,sdaのパーティションを同期させていきます。

#mdadm --grow /dev/md0 --raid-disks=3
#mdadm --add /dev/md0 /dev/sda1

こんな感じでパーティションを追加すると同期が始まります。ただし上限が10MB/secになってるので100MB/secに変更します。

#echo 100000 > /proc/sys/dev/raid/speed_limit_max

同期が完了するとこんな感じになります

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[2] hdb1[1] hda1[0]
4096448 blocks [3/3] [UUU]

unused devices:


次にsdaをgrubでブートさせるにはmkinitrdでsil3124のモジュールを組み込んだイメージを作る必要があります。

/etc/modprobe.confに下記を追加
alias scsi_hostadapter sata_sil24
#mkinitrd -v -f <イメージの名前> 

そしてsdaからブートできるようにgrubmbrにインストールし、grub.confの起動メニューに追加。

#grub
GNU GRUB version 0.97 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For
the first word, TAB lists possible command
completions. Anywhere else TAB lists the possible
completions of a device/filename. ]

grub> device (hd0) /dev/sda
grub> setup --stage2=/boot/grub/stage2 (hd0) (hd0,0)
grub> quit

BIOSでsil3124のS-ATAからブートするように設定し直してリブート。無事立ち上がればOKですがstage2...とかで止まるようならsil3124のイメージが読めてないのでP-ATAから起動してmkinitrdでイメージの作り直しましょう。

S-ATA起動するようになれば更に2台目のS-ATAディスクを追加します。現状3台でミラーしてるのでP-ATAの1台をRAIDから取り除きます。

#mdadm --fail /dev/md0 /dev/hdc1
#mdadm --remove /dev/md0 /dev/hdc1
#mdadm --add /dev/md0 /sdb1

同期させたらsda同様にmbrgrubをインストールし、sda,sdb,hdaのミラー構成が完成。そして最後にhdaをRAIDから切り離します。

#mdadm --fail /dev/md0 /dev/hda1
#mdadm --remove /dev/md0 /dev/hda1
#mdadm --grow /dev/md0 --raid-disks=2

以上でP-ATAからS-ATAへの移行は終了です。ただしディスク容量増えてもパーティションの容量は増えてないのでパーティションの拡大を行います。

#mdadm --grow /dev/md0 --size=max

ここでまたresync始まるので終わったら、一度シングルユーザモードになってmd0をアンマウントした状態で

telinit 1
#resize2fs -f /dev/md0
telinit 3

面倒なのでfsckスキップさせるために-f付けて強制的に拡張させました。あと今回拡張したのが/homeなのでシングルユーザモードにしておけば通常はアンマウントしてもOKだと判断しました。
以上で移行作業終了。お疲れ様でした。