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

2019年11月5日

本記事は、Raspberry Pi 3に対応しています。

Raspbian jessie でSambaを使ってファイルサーバ(NAS)を構築しました。

ファイルサーバのデータ格納領域は以下の記事で書いたSanDisk Ultra Fit 128GBを使います。

Raspberry Pi 2 Model B用にUSBメモリ(SanDisk Ultra Fit 128GB)を購入してみた

構築方法は以下のとおり

必要パッケージのインストール

ファイルサーバ(samba)構築に必要なパッケージをインストールします。

$ sudo apt-get install samba samba-conmmon samba-common-bin

サービスの管理に便利なchkconfigコマンドもインストールしておきます。

$ sudo apt-get install chkconfig

sambaの設定

sambaの設定ファイルに設定を記載します。

$ sudo vi /etc/samba/smb.conf

記載する内容の例は以下のとおりです。

グローバル設定

ここでは以下の2つの設定をする例を紹介します。

  1. 日本語対応設定
  2. 192.168.0.x のセグメントからしか接続を許可しない設定
[global]
unix charset = UTF-8
dos charset = CP932
hosts allow = 192.168.0.

共有フォルダ設定

ここでは以下の2つの設定をする例を紹介します。

  1. /usbmem というディレクトリを、shareという共有フォルダ名で公開
  2. 共有フォルダには誰でも書き込みOK
[share]
path = /usbmem
public = yes
writable = yes
guest ok = yes
create mode 0777

以上の設定で、192.168.0.xのセグメントからの接続なら誰でも書き込みOKという設定が完了です。

sambaサービスの起動

起動

以下のコマンドで起動します。

$ sudo service samba-ad-dc start

稼動状態確認

$ sudo service samba-ad-dc status
● samba-ad-dc.service - LSB: start Samba daemons for the AD DC
Loaded: loaded (/etc/init.d/samba-ad-dc)
Active: active (exited) since 水 2016-01-20 00:47:31 JST; 18s ago

参考

以下のコマンドでは起動できないようです。上記のようにsamba-ad-dcというサービスを起動する必要があります。

$ sudo service samba start
Failed to start samba.service: Unit samba.service is masked.

● samba.service
Loaded: masked (/dev/null)
Active: inactive (dead)

自動起動設定

OS起動時にsambaが自動起動するように設定します。

$ sudo chkconfig samba-ad-dc on

別デバイスからの動作確認

Windowsから接続してみましょう

Raspberry Pi (Raspbian jessie)のIPアドレスが192.168.0.20の場合、以下にアクセスしてみます。

\\192.168.0.20\

shareという共有フォルダが見えれば成功です。
samba_01

shareの中をさらに開き、何かファイルを書き込んでみて、書き込めたら成功です。
samba_write_test

書き込めればOK。書き込めない場合は、ディレクトリのアクセス権をきちんと設定する必要があります。書き込めない場合の手順は以下のとおりです。

書き込めない場合

公開するディレクトリの権限をnobody:nogroupにする必要があります。

公開ディレクトリがUSBメモリ等のマウントディレクトリではない場合

Raspbian上に作成した、/share という公開ディレクトリの権限を変える場合を例にします。

$ ls- l /
drwxr-xr-x   1 root:root 4096 1月  1  1970 share

$ sudo chown nobody:nogroup /share 

$ ls- l / 
drwxr-xr-x   1 nobody nogroup 4096 1月  1  1970 share

sambaサービスを再起動します。

$ sudo service samba-ad-dc restart

これで書き込めるようになったハズです。

USBメモリ等をマウントして公開している場合

この場合は少しテクニックがいります。

まずsambaサービスが公開ディレクトリを掴んでいるため、sambaサービスを停止します。

$ sudo service samba-ad-dc stop

/usbmemというディレクトリにUSBメモリをマウントしている場合を例にします。

少し解説ですが、マウントする前のディレクトリの権限が以下のようになっていても、マウントするとroot:rootの権限になるため、マウントオプションを付けてマウントする必要があります。

$ ls -l /
drwxr-xr-x   1 nobody nogroup 131072  1月 20 00:32 usbmem

試しに、nobody:nogroupの権限のディレクトリに、USBメモリ(dev/sda1)をマウントしてみると、

$ sudo mount /dev/sda1 /usbmem 

$ ls -l /
drwxr-xr-x   1 root root 131072  1月  1  1970 usbmem

root:rootの権限になりました。

この状態で、さらに、マウントされている状態で権限を変えようとすると、以下のように拒否されます。

$ sudo chown nobody:nogroup usbmem
chown: `usbmem' の所有者を変更中: 許可されていない操作です

と、このようにうまくいきません。

実は、マウントした状態の権限を変更するには、マウントオプションに権限を追加する必要があります。(解説終わりです。長くなってすみません)

 

正しいやり方はここからです。まず、nobodyのuidとnogroupのgidを確認します。

$ cat /etc/passwd |grep nobody
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin

uidは65534でした。

$ cat /etc/group |grep nogroup
nogroup:x:65534:

gidは65534でした。

この結果をもとに、/etc/fstabにuidとgidを固定するマウントオプションを追記します。

$ sudo vi /etc/fstab
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
/dev/sda1       /usbmem         exfat   defaults,noatime,uid=65534,gid=65534   0       0★ここの行です。

追記が終わったら、rebootコマンドで再起動し、再度ディレクトリのアクセス権を確認します。(再起動で、先ほど停止したsambaサービスも起動してきます)

以下のようになっていれば成功です。

$ ls -l /
drwxr-xr-x   1 nobody nogroup 131072  1月  1  1970 usbmem

後は、再度Windows等から書き込みテストをしましょう。

書き込めるハズです。
samba_write_test

なお、私がRaspberry Piのファイルサーバ領域として使っているUSBメモリはこちらです。
小さくて大容量でイイ感じです!
Raspberry Pi 2 Model B用にUSBメモリ(SanDisk Ultra Fit 128GB)を購入してみた