Raspberry Pi3をsambaファイルサーバ化し、Linux/Mac/Winでファイル共有(外付けSSDを使用)
前書き
家庭内にLinux/Mac/Windows環境が存在する場合、各PCから写真などを閲覧する事が手間な場合があります。クラウドが一つの解決策ですが、写真はサイズが大きいため、クラウドを無料使用できる範囲を超えます(あと、クラウドは同期が遅い)。そこで、各PCでファイルを共有するため、Rapsberry Pi3をsambaファイルサーバ化します。sambaはUNIX系OS上でWindows互換のファイルサーバ・プリントサーバを立ち上げるOSSです。
本記事では、Raspberry Pi3上にファイルサーバを立ち上げるまでの手順4点を示します。ただし、Raspberry Pi3にRaspbian(OS)をインストール済み、かつネットワーク接続設定済みの状態と仮定しています。
- sambaパッケージのインストール
- Raspberry Pi3を固定IP化
- 外部ストレージの自動マウント設定
- sambaの設定・立ち上げ
環境
項目 | 機器/Version | 用途・備考 |
---|---|---|
ボード | Raspberry Pi3 Model B | samba(Version 4.5.16-Debian)が動作する環境 |
OS用ストレージ | MicroSDカード(Silicon Power、16GB、Class10) | Class4以上かつ16GB以上の容量が必要。Raspbianが導入されている前提。 |
ファイルサーバ用ストレージ | Transcend 外付けSSD 128GB USB3.0 MLC TS128GESD400K | 用途に合わせて、サイズ・種類(HDD or SSD)を決め、変更して良い。 |
モニタ | ASUS VZ249H |
Raspberry Pi3用。SSHでRaspberry Pi3に接続する場合、およびファイルサーバ化の手順が終了した場合、不要。 |
電源(ターゲット) | microUSB – USBケーブル、iPad mini2用のUSB充電器 | 特になし |
映像/音声 | HDMIケーブル(PS4付属品) | ファイルサーバ化の手順が終了した場合、不要。 |
入出力装置 | キーボード、マウス(USB接続) | ファイルサーバ化の手順が終了した場合、不要。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ neofetch .',;:cc;,'. .,;::c:,,. nao@nao ,ooolcloooo: 'oooooccloo: ------- .looooc;;:ol :oc;;:ooooo' OS: Raspbian GNU/Linux 9.8 (stretch) armv7l ;oooooo: ,ooooooc. Model: Raspberry Pi 3 Model B Rev 1.2 .,:;'. .;:;'. Kernel: 4.14.98-v7+ .... ..'''''. .... Uptime: 1 hour, 6 minutes .''. ..'''''. ..''. Packages: 1580 .. ..... ..... .. Shell: bash 4.4.12 . .''''''' .''''''. . CPU: ARMv7 rev 4 (v7l) (4) @ 1.2GHz .'' .'''''''' .'''''''. ''. Memory: 72MB / 926MB ''' ''''''' .'''''' ''' .' ........... ... .'. ████████████████████████ .... ''''''''. .''. '''''. ''''''''. .''''' '''''. .'''''. .'''''. ..''. . .''.. .''''''' ...... |
sambaパッケージのインストール
exfat-fuse、cifs-utilsは、Windows側のファイルシステムをmountする場合に備えて、インストールします。autofsは、外部ストレージを自動でmount/unmoutするために導入します。
1 2 3 4 5 6 |
$ sudo apt update $ sudo apt upgrade $ sudo apt install samba exfat-fuse cifs-utils autofs $ samba -V (注釈):今回使用するsambaのVersion Version 4.5.16-Debian |
Raspberry Pi3を固定IP化
各PCはRaspberry PiのIPアドレスに対してアクセスする事もあるため、固定IP化します。IPの固定化方法は、以下の記事を参照してください。固定後のIPアドレスは、”192.168.10.108″と仮定します。
Raspberry Piに固定IPを割り当てる方法
外部ストレージの自動マウント設定
今回の例では、各PCはネットワーク経由で、外部ストレージ(SSD)にアクセスします。そのため、外部ストレージをmountし、適切なファイルシステムに変更する必要があります。今回は、OS起動時にmountを手動で行う手間を省くため、外部ストレージのUUID(一意な識別子)を用いて自動mountします。自動mountする場合は、外部ストレージ接続順で変動するPATH(例:/dev/sdb)より、UUID(固定値)を用いた方が好ましいです。
まず、外部ストレージをRaspberry Pi3にUSB接続します。dmesgで判別できない場合は、”sudo fdisk -l”でもストレージ情報が確認できます。
1 2 3 4 5 6 7 8 9 10 11 |
$ sudo dmesg | tail (注釈):外部ストレージをUSB接続後、dmesgで直近のブロックデバイスを確認(今回は、sdb) [ 2049.947935] usb-storage 1-1.2:1.0: USB Mass Storage device detected [ 2049.950957] scsi host1: usb-storage 1-1.2:1.0 [ 2050.966300] scsi 1:0:0:0: Direct-Access StoreJet TS128GESD400K 0 PQ: 0 ANSI: 6 [ 2050.967154] sd 1:0:0:0: Attached scsi generic sg0 type 0 [ 2050.971090] sd 1:0:0:0: [sdb] 250069680 512-byte logical blocks: (128 GB/119 GiB) [ 2050.971524] sd 1:0:0:0: [sdb] Write Protect is off [ 2050.971536] sd 1:0:0:0: [sdb] Mode Sense: 43 00 00 00 [ 2050.971960] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 2050.976316] sdb: sdb1 [ 2050.978609] sd 1:0:0:0: [sdb] Attached SCSI disk |
次に、外部ストレージ(/dev/sdb)のファイルシステムを消去し、exfat形式にフォーマットします。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ sudo wipefs -a /dev/sdb (注釈):ファイルシステムからパーティション情報を消去 $ sudo fdisk /dev/sdb (注釈):パーティションの作成 (注釈):次の順で実行 n:パーティションの作成 ⇒ 以降の選択肢は全て[Enter] p:パーティションの表示 ⇒ /dev/sdb1にType=Linux のパーティションが表示されればOK w:書き込み(設定を反映) q:終了 $ sudo mkfs.exfat /dev/sdb1 (注釈):exfatファイルシステムを作成 |
最後に、自動mount設定をautofsによって実現します。自動mountは/etc/fstabを用いても実現できます。しかし、autofsの方がアクセス要求があった場合のみmountを行うため、システム負荷が低いです。また、fstabの場合、設定を失敗した場合(外部ストレージをmount出来なかった場合)、Raspberry Pi3が起動失敗し、Emergency Modeに移行します。その後の復旧作業が面倒なため、autofsを用います。
外部ストレージ(/dev/sdb)のUUIDを調べた後、”/etc/auto.master “および”/etc/auto.misc “に以下を追記します。
1 2 3 4 5 6 7 8 9 |
$ sudo blkid /dev/sdb1 (注釈):UUIDの確認 /dev/sdb1: LABEL="NFS" UUID="5B2B-6E3C" TYPE="exfat" PARTUUID="6b70f462-01" $ sudo vi /etc/auto.master [以下、/etc/auto.master内] # 以下を追記。 # マウントポイント マウント対処を記載したファイル名 オプション /mnt /etc/auto.misc |
1 2 3 4 5 6 |
$ sudo vi /etc/auto.misc [以下、/etc/auto.misc内] # 追記項目 # マウントポイント オプション マウント対象 ssd -fstype=exfat-fuse,rw,umask=000 :/dev/disk/by-uuid/5B2B-6E3C |
sambaの設定・立ち上げ
smb.confを編集し、ネットワークに公開するディレクトリの設定を行います。Raspberry Pi上にnaoユーザが存在すると仮定し、以下の設定ファイルを記載しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$ sudo vi /etc/samba/smb.conf [以下、/etc/samba/smb.conf内] # 追記項目は以下の通り。 # 外部PCから見えるディレクトリ名 [pi] # 自由記入 comment = Raspberry pi # 外部公開するディレクトリ path = /mnt/ssd # guest okの別名。接続時、パスワードが要求されない。 public = yes # 読み込みのみかどうか read only = no # ネットワークに表示するかどうか browsable = yes # Raspberry Pi3上のユーザ名(ファイル操作は、このユーザの権限で実施) force user = nao |
上記の設定後、testparmコマンドでsmb.confの構文エラーチェックを行います。問題がなければsamba(および関連デーモン)を自動起動するように設定し、Raspberry Pi3を再起動します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# smb.confの構文チェックを行う。 $ testparm rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Processing section "[homes]" Processing section "[printers]" Processing section "[print$]" Processing section "[samba]" Loaded services file OK. (注釈) この表示が出ればOK。 (注釈) 省略 # sambaに関わるデーモンを有効化 $ sudo systemctl enable smbd $ sudo systemctl enable nmbd # 再起動 $ sudo reboot |
sambaアクセス権を設定する場合
sambaアクセス時にユーザパスワード認証を行いたい場合は、以下のように設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ sudo vi /etc/samba/smb.conf [以下、/etc/samba/smb.conf内] # 以下のように設定されているかどうかを確認する。 [global] # sambaアクセス時にユーザ名とパスワードの入力を求める設定 security = user # その他の設定項目は省略 # 外部PCから見えるディレクトリ名 [pi] # アクセス許可するユーザ名 valid users = nao # その他の設定項目は省略 |
次に、pdbeditコマンドを使って、Sambaユーザを登録します。登録するSambaユーザ名は、Raspberry Pi(Linux)のシステム上に存在し、かつsambaアクセスを許可したいユーザ名(smb.confのvalid usersに記載したユーザ名)にする必要があります。
今回の例では、naoユーザを新規作成します。
1 |
$ sudo pdbedit -a nao |
以上が終了した後、Raspberry Piを再起動すれば設定が反映されます。
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。