Soft Raid

更新日 2017-04-30 (日) 19:48:48

Fileシステムの表示

$ df -T
Filesystem    Type   1K-ブロック  使用        空き 使用% マウント位置
/dev/md0      ext3   305401344  28399312 261488472  10% /
none         tmpfs     1032396         0   1032396   0% /dev/shm
$  df -T
ファイルシス  タイプ   1K-ブロック    使用 使用可    使用% マウント位置
rootfs      rootfs    48379628   4626788  41295300  11% /
/dev/root     ext4    48379628   4626788  41295300  11% /
/dev         tmpfs      474244       464    473780   1% /dev
none         tmpfs      474244         0    474244   0% /dev/shm

RaidとGhost

Vine5.xでhddがSATAインターフェイスの/dev/sdaをGhostキャストサーバで吸い上げ、/dev/sdbに書き戻したら、sda,sdb(SATA1側に接続)したら、問題なく1HDDで起動したが、2台接続した場合はどの組み合わせもKernelパニックで起動しなかった。

そこで、ディユプリケートしたHDDをWindowsでFormatして接続したら問題なく起動。 やはりミラーでもなにかちがうのかな?

DISK構成

raid0では/boot領域がRaid構成だと起動しないがRaid1(Mirror)だとOK。
インストール直後にraid1はraidを構築し始めるので/proc/mdstatをモニターして Raidが完成する様子を見る。

注)このままではhda側に障害が出たとき、hdb側にMBRがないので立ち上がらない。そこで事前にhdaのMBRをhdbのMBRのコピーをしておく。
また、一度Raidのメンバーから外すと再起動後は再度メンバーとしてADDする必要がある。

raidの構成

hda
<================================ RAID ================>
--------------------------------------------------------
|/boot(500MB) |/ (18GB)                    |swap (1GB) |
--------------------------------------------------------
    hda1           md0(hda2)                 md1(hda3)
hdb
<================================ RAID ================>
--------------------------------------------------------
|/boot(500MB)|/ (18GB)                    |swap (1GB) |
--------------------------------------------------------
    hdb1           md0(hdb2)                 md1(hdb3)

ドライブの交換

破壊されたディスクの交換を行う
新しいHDDを接続し、残ったHDDと同じようにfdiskでパーテションを作成する
容量が多くなればよさそう
Formatの必要かも

md0 : active raid1 hdb2[2](F) hda2[0]
      19350208 blocks [2/1] [U_]

のように不良HDDには(F)がつく。

/sbin/mdadm --fail /dev/md0 /dev/hdb2

で切り離す必要があるかも

元DISK(20GB)

Disk /dev/hda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

 デバイス Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          64      514048+  83  Linux
/dev/hda2              65        2473    19350292+  fd  Linux raid 自動検出
/dev/hda3            2474        2610     1100452+  fd  Linux raid 自動検出

新追加DISK(24GB)

Disk /dev/hdb: 25.7 GB, 25769803776 bytes
15 heads, 63 sectors/track, 53261 cylinders
Units = シリンダ数 of 945 * 512 = 483840 bytes

 デバイス Boot      Start         End      Blocks   Id  System
/dev/hdb1               1        1138      537673+  83  Linux
/dev/hdb2            1139       44542    20508390   83  Linux
/dev/hdb3           44543       53261     4119727+  83  Linux
コマンド (m でヘルプ): t 
領域番号 (1-4): 2
16進数コード (L コマンドでコードリスト表示): fd 
領域のシステムタイプを 2 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): p

Disk /dev/hdb: 25.7 GB, 25769803776 bytes
15 heads, 63 sectors/track, 53261 cylinders
Units = シリンダ数 of 945 * 512 = 483840 bytes
 デバイス Boot      Start         End      Blocks   Id  System
/dev/hdb1               1        1138      537673+  83  Linux
/dev/hdb2            1139       44542    20508390   fd  Linux raid 自動検出
/dev/hdb3           44543       53261     4119727+  fd  Linux raid 自動検出

Raidのメンバーに追加

Vine4.x (Kernel2.6)から再構築のためRaidメンバーに参加させるにはmdadmを使用する raidhotaddコマンドから、mdadmになった。

hdb2,hdb3をメンバーに参加させる。その後hdb1にddコマンドで/bootをhda1からコピー。

# /sbin/mdadm /dev/md0 -a /dev/hdb2
mdadm: re-added /dev/hdb2
# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hdb3[1] hda3[0]
      1100352 blocks [2/2] [UU]

md0 : active raid1 hdb2[2] hda2[0]
      19350208 blocks [2/1] [U_]
      [>....................]  recovery =  0.4% (78208/19350208) finish=24.6min  speed=13034K/sec

unused devices: <none>

Raidの状況表示

# /sbin/mdadm -Q -D /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Sep 18 13:34:15 2007
     Raid Level : raid0   <==ストライピング(raid0)
     Array Size : 235512320 (224.60 GiB 241.16 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Sep 18 13:34:15 2007
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

     Chunk Size : 256K

           UUID : a845c29d:8bcdbcb7:7ca2d75c:ddbed9f3
         Events : 0.1

    Number   Major   Minor   RaidDevice State
       0       3        2        0      active sync   /dev/hda2
       1       3       66        1      active sync   /dev/hdb2

擬似的にHDDの不良をセットする

# /sbin/mdadm --fail /dev/md1 /dev/hda2
mdadm: set /dev/hda2 faulty in /dev/md1

これで、hda2がRaidから切り離される

明示的にHDDの切り離し

# sbin/mdadm --remove /dev/md1 /dev/hda2
mdadm: hot removed /dev/hda2

これで、hda2が切り離される。しかしながら、正常に動作しているときは、

mdadm: hot remove failed for /dev/hdb3: Device or resource busy

となり切り離せないので、--failで一度疑似不良にするとはずせる。

その他

Raidから物理DISKを外し、一度シングルで立ち上げると、再度DISKを実装してもRaid構成にならない。その時は再度mdadmで再度addする必要がある。このときシングルの試験をhda->hdbの順序で確認した場合はhdbがアクティブになりhdaをコマンドでraidに追加した。

ddを使用してパーテションのコピーのしかた

bootパーティションがミラーでない場合のコピー

Raid1ではbootもミラー化できるので以下の作業は不要だが参考までに記述しておく。
再起動後/bootの内容をhdb1にコピーする

dd if=/dev/hda1 of=/dev/hdb1 bs=512 (*hd[ab]1=bootパーティション)

# dd if=/dev/hda1 of=/dev/hdb1 bs=512
1028097+0 records in
1028097+0 records out
526385664 bytes (526 MB) copied, 9.2453 seconds, 56.9 MB/s

mountして確認

# mount /dev/hdb1 /mnt
# ls /mnt
System.map@                grub/                      lost+found/
System.map-2.6.16-0vl68    initrd-2.6.16-0vl68.img    vmlinuz@
System.map-2.6.16-0vl76.3  initrd-2.6.16-0vl76.3.img  vmlinuz-2.6.16-0vl68
System.map.old@            initrd.img@                vmlinuz-2.6.16-0vl76.3
config-2.6.16-0vl68        initrd.old.img@            vmlinuz.old@
config-2.6.16-0vl76.3      kernel.h

kernelのUpdateしたときはコピーしておく必要がある

MBRのコピー

hdaが破壊されるとhdbにはMBRが書き込まれていないので起動できない。そこで先にhdaのMBRをhdbにコピーしておきhdaが破壊されたときはhdbにあるHDDをマスターにして起動できるようにしておく。

MBRというファイルにhdaのMBRをコピー
dd if=/dev/hda of=./MBR bs=512 count=1

ファイルMBRをhdbのMBRにコピー
dd if=./MBR of=/dev/hdb bs=446 count=1 <==bsが512でなく446であることに注意

# dd if=/dev/hda of=./MBR bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.005724 seconds, 89.4 kB/s

# dd if=./MBR of=/dev/hdb bs=446 count=1
1+0 records in
1+0 records out
446 bytes (446 B) copied, 0.000928 seconds, 481 kB/s

GRUBの場合はGURBのインストールも必要かも

Vine6.0(ext4でシステムを構成)でシステム起動時はデュプリケートされていない?ような感じもあった。
SoftRaidでGURBをインストールする必要がある場合は以下のように行う(Vine5.xまでは必要なかった [ext3は問題ないかも未確認])

通常にRaidで起動して以下のようにする。
インストールするデバイス(sdb)をhd0に指定して、その最初のパーティション(hd0,0)をrootに指定して、その後そのデバイスにgrubをインストールするようだ

# grub
Probing devices to guess BIOS drives. This may take a long time.


    GNU GRUB  version 0.97-4vl6  (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/sdb  <=hd0に sdbを割り振る
device (hd0) /dev/sdb
grub> root (hd0,0)  <= rootを指定
root (hd0,0)
 Filesystem type is ext2fs, partition type 0xfd
----以下がCentOS6の場合-----
GRUBをインストールをする
grub> setup  (hd0)
setup  (hd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... yes
 Checking if "/grub/stage2" exists... yes
 Checking if "/grub/e2fs_stage1_5" exists... yes
 Running "embed /grub/e2fs_stage1_5 (hd0)"...  27 sectors are embedded.
succeeded
 Running "install /grub/stage1 (hd0) (hd0)1+27 p \
(hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.

コマンドが > setup (hd0)かも下ではうまくいかない?
下のコマンドはVine、上のsetupコマンドは CentOS6で動作した ここ

----Vineのときは下のようにしたような気が・・・・
grub> install /boot/grub/stage1 (hd0) /boot/grub/stage2 p /boot/grub/grub.conf
install /boot/grub/stage1 (hd0) /boot/grub/stage2 p /boot/grub/grub.conf
grub> quit
quit
#

これでsdbからも起動するようになった

ext4 format

# mkfs.ext4 /dev/sdb1
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3186688 inodes, 12723472 blocks
636173 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
389 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 28 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

SWAPのパーティション領域の作成(参考:Raidとは関係ない)

  • フォーマット
# mke2fs -j /dev/sda2
  • SWAPの作成
# mkswap /dev/sda2

スワップ空間バージョン1を設定します、サイズ = 2271316 KiB ラベルはありません, UUID=299df47d-b361-4c91-9725-1d98d75d06cb

参考

Raidの作成(Kernel2.4)


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-04-30 (日) 19:48:48 (300d)