用件

  • Ubuntu 6.06 LTS (kernel は raid 対応らしく特に設定なし)
  • dell SC430 (簡単にとりつけられるHDDスペースが二個)
  • 既存の 80GB シングルを 250GB RAID1 にする。
  • ハードディスクは最大で2個までしかつなげない (わけじゃないけどケーブルがない)
  • ソフトウェア RAID 化し、どちらも起動可能にする
  • ハードディスクの実容量が若干異なることを考え、末尾いくらかそれぞれを swap にする (swap は冗長化しない)。

ステップ

  1. 新しいハードディスク 250GB をとりつける
  2. パーティションを切り、RAID1 を一個 missing で構築する
  3. grub をインストールする
  4. grub の kernel 起動オプションを変更しとく
  5. 既存ファイルのコピー
  6. 古いハードディスクをとりはずし、新しいハードディスクに入れ替える。
  7. 同じようにパーティションをきり、RAID1 に参加させる。

最終的に思ったポイント:実際ファイルコピーするのは最後にしよう。grub インストール前にファイルをコピーしてしまってハマった。


まず BIOS (起動時に F2 で入る) で新しく接続したドライブを認識するようにする。SATA の on/off

sudo fdisk /dev/sdb
> p
Disk /dev/sdb: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

> n
> p
> 1 #パーテーション番号
> 1 #最初のシリンダ
> +249500M
> t # タイプ変更
> fd # Linux raid auto detect
> a # ブートフラグ

> n
> p
> 2
> [RET]
> [RET]
> t
> 2
> 82

> p
Disk /dev/sdb: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1       30334   243657823+  fd  Linux raid 自動検出
/dev/sdb2           30335       30401      538177+  82  Linux swap / Solaris
> w

とりあえず swap を有効にしてみる

$ sudo mkswap /dev/sdb2
Setting up swapspace version 1, size = 225545396 kB
no label, UUID=269dcbba-b161-4002-9a4d-29fe964d61b6

$ sudo swapon /dev/sdb2
$ swapon -s

RAID1 を一つのデバイスを missing にして作成する

sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing 
mdadm: array /dev/md0 started.

ファイルシステム作成 ext3

sudo mkfs.ext3 /dev/md0  

grub install

sudo grub
grub> device (hd0) /dev/sdb
grub> root (hd0,0)
grub> install /boot/grub/stage1 d (hd0) /boot/grub/stage2 0x8000 (hd0,0)/boot/grub/menu.lst
grub> quit

vim /etc/fstab で md0 をマウントするように

/dev/md0       /               ext3    defaults,errors=remount-ro 0       1
proc            /proc           proc    defaults        0       0
/dev/sdb2       none            swap    sw              0       0
/dev/hda        /media/cdrom0   udf,iso9660 user,noauto     0       0

vim /boot/grub/menu.list の上の方に追加。md0 を root とするように

title       Ubuntu, kernel 2.6.15-27-386 (raid)
root        (hd0,0)
kernel      /boot/vmlinuz-2.6.15-27-386 root=/dev/md0 ro quiet splash
initrd      /boot/initrd.img-2.6.15-27-386
savedefault
boot

作ったファイルシステムに現行システムをコピー

cd /
sudo mkdir new-disk
sudo mount -t ext3 /dev/md0 /new-disk 
sudo telinit 1
# syslog とか全部止めたりしてファイルシステムの使用を最小限に
# ここからは ssh できないのでちまちまうってく
# パーティションは一つしかないため簡単に
cd /
cp -ax / /new-disk
mkdir /new-disk/proc

シャットダウンして付け替える。ここから sda は新しい 250G のディスク

/dev/sda にたいして、fdisk して、mdadm -a で RAID に追加

sudo fdisk
# 上と同じ
sudo mdadm /dev/md0 -a /dev/sda1
cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sda1[2] sdb1[0]
      243657728 blocks [2/1] [U_]
      [>....................]  recovery =  2.8% (6982720/243657728) finish=70.8min speed=55698K/sec

unused devices: <none>

こっちのディスクにも grub をインストール

sudo grub
grub> device (hd0) /dev/sda
grub> root (hd0,0)
grub> install /boot/grub/stage1 d (hd0) /boot/grub/stage2 0x8000 (hd0,0)/boot/grub/menu.lst
grub> quit

設定を保存して、メールの送信先を設定しとく

mdadm --detail --scan >> /etc/mdadm/mdadm.conf
dpkg-reconfigure mdadm

で終わり。のはず。実際構築したときはいろいろハマって起動しなかったりした。grub のインストール手順がおかしかったのと、grub が渡す kernel 引数が悪かったせい。

それと頭悪くて fdisk の桁を一個間違えて RAID missing 構築までやってしまった。やりなおすために

sudo umount /new-disk
sudo mdadm --misc --stop /dev/md0
sudo swapoff /dev/sdb2

とかやって、fdisk しなおした。


root ファイルシステムがないとか言われて起動しなかったときは、ずっと待ってると BusyBox shell に落ちるのでそこでなおしたりした。 これは kernel 引数が RAID デバイスになっておらず /dev/sda を参照していて、sda は RAID に参加するまえでミラーリングされていなかったで、ファイルシステムが存在せずエラー、とかいうやつ。

mount /dev/md0 /tmp; chroot tmp

fstab の修正をして、/boot/grub/menu.list を修正した。

けど、menu.list のほうが、title がかぶっていてはダメらしく、めんどいので grub 中に edit して起動して、起動してから書き換えた。


そんなわけで RAID1 になりました。一度つけて外して resync の様子とか見たりしたり。RAID になったからって、別に表面所何かが変わるわけではなく、ハードディスク変えて容量が増えただけという感じ。

まだ慣れてないので、「バックアップとらないとなぁ」と不安になってしまったりする。「そういえば RAID 組んだんだからそんなに気にしなくても」とか打ち消したりとかなんとかとかとかとか。とかばっかりだなねる

▲ この日のエントリ