Raspberry Pi 2 Model Bでファイルサーバを構築してみた
本記事は、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つの設定をする例を紹介します。
- 日本語対応設定
- 192.168.0.x のセグメントからしか接続を許可しない設定
[global] unix charset = UTF-8 dos charset = CP932 hosts allow = 192.168.0.
共有フォルダ設定
ここでは以下の2つの設定をする例を紹介します。
- /usbmem というディレクトリを、shareという共有フォルダ名で公開
- 共有フォルダには誰でも書き込み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の中をさらに開き、何かファイルを書き込んでみて、書き込めたら成功です。
書き込めれば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等から書き込みテストをしましょう。
なお、私がRaspberry Piのファイルサーバ領域として使っているUSBメモリはこちらです。
小さくて大容量でイイ感じです!
Raspberry Pi 2 Model B用にUSBメモリ(SanDisk Ultra Fit 128GB)を購入してみた
ディスカッション
コメント一覧
まだ、コメントがありません