« インターネッツ | Home | PEPSI スターウォーズボトルキャップ »

[Linux]   USB接続のHDDによるソフトウェアRAID

USB接続のHDDでRAIDを組んだので備忘録です。ハードウェア構成はこんな感じです。

すでにインストールされているFedora Core 4に対してUSBで外付けHDDを2台追加してソフトウェアRAIDでミラーリングしましょうって実験です。

参考サイト: http://www.asahi-net.or.jp/~qi3m-tngw/Linux/KnowHow/HardDisk/HardDisk.htm

今回は/dev/sdaと/dev/sdbとして認識された2台のHDDにそれぞれ1パーティションづつ作成してRAID 1でミラーリング構成とし、/homeにマウントしてみました。

各HDDにfdiskでパーティションを作成します。

[root@localhost ~]# fdisk /dev/sda
このディスクのシリンダ数は 4982 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): d
Selected partition 1

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-4982, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-4982, default 4982):
Using default value 4982

コマンド (m でヘルプ): t
Selected partition 1
16進数コード (L コマンドでコードリスト表示): L

 0  空              1e  Hidden W95 FAT1 80  古い Minix      be  Solaris boot
 1  FAT12           24  NEC DOS         81  Minix / 古い Li bf  Solaris
 2  XENIX root      39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     84  OS/2 隠し C: ド c6  DRDOS/sec (FAT-
 5  拡張領域        41  PPC PReP Boot   85  Linux 拡張領域  c7  Syrinx
 6  FAT16           42  SFS             86  NTFS ボリューム da  非 FS データ
 7  HPFS/NTFS       4d  QNX4.x          87  NTFS ボリューム db  CP/M / CTOS / .
 8  AIX             4e  QNX4.x 2nd part 88  Linux plaintext de  Dell ユーティリ
 9  AIX ブート可能  4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt
 a  OS/2 ブートマネ 50  OnTrack DM      93  Amoeba          e1  DOS access
 b  W95 FAT32       51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O
 c  W95 FAT32 (LBA) 52  CP/M            9f  BSD/OS          e4  SpeedStor
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad ハ eb  BeOS fs
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  EFI GPT
10  OPUS            55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
11  隠し FAT12      56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC
12  Compaq 診断     5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor
14  隠し FAT16 <32M 61  SpeedStor       a9  NetBSD          f4  SpeedStor
16  隠し FAT16      63  GNU HURD または ab  Darwin boot     f2  DOS セカンダリ
17  隠し HPFS/NTFS  64  Novell Netware  b7  BSDI fs         fd  Linux raid 自動
18  AST SmartSleep  65  Novell Netware  b8  BSDI スワップ   fe  LANstep
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  隠し Boot Wizar ff  BBT
1c  Hidden W95 FAT3 75  PC/IX
16進数コード (L コマンドでコードリスト表示): fd
領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。

注意点はパーティションタイプにfd Linux raid 自動を選択することです。
同様に/dev/sdbもfdiskします。

RAIDパーティションとして/dev/sda1と/dev/sdb1のRAID 1で構成された/dev/md0を作成します。

[root@localhost ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
mdadm: array /dev/md0 started.

これでRAIDパーティションの作成がバックエンドで開始されます。
パーティションの作成が終了するまで待つ必要があります。確認は

[root@localhost ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
      40017792 blocks [2/2] [UU]
      [===>.................]  resync = 16.7% (6694016/40017792) finish=42.5min speed=13064K/sec
unused devices: <none>

もしくは

[root@localhost ~]# mdadm --misc --detail /dev/md0
/dev/md0:
        Version : 00.90.01
  Creation Time : Thu Jun 30 14:05:47 2005
     Raid Level : raid1
     Array Size : 40017792 (38.16 GiB 40.98 GB)
    Device Size : 40017792 (38.16 GiB 40.98 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Thu Jun 30 14:05:47 2005
          State : clean, resyncing
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

 Rebuild Status : 0% complete

           UUID : 11d20617:9b0715c9:0c03f699:7052efdc
         Events : 0.43

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1

/dev/md0のパーティション作成が終わったらフォーマットします。

[root@pdc ~]# mkfs.ext3 -c /dev/md0
mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
5003712 inodes, 10004448 blocks
500222 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=12582912
306 block groups
32768 blocks per group, 32768 fragments per group
16352 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624

Checking for bad blocks (read-only test): done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

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

とりあえずマウントしてみます。

[root@localhost ~]# mkdir /mnt/raid
[root@localhost ~]# mount -t ext3 /dev/md0 /mnt/raid
[root@localhost ~]# ls -la /mnt/raid
[root@localhost ~]# umount /mnt/raid
合計 28
drwxr-xr-x  3 root root  4096  6月 30 15:29 .
drwxr-xr-x  3 root root  4096  6月 30 15:33 ..
drwx------  2 root root 16384  6月 30 15:29 lost+found

設定ファイルを作成します。このファイルはmdadm --asemble --scanコマンドが利用します。

[root@localhost ~]# echo 'DEVICE partitions' > /etc/mdadm.conf
[root@localhost ~]# mdadm --detail --scan >> /etc/mdadm.conf

このままだとdevices=以降が折り返しになってしまっているので整形します。

[root@localhost ~]# vi /etc/mdadm.conf
DEVICE partitions
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=11d20617:9b0715c9:0c03f699:7052efdc devices=/dev/sda1,/dev/sdb1

次に起動時に/dev/md0を/homeにマウントしたいところですがUSBのRAID場合、USB HDDの認識より先にRAIDの準備がされてしまうために/etc/fstabに書いてもエラーで起動が止まってしまいます。

起動するたびにコンソールからマウントするのは忍びないので以下のコマンドを/etc/rc.localに書いておきます。

[root@localhost ~]# vi /etc/rc.local
mdadm --assemble --scan
mount -t ext3 /dev/md0 /home

rc.localは起動時の最後に実行されるのでこれでOKかと思われます。

再起動したらちゃんとマウントされてるかチェックします。

[root@localhost ~]# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                      18727372   1371896  16388820   8% /
/dev/hda1               101086      9951     85916  11% /boot
/dev/shm                123852         0    123852   0% /dev/shm
/dev/md0              39389688     81984  37306816   1% /home
[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90.01
  Creation Time : Thu Jun 30 14:05:47 2005
     Raid Level : raid1
     Array Size : 40017792 (38.16 GiB 40.98 GB)
    Device Size : 40017792 (38.16 GiB 40.98 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Thu Jun 30 16:39:54 2005
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : 11d20617:9b0715c9:0c03f699:7052efdc
         Events : 0.76

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
ちなみにパフォーマンスは
[root@pdc ~]# hdparm -ft /dev/md0

/dev/md0:
 Timing buffered disk reads:   86 MB in  3.07 seconds =  28.04 MB/sec

こんなもんですかね。

Trackbacks:

このエントリーのトラックバックURL:

コメントを投稿