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からブートできるようにgrubをmbrにインストールし、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同様にmbrにgrubをインストールし、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だと判断しました。
以上で移行作業終了。お疲れ様でした。