SanDisk Ultra Fit 128GB 4個でRAID5を構築してみた

2019年11月5日

先日、Raspberry Pi 2 Model B 用に、SanDisk Ultra Fit 128GBを購入しまして、ファイルサーバやミュージックサーバのデータ領域として使っているところですが、

参考記事:
Raspberry Pi 2 Model B用にUSBメモリ(SanDisk Ultra Fit 128GB)を購入してみた
Raspberry Pi 2 Model Bでファイルサーバを構築してみた

エンジニアとしては、「冗長化されていないけど大丈夫?」と心配になるわけです。

一度心配になると、日に日に心配度が増していって精神衛生上良くないので、SanDisk Ultra Fit 128GBを追加購入し、USBメモリ4台(4個)でRAID5を構築し、心の平穏を取り戻すことにしました。

ultra-fit-128gb-x4

Raspbian jessieでのRAID5構築手順などなどは以下のとおり。(debian というか、Linux全般のソフトウェアRAID構築手順です)

ポート数について

SanDisk Ultra Fit 128GBの4台構成のため、USBのポートが4つ必要です。

Raspberry Pi 2 Model Bには標準でUSB2.0ポートが4つ搭載されていますが、私は既にUSBポートにS/PDIF出力BEHRINGER UCA202を装着したりしており、ポート数が足りません。

従いまして、USBハブを使うことでポート数を増やすことにしました。

ultra-fit-128gb-x4

消費電力について

今のところ、バスパワーで何とかなっているようですが、「ものすごく負荷がかかったりしたら、さすがに無理なんじゃないだろうか?」と思っています。

従いまして、USBハブはセルフパワー対応のものを選定しています。自宅にあったBuffaloのBSH4A02シリーズというものを使いましたが、こちらの商品は既に販売終了していますので、もしも面白半分で真似をされる方がおられましたら、念のために、セルフパワーのUSBハブを選定された方が良いと思います。

RAID5の構築

SanDisk Ultra Fit 128GBを4つ装着したUSBハブをRaspberry Pi 2 Model Bに接続します。

fdisk -l コマンドで、認識されたデバイス名を確認します。

# fdisk -l

★1台目がsda
Disk /dev/sda: 115.7 GiB, 124218507264 bytes, 242614272 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device Boot Start End Sectors Size Id Type
/dev/sda1 32 242614271 242614240 115.7G 7 HPFS/NTFS/exFAT

★2台目がsdb
Disk /dev/sdb: 115.7 GiB, 124218507264 bytes, 242614272 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device Boot Start End Sectors Size Id Type
/dev/sdb1 32 242614271 242614240 115.7G 7 HPFS/NTFS/exFAT

★3台目がsdc
Disk /dev/sdc: 115.7 GiB, 124218507264 bytes, 242614272 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device Boot Start End Sectors Size Id Type
/dev/sdc1 32 242614271 242614240 115.7G 7 HPFS/NTFS/exFAT

★4台目がsdd
Disk /dev/sdd: 115.7 GiB, 124218507264 bytes, 242614272 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device Boot Start End Sectors Size Id Type
/dev/sdd1 32 242614271 242614240 115.7G 7 HPFS/NTFS/exFAT

RAID用ファイルシステムの作成

認識された4つのデバイス

  • /dev/sda
  • /dev/sdb
  • /dev/sdc
  • /dev/sdd

に対して、fdisk `デバイス名`コマンドで既存のファイルシステムの削除と、RAID用ファイルシステムの作成を実施します。

以下は/dev/sdaに対しての実施例ですので、sda,sdb,sdc,sddの4回実施してください。

# fdisk /dev/sda★sdaに対して実施

Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d★既存のファイルシステムを削除する。deleteの意味のdを入力
Selected partition 1
Partition 1 has been deleted.

Command (m for help): n★新しいファイルシステムを作成する。newの意味のnを入力
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p★primaryパーティションを作るので、pを入力
Partition number (1-4, default 1): ★何も入力せずEnterでOK
First sector (32-242614272, default 32):★何も入力せずEnterでOK
Last sector, +sectors or +size{K,M,G,T,P} (32-242614272, default 242614272):★何も入力せずEnterでOK

Created a new partition 1 of type 'Linux' and of size 115.7 GiB.

Command (m for help): t★RAID用ファイルシステムタイプを選ぶので typeの意味のtを入力
Selected partition 1
Hex code (type L to list all codes): fd★RAID用ファイルシステムはfdと入力すればOK
Changed type of partition 'Linux' to 'Linux raid autodetect'.

Command (m for help): p★できた内容を表示する。printの意味のpを入力
Disk /dev/sda: 115.7 GiB, 124218507264 bytes, 242614272 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device Boot Start End Sectors Size Id Type
/dev/sda1 32 242614271 242614240 115.7G fd Linux raid autodetect★作成されたRAID用のファイルシステム

Command (m for help): w★最後に保存する。writeの意味のwを入力
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

確認

ls -l コマンドで、/dev/sd*ファイルを確認します。

最後に1が付いたものができていればOKです。

# ls -l /dev/sd*
brw-rw---- 1 root disk 8, 0 1月 29 23:18 /dev/sda
brw-rw---- 1 root disk 8, 1 1月 29 23:18 /dev/sda1★
brw-rw---- 1 root disk 8, 0 1月 29 23:23 /dev/sdb
brw-rw---- 1 root disk 8, 1 1月 29 23:23 /dev/sdb1★
brw-rw---- 1 root disk 8, 0 1月 29 23:33 /dev/sdc
brw-rw---- 1 root disk 8, 1 1月 29 23:33 /dev/sdc1★
brw-rw---- 1 root disk 8, 0 1月 29 23:38 /dev/sdd
brw-rw---- 1 root disk 8, 1 1月 29 23:38 /dev/sdd1★

RAID用のパッケージをインストール

mdadmというパッケージをインストールします。

# apt-get install mdadm

インストール途中で設定画面が表示されてしまった場合は、キーボードのESCキーを押してキャンセルします。

余談ですが、mdadmコマンドは、過去にNASのRAID5ダブルフェイルが発生した際に大変お世話になりました。
参考:RAID5のHDD2本障害が発生したのでデータ復旧を試みた

RAID構築コマンドを実行

mdadmコマンドでRAIDを構築します。

# mdadm -C /dev/md0 -l 5 -n 4 /dev/sd[abcd]1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

パラメータの意味

  • -C `RAIDのデバイス名`:RAIDアレイ名を指定する。マルチプルデバイスなので、mdです。
  • -l `数字`:RAIDのレベルを指定。今回はRAID5です。
  • -n `数字`:RAIDのデバイス数を指定。今回は4台です。
  • /dev/sd[abcd]1:/dev/sda1,sdb1,sdc1,sdd1を使うという意味です。

進捗確認

cat /proc/mdstat にてRAIDアレイ構築の進捗が確認できます。

# cat /proc/mdstat 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd1[4] sdc1[2] sdb1[1] sda1[0]
363747840 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UUU_]
[>....................] recovery = 0.3% (449024/121249280) finish=107.6min speed=18709K/sec
bitmap: 0/1 pages [0KB], 65536KB chunk

unused devices: <none>

完了するまで待たずに次の作業に移れますので、気にせず進めましょう。

ちなみに、構築が完了すると、以下のようになります。

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[4] sdc1[2] sdb1[1] sda1[0]
363747840 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]★全部UになればOK
unused devices: <none>

ファイルシステムの作成

作成したRAIDアレイ(/dev/md0)にファイルシステムを作成します。

ext4で作成します。

# mkfs -t ext4 /dev/md0

少し時間がかかりますが、気長に待ちましょう。

起動時に自動でRAIDが組まれる設定

以下のコマンドで設定を入れておきましょう。

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

起動時の自動マウント設定

/etc/fstabに追記しておきましょう。

/dev/md0 を/usbmemというディレクトにマウントする場合の例です。

# vi /etc/fstab

/dev/md0 /usbmem ext4 defaults,noatime,uid=65534,gid=65534 0 0

私の場合は、ローカルIPアドレスからのアクセスは誰でも書込み可能なファイルサーバ(samba)での共有フォルダとして、/usbmem にマウントして使うため、uidとgidの指定をしています。

参考:Raspberry Pi 2 Model Bでファイルサーバを構築してみた

動作確認

Raspbian jessie を再起動して、マウントされるか確認しましょう。

# reboot

マウント確認

df -h コマンドで確認してみましょう。

きちんとマウントされていますね。

# df -h

 Filesystem Size Used Avail Use% Mounted on
 /dev/md0 342G 67M 325G 1% /usbmem

RAID5構築後のサイズは342GB程度のようです。

ファイルサーバ領域のディスク(USBメモリ)が冗長化された、省エネ静音サーバとして、これだけの容量があれば、まぁまあ上出来でしょう。
SSD複数台でRAID組むより安くて低消費電力と思いますよ。

おススメですよ!

おまけ:RAID状態確認

以下のコマンドで、作成したRAIDアレイの構成・状態・容量を確認できます。

# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Jan 29 23:47:21 2016
Raid Level : raid5
Array Size : 363747840 (346.90 GiB 372.48 GB)
Used Dev Size : 121249280 (115.63 GiB 124.16 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Fri Jan 29 23:50:06 2016
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Layout : left-symmetric
Chunk Size : 512K

Name : raspberry:0 (local to host raspberry)
UUID : 59bf2bc1:bb5bc233:a2b258f1:bcf9c835
Events : 20

Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sda1
1 8 33 1 active sync /dev/sdb1
2 8 49 2 active sync /dev/sdc1
4 8 65 3 active sync /dev/sdd1

今回もお疲れさまでした。