思い立った時の記録

日々の生活で得た情報をお届け

Raspberry Pi で NAS 環境を構築する[RAID 編]

眠っていたラズパイを NAS (RAID, Samba, Git) サーバー化して活用する件。

今回はRAID1 (ミラーリング) 環境を構築してデータを保護します。

[ディスク準備]

今回はUSBメモリーを2本使用します。

ラズパイにはUSBポートが4つありますが、メモリーを挿す場所によっては干渉するので少し工夫が必要です。

本体サイズの小さいスリムなUSBメモリーは大丈夫かも知れません。

<まず最初は使用するディスクの準備から>

① USBポートには何も刺さってない状態で「df」コマンドを使用します。

pi@raspberrypi:~ $ df
ファイルシス   1K-ブロック    使用   使用可 使用% マウント位置
/dev/root         14752480 3567180 10532620   26% /
devtmpfs            439916       0   439916    0% /dev
tmpfs               473196       0   473196    0% /dev/shm
tmpfs               473196   13420   459776    3% /run
tmpfs                 5120       4     5116    1% /run/lock
tmpfs               473196       0   473196    0% /sys/fs/cgroup
/dev/mmcblk0p1      258095   49440   208656   20% /boot
tmpfs                94636       4    94632    1% /run/user/1000

USBメモリーを2本刺してから再度「df」コマンドを実行

pi@raspberrypi:~ $ df
ファイルシス   1K-ブロック    使用   使用可 使用% マウント位置
/dev/root         14752480 3567212 10532588   26% /
devtmpfs            439916       0   439916    0% /dev
tmpfs               473196       0   473196    0% /dev/shm
tmpfs               473196   13460   459736    3% /run
tmpfs                 5120       4     5116    1% /run/lock
tmpfs               473196       0   473196    0% /sys/fs/cgroup
/dev/mmcblk0p1      258095   49440   208656   20% /boot
tmpfs                94636       4    94632    1% /run/user/1000
/dev/sda1         30029472   11424 30018048    1% /media/pi/1A74-D84F
/dev/sdb1         30029472   11424 30018048    1% /media/pi/D13E-B1DF

↑「sda1」と「sdb1」を自動認識し、マウントされました。

③ 自動でマウントされたドライブを解除します。

$ umount /dev/sda1
$ umount /dev/sdb1

④ 最後にもう一度「df」で確認してドライブの準備完了。

pi@raspberrypi:~ $ df
ファイルシス   1K-ブロック    使用   使用可 使用% マウント位置
/dev/root         14752480 3625268 10474532   26% /
devtmpfs            439916       0   439916    0% /dev
tmpfs               473196       0   473196    0% /dev/shm
tmpfs               473196   13472   459724    3% /run
tmpfs                 5120       4     5116    1% /run/lock
tmpfs               473196       0   473196    0% /sys/fs/cgroup
/dev/mmcblk0p1      258095   49440   208656   20% /boot
tmpfs                94636       4    94632    1% /run/user/1000

[RAID 1 の構築]

ここからは RAID の作業になります。 使用するドライブの容量によって、かなり時間がかかる場合があります。 私の場合、32GBのUSBメモリーを使用してTotal 2時間ほどでした。

<ソフトウェアの導入>

RAIDを実現させる「mdadm」をインストールします。

sudo apt install mdadm -y

② インストールが完了したら RAID を組みます。

sudo mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sda1 /dev/sdb1
  • --create /dev/md0:作成するRAIDドライブ名 (/dev/md0)
  • --level=raid1RAIDのモード1(ミラーリング)を指定
  • --raid-devices=2RAID用のドライブ数を指定
  • 続けて使用する2つのドライブ名を指定「/dev/sda1」「/dev/sdb1」

※上記コマンド入力後、質問されたら「yes」と入力してEntar

ここから時間が掛かります!

上記コマンド入力後、裏でRAIDドライブ構成の作業が動いてます。

③ 進捗確認する

「cat /proc/mdstat」コマンドで状態を確認します。

pi@raspberrypi:~ $ cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdb1[1] sda1[0]
      30026688 blocks super 1.2 [2/2] [UU]
      [==========>..........]  resync = 53.9% (16213504/30026688) finish=18.9min speed=12134K/sec
      
unused devices: <none>

完了するまでコマンドを打ち続けて確認しましょう。

 ※32GBのUSBメモリーで約40分ほど掛かりました。

④ 完了

以下の様な表示が出来たら完了です。

pi@raspberrypi:~ $ cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sdb1[1] sda1[0]
      30026688 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

RAID 情報を取得

pi@raspberrypi:~ $ sudo mdadm --detail --scan
ARRAY /dev/md0 metadata=1.2 name=raspberrypi:0 UUID=1bfa74ea:4380fe74:b3f2e046:71c15b36

※ここで出力された情報を次の工程でつかう。

⑥ mdadm の設定ファイルを編集

sudo nano /etc/mdadm/mdadm.conf

※先程の出力結果を最後尾に追加する

⑦ catコマンドで設定内容を確認

pi@raspberrypi:~ $ cat /etc/mdadm/mdadm.conf
# mdadm.conf
#
# !NB! Run update-initramfs -u after updating this file.
# !NB! This will ensure that initramfs has an uptodate copy.
#
# Please refer to mdadm.conf(5) for information about this file.
#

# by default (built-in), scan all partitions (/proc/partitions) and all
# containers for MD superblocks. alternatively, specify devices to scan, using
# wildcards if desired.
#DEVICE partitions containers

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR root

# definitions of existing MD arrays

# This configuration was auto-generated on Sat, 10 Jul 2021 12:35:49 +0900 by mkconf

ARRAY /dev/md0 metadata=1.2 name=raspberrypi:0 UUID=1bfa74ea:4380fe74:b3f2e046:71c15b36

↑ファイルの最後尾に追加された事を確認。

⑧ initramfs 更新

先ほど追加した情報で initramfs をアップデート

update-initramfs -u

⑨ 最後に作成した RAID のドライブをフォーマットする

ext4形式でフォーマット

pi@raspberrypi:~ $ sudo mkfs -t ext4 /dev/md0
mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 7506672 4k blocks and 1876800 inodes
Filesystem UUID: a94f1466-8199-4978-97f1-31b4dd6a81ad
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000

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

以上でRAIDの準備は完了

[ディスクアレイ(RAID 1)の自動マウント]

ここまで来れば、あと一息!

最後に、ラズパイが起動したら自動でRAIDドライブをマウントして使える様にしましょう。

① 共有フォルダを作成

mkdir ~/Share

※作成場所は自分の好みで

② 起動時に自動マウントする様に設定

sudo nano /etc/fstab

※[上記結果を追加]

/dev/md0 /home/pi/Share ext4 defaults,nofail 0 0

③ 変更内容を確認

pi@raspberrypi:~ $ cat /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=c296e378-01  /boot           vfat    defaults          0       2
PARTUUID=c296e378-02  /               ext4    defaults,noatime  0       1
/dev/md0        /home/pi/Share  ext4    defaults,nofail   0       0
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

④ 全ての準備が整ったので再起動する

sudo reboot

動作確認

① 「df」コマンドで自動マウントが成功したかチェック

pi@raspberrypi:~ $ df
ファイルシス   1K-ブロック    使用   使用可 使用% マウント位置
/dev/root         14752480 3624856 10474944   26% /
devtmpfs            439916       0   439916    0% /dev
tmpfs               473196       0   473196    0% /dev/shm
tmpfs               473196   13336   459860    3% /run
tmpfs                 5120       4     5116    1% /run/lock
tmpfs               473196       0   473196    0% /sys/fs/cgroup
/dev/mmcblk0p1      258095   49440   208656   20% /boot
/dev/md0          29424356   45080 27861560    1% /home/pi/Share
tmpfs                94636       4    94632    1% /run/user/1000

無事に「/dev/md0」が自動マウントされ、位置も設定通り「/home/pi/Share」となっている。

RAIDの状態を詳細チェック

pi@raspberrypi:~ $ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sat Jul 10 12:46:02 2021
        Raid Level : raid1
        Array Size : 30026688 (28.64 GiB 30.75 GB)
     Used Dev Size : 30026688 (28.64 GiB 30.75 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

       Update Time : Sat Jul 10 14:09:12 2021
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : resync

              Name : raspberrypi:0  (local to host raspberrypi)
              UUID : 1bfa74ea:4380fe74:b3f2e046:71c15b36
            Events : 22

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

RAID の状態を定期チェック

最低限、以下のコマンドで状態をチェックしておいた方が吉。

pi@raspberrypi:~ $ cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 sda1[0] sdb1[1]
      30026688 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

※「[2/2] [UU]」の状態を定期的に確認しましょう