Raspberry PI に USBメモリー×2 で RAID-1(前半)

 ゆる〜いファイルサーバーが必要になって、ちょうどヤマハ NVR500 のある場所だったもんで、そいつに備わってる ファイル共有機能 (NVR500限定機能) で茶を濁そうと思ったのですが

  • Windows 7 からだとファイル/フォルダの削除・リネームができない
  • Windows XP だと削除・リネームは一見できるように見えたが、漢字のフォルダは削除できない(半角にリネームしてからだと削除できた) (追記)普通に成功する XP マシンもあった
  • Windows 10 だと、AllowInsecureGuestAuth=1(後述)しても 0x80004005 でアクセスできない

みたいな、致命的な問題が発覚。
 ユーザーによるアクセス制限(簡易ACL)や同期(簡易ミラーリング)も搭載してて、「ゆる〜いファイルサーバー」には適任だったと思ったのですが・・・
 後継の NVR510 には同機能が搭載されていないことから、きっと「やる気なし」なのだろうと思い、さっさと見切りをつけて、定番の ラズパイ+Samba で立てることにしました。


 ノースピンドルということで耐久性を期待したいところなのですが、microSD ってそこまで寿命が長くないような気もしないでもなく・・・
 とりあえずデータさえ保全できればいいから、 microSD なんて消耗品として毎年交換すりゃあ、って割り切ってみます。


※ググった情報の集大成みたいなもんで、もっぱら自分用の備忘録
※対象ラズパイは3未満(USBブートできない前提)


■構成


 まずは普通どおりラズパイを作りますが、前半は Raspberry PI + Raspbian + Unbound 自分メモ と全く一緒です。
 が、一昨年くらいのイメージから SSH がデフォルトで無効になってしまったみたいで、キーボードやモニターを一度も繋げずにセットアップ完了させるということは不可能になってしまいました。


 パッケージ類を新しくします。

$ sudo rpi-update
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo reboot

 SSH を有効にします。

$ sudo touch /boot/ssh
$ sudo nano /etc/ssh/sshd_config

 以下のように追加することで、192.168.1.* の中のマシンからのみ ssh 接続を受け付けるようになります。

PasswordAuthentication no

Match Address 192.168.1.*
    PasswordAuthentication  yes

 いちおサーバーなので IP アドレスを固定します。

$ sudo nano /etc/dhcpcd.conf

 末尾に以下を追加

interface eth0
static ip_address=192.168.1.2/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

 いったん再起動

$ sudo reboot

 いよいよ本題へ。
 USBフラッシュメモリーを USBポート に挿して以下

$ sudo fdisk /dev/sda
 d
 n
 t fd
 w
$ sudo fdisk /dev/sdb
 d
 n
 t fd
 w

 途中の d やら n やらは、たぶんやると分かるはず。
(ないところはデフォルトで進める)


 パーティション確保が済んだらボリュームを作りますが、このボリュームを RAID-1(mdadm を使ったソフトRAID)にします。

$ sudo apt-get install mdadm
$ sudo mdadm --create /dev/md1 --verbose --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
$ sudo mdadm --detail --scan >> mdadm.conf
$ sudo mkfs.ext4 /dev/md1
$ sudo mkdir /mnt/usb
$ sudo mount /dev/md1 /mnt/usb

 /mnt/usb が RAID-1 のボリュームです。


 このままだと起動の度に手動でマウント操作しないといけないので、自動マウントさせます。

$ sudo nano /etc/fstab
/dev/md1 /mnt/usb ext4 defaults 0 0

の1行を最後に追加したってください。


 これで単体として完成でして、こいつをファイル共有します。
(/mnt/usb の配下の shared を共有ポイントにする場合)

$ sudo mkdir /mnt/usb/shared
$ sudo chmod 777 /mnt/usb/shared

$ sudo apt-get install samba
$ sudo nano /etc/samba/smb.conf

 samba を入れて設定ファイル(smb.conf)の末尾に以下を追加

[shared]
path = /mnt/usb/shared
public = yes
writable = yes
guest ok = yes

 この例はガラガラのアクセスし放題な設定です。
 きちんとユーザー作ったりユーザーごとに権限付けたりする場合はググってやってください。


 最後に ext4 でジャーナル有効になっているので、少しでも microSD の寿命が延びることを祈願して、ジャーナル無効にしときます。

$ sudo tune2fs -O ^has_journal /dev/mmcblk0p2

http://dl.ftrans.etr.jp/?65908b2b4cb646639540714e4eacbfd35ee09bea.jpg
 以上です。


 さてこれを設置するのですが、万一にもフリーズしたときに備えて、遠隔で再起動かけられるようにしたいですね。
 ちょうどヤマハルーターの近傍に設置しますので、ヤマハルーターで電化製品を ON/OFF する の技が使えます。


 ちょっと繰り返しにはなりますが、後編では接続のハード周りを記事にしようと思います。


(追記)
 匿名ファイルサーバーにしたとき、Windows 10 のバージョンによっては接続できません。 (参考資料)


 レジストリを弄って匿名接続を許可にする必要があります。


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters
AllowInsecureGuestAuth:(DWORD)1


(追記)2018/09/03
 ハード周りの続編を書く前に、USBブートが可能なラズパイ3B+向けに、USBメモリー(USB-HDD)を使って microSD なしに RAID-1 構築する方法を書きました。
 /boot も RAID-1 ではないものの冗長化させてます。
 詳しくは こちら をどうぞ。