シングルドライブ環境を RAID に変換

提供: ArchWiki
移動先: 案内検索

このガイドでは機能中のシングルドライブ環境にドライブを追加して RAID 1 構成にする方法を説明します。一時的にデータを他のドライブに保存する必要はありません。多少手順を変更することで root 以外のパーティションや他の RAID レベルの変換をすることも可能です。

ヒント: raiderAUR を使うことで2段階のコマンドでシングルディスクを RAID 環境に変換できます。

シナリオ

以下の例では /dev/sda を既存のディスクとし、システム全体が入っている /dev/sda1 パーティションだけが存在すると仮定しています。新しく追加するディスクは /dev/sdb です。

警告: 先に進む前に重要なデータはバックアップしてください。

新しいディスクの準備

ディスクのパーティション

最初に RAID アレイのミラーとして使用する新しいディスク /dev/sdb1パーティションを作成します。通常、この段階では既存のドライブのパーティションを再作成する必要はありません。RAID はディスク全体や後で作成した パーティション あるいは論理ボリュームに設定できます。

パーティションのタイプは FD に設定してください。詳しくは RAID#デバイスの準備RAID#パーティションテーブルの作成を参照。

RAID デバイスの作成

次に、縮退状態で新しいディスクだけを使って RAID アレイを作成します。後で追加するデバイスに対して missing キーワードを指定します。

# mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1
ノート: 上記のコマンドを実行したときに mdadm が "no such device /dev/sdb2" と吐く場合、再起動してコマンドを再度実行してください。

Syslinux を使用したい場合、(ブートパーティションに) --metadata=1.0 を指定してください。Syslinux 6.03 現在、mdadm 1.2 は Syslinux でサポートされていません。ソフトウェア RAID と LVM も参照。

/proc/mdstat をチェックしてアレイが正しく作成されたことを確認してください:

# Personalities : [raid1]                                                                                                                                                                       
md0 : active raid1 sdb1[1]                                                                                                                                                                    
      2930034432 blocks super 1.2 [2/1] [_U]                                                                                                                                                  
      bitmap: 22/22 pages [88KB], 65536KB chunk                                                                                                                                               
                                                                                                                                                                                              
unused devices: <none>

ファイルシステムの作成

/dev/md0 デバイスに必要なファイルシステムを作成してください。

アレイにデータをコピー

警告: ライブイメージなど他の環境からデータをコピーすることを推奨します。コピーの際にデータが変わってしまう可能性をできるだけ少なくするためです。もしくは、systemctl isolate rescue.target でシングルユーザーモードに切り替えてください。

アレイをマウント:

# mkdir /mnt/new-raid
# mount /dev/md0 /mnt/new-raid

rsync などを使って /dev/sda1 から /mnt/new-raid にデータをコピーしてください。

新しいディスクで起動

ブートローダーのアップデート

ブートローダーに新しいエントリを作成して新しいディスクの RAID アレイから環境をロードしてください。

GRUB Legacy

お好きなテキストエディタで /mnt/new-raid/boot/grub/menu.lst を開いてください。

--- SNIP ---
default   0
color light-blue/black light-cyan/blue

## fallback
fallback 1

# (0) Arch Linux
title  Arch Linux - Original Disc
root   (hd0,0)
kernel /vmlinuz-linux root=/dev/sda1

# (1) Arch Linux
title  Arch Linux - New RAID
root   (hd1,0)
#kernel /vmlinuz-linux root=/dev/sda1 ro
kernel /vmlinuz-linux root=/dev/md0 md=0,/dev/sda1,/dev/sdb1
--- SNIP ---

fallback 行を追加して Arch Linux エントリを複製し kernel 行で別の root ディレクティブを使っています。

/mnt/new-raid/boot/grub/menu.lst ファイルに "kopt" と "groot" セクションが存在する場合、以下のように更新してください:

- # kopt=root=UUID=fbafab1a-18f5-4bb9-9e66-a71c1b00977e ro
+ # kopt=root=/dev/md0 ro md=0,/dev/sda1,/dev/sdb1

## default GRUB root device
## e.g. groot=(hd0,0)
- # groot=(hd0,0)
+ # groot=(hd0,1)

詳しくは GRUB Legacy を参照してください。

GRUB

GRUB の記事を参照してください。

縮退状態のアレイからシステムを起動するには、/etc/mkinitcpio.conf の HOOKS 行に (block エントリの後に) mdadm_udev フックを追加して、initramfs を再生成して新しく grub.cfg を生成してください。/boot/grub/grub.cfg にメニューエントリを追加して起動する RAID パーティションを指定してください。デフォルトの設定生成ではプライマリのブートエントリが利用され、サブメニューに他のブートエントリが配置されます。シングルエントリの生成に戻すには /etc/default/grub に以下を追加:

GRUB_DISABLE_SUBMENU=y

その後 grub.cfg を再生成してください。そしてデバイスファイルを指定したエントリを追加してください (例: /dev/md0, /dev/md1, あるいは RAID ファイルシステムの UUID)。縮退状態のアレイから起動するエントリを追加する一番簡単な方法は "Arch Linux, with Linux linux" エントリをコピーして UUID を /dev/disk/by-uuid で確認できる ID に変更することです。

ノート: uuid のシャッフルを防ぐ別の方法は、アレイを作成してアレイにファイルをコピーした後に chroot することです。/etc/mkinitcpio.confmdadm_udev 行を追加して、initramfs を再生成してください。ブートローダーをインストールして chroot 環境の中で grub.cfg を生成してください。起動に使用するドライブを切り替えることで、簡単にアレイから起動することができます。

fstab の変更

新しいディスクの fstab を編集してデバイスを探す場所を指定する必要があります。永続的なブロックデバイスの命名を使用することを推奨します。

/mnt/new-raid/etc/fstab
/dev/md0    /    ext4     defaults   0 1

initramfs の再生成

RAID 環境に chroot

# mount --bind /sys /mnt/new-raid/sys
# mount --bind /proc /mnt/new-raid/proc
# mount --bind /dev /mnt/new-raid/dev
# chroot /mnt/new-raid/

chroot コマンドで chroot: failed to run command `/bin/zsh': No such file or directory のようなエラーが表示される場合、chroot /mnt/new-raid/ /bin/bash を使ってください。

mdadm の設定

RAID 1 に問題が発生したときにメールで警告を受け取りたい場合、/etc/mdadm.conf編集して MAILADDR 行をあなたのメールアドレスに置き換えてください。

UUID でアレイの設定を保存して起動時にシステムが /dev/md0 が見つけられるようにします。保存しなかった場合、起動時に ALERT! /dev/md0 does not exist エラーが表示されることがあります:

# mdadm --detail --scan >> /etc/mdadm.conf

initcpio のリビルド

RAID#mdadm フックを mkinitcpio.conf に追加するに従ってください。

RAID アレイにブートローダーをインストール

GRUB Legacy

GRUB を起動してください:

# grub --no-floppy

2つのパーティション (hd0,0) (1番目のディスク、1番目のパーティション) と (hd1,1) (先に追加したパーティション、2番目のドライブの2番目のパーティション) が確認できます。以下のようにパーティションが2つ表示されることを確認してください:

grub> find /boot/grub/stage1
(hd0,0)
(hd1,1)

新しいセカンドドライブをシステムの最初のディスクである (hd0) として GRUB に設定します。ディスクが故障しても、ディスクを取り外したり BIOS で起動順序を変更することでセカンドディスクから起動することができます。

grub> device (hd0) /dev/sdb

GRUB を新しいセカンドドライブの MBR にインストールします。以下のように "partition type" が "0xfd" と認識されていることを確認してください:

grub> root (hd0,1)
 Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  16 sectors are embedded. succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+16 p (hd0,1)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
 Done
grub> quit

新しい環境を確認

コンピュータを再起動して元のディスク (/dev/sda) ではなく新しい RAID ディスク (/dev/sdb) から起動することを確認してください。BIOS でデバイスの起動順序を変更する必要があるかもしれません。

新しいディスクでブートローダーがロードされたら、先に作成したシステムエントリを選択して起動してください。

mount コマンドの出力を確認することで RAID アレイから起動していることを確認できます。また、mdstat を確認してアレイに含まれているディスクを確認してください。

# mount
/dev/md0 on / type ext4 (rw)
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10]
md0 : active raid1 sdb1[1]
      40064 blocks [2/1] [_U]

unused devices: <none>

システムの起動が問題なく、上記のコマンドの出力が正しい場合、順調に縮退状態の RAID アレイで起動できています。

アレイに元のディスクを追加

元のディスクのパーティション

/dev/sdb (新しい RAID ディスク) から /dev/sda (アレイに追加するディスク) にパーティションテーブルをコピーして両方のディスクのレイアウトが同じになるようにしてください:

# sfdisk -d /dev/sdb | sfdisk /dev/sda

もしくは以下のように /dev/sdb のパーティションレイアウトをファイルに書き出して、ファイルから入力して /dev/sda をパーティショニングすることもできます:

# sfdisk -d /dev/sdb > raidinfo-partitions.sdb
# sfdisk /dev/sda < raidinfo-partitions.sdb

パーティションが同じであることを確認:

# fdisk -l
ノート: アレイにパーティションを追加するときに以下のようなエラーが表示される場合:
mdadm: /dev/sda1 not large enough to join array
ディスクをパーティションするときにカーネルから認識されているディスク容量が古いという警告メッセージが表示されていたはずです。修正するには、再起動してアレイにディスクを追加し直してください。

アレイにディスクパーティションを追加

# mdadm /dev/md0 -a /dev/sda1
mdadm: hot added /dev/sda1

RAID アレイが再構築されていることを確認:

# cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sda1[2] sdb1[1]
      2930034432 blocks super 1.2 [2/1] [_U]
      [>....................]  recovery =  0.2% (5973824/2930034432) finish=332.5min speed=146528K/sec
      bitmap: 22/22 pages [88KB], 65536KB chunk

unused devices: <none>

参照