Raspberry Piで快適コンピューターライフ(NAS構築編)

#はじめに
Raspberry Piって面白そうだけれど買っても何に使ったら良いのかわからない…
そんな方もいると思うので、Raspberry Piでこんなものを作ったら便利だよということを
紹介しつつ、構築過程の備忘録として記事を投稿しています。
今回はNAS(Network Attached Storage)の構築方法を紹介してゆきたいと思います。

#NASって?
NAS(Network Attached Storage)はネットワーク上で共有できるストレージのことです。
Louter等で構築されたネットワーク上でネットワークに繋がる機器(PCでもスマホでもプリンターでもテレビでも)であれば、NAS上にデータを保存したり、保存したデータの編集・実行etcができたりで共有できるわけです。
もう少し詳しい説明は以下のサイトを参照して頂くと良いと思います。

- [ネットワークHDD（NAS）とは？](http://www.iodata.jp/product/nas/info/landisk/nas.htm)

#環境
- Raspberry Pi 3 Model B
- [BUFFALO USB3.0 外付けハードディスク PC/家電対応 2TB HD-LC2.0U3/N](http://buffalo.jp/product/hdd/external/hd-lcu3/)
- 作業用PC:Windows7
- Raspberry Pi OS:Raspbian Jessie with PIXEL
- LANへはRaspberry Pi 3 内蔵の無線接続
- Raspberry PiへはCygwin Version2.8.2-1にOpenSSHを導入してSSH接続

Raspberry Piに外付けHDDをUSB接続してNASを構築しています。
Raspberry PiだけでもNASは構築できますが、せっかくだからそれなりの容量があると嬉しいなということで外付けHDDを使用しています。
外付けHDDは何でも良いと思いますが、今回の外付けHDDを使用する前に家に転がっていたHDDをHDDケースに入れたもので利用しようとしたら、Raspberry Piと相性が悪かったらしく、うまくHDDを認識してくれませんでした。
外付けHDDは何でも良いと言いましたが、Raspberry Piとの相性を考えて選ぶことをおすすめします。

#参考サイト
今回の設定は以下の投稿を参考にしています。
ここの説明だけではわからないよという方は以下の投稿も参考にして頂くと良いと思います。

- [RaspberryPi2でMacとWindows両対応のNASを構築する](http://qiita.com/rkonno/items/54b2e4b8770c8b0b2bcd)

#外付けHDDのフォーマット
まずは外付けHDDをフォーマットしましょう。
フォーマットの形式はいくつかありますが、私は新しめで汎用性が高いものに魅かれる傾向があるのでexFATを選択しています。
フォーマット形式って何?という方やフォーマット形式の特徴が知りたいという方は以下のサイトを参考にしてみてください。
以下のサイトは次のフォーマット作業の流れについても解説してくれているので、そちらの点でも参考になると思います。

- [外付けHDDのフォーマット形式はexFATでいいと思う（FAT16/FAT32/NTFSと比較）](https://jjourney.net/sss/hdd-format-format)

それではフォーマットの手順を見てゆきましょう。
Windowsでの手順を見てゆきます。Macでの手順を知りたい方は最初に挙げた「[RaspberryPi2でMacとWindows両対応のNASを構築する](http://qiita.com/rkonno/items/54b2e4b8770c8b0b2bcd)」の投稿を参照してみてください。

※手順で載せているスクリーンショットは今回使用している外付けHDDを
　フォーマットした時のものではありませんが、同じ手順で再現して問題ないことを
　確認しているのでお許しください…

**1. 外付けHDDを作業PCに接続**

**2. 「Windowsメニュー」 → 「コンピューター」を右クリック → 「管理」を選択**
![NAS1](https://cl.ly/0u250H1J0D3W/NAS1.png)


**3. 既に外付けHDDに設定されているボリューム(フォーマット)の削除**
**「ディスクの管理」→今回フォーマット設定したいディスク(ボリューム)を右クリック**
**→「ボリュームの削除」**
![NAS2](https://cl.ly/1R2a422e0J10/NAS2.png)

**4. 「はい」を選択**
![NAS3](https://cl.ly/1b2s1G161m0U/NAS3.png)

**5. 今回フォーマット設定したいディスクを右クリック→「新しいシンプルボリューム」**
![NAS4](https://cl.ly/214010291Q1f/NAS4.png)

**6. 「次へ」を選択**
![NAS5](https://cl.ly/0B0N2Z3Z131q/NAS5.png)

**7. シンプルボリュームサイズの設定**
![NAS6](https://cl.ly/0f2x2O3n0J2g/NAS6.png)
HDDを複数のボリュームに分けて使用する等でなければ最大ディスク領域と同じ値を指定で良いと思います。

**8. 設定を入力して「次へ」を選択**
![NAS7](https://cl.ly/163K3Z2M3H15/NAS7.png)
完全に趣味です。好きなドライブ文字を割り当ててください。

**9. 設定を入力して「次へ」を選択**
![NAS8](https://cl.ly/1q2R2H0Y3f2u/NAS8.png)

- ファイルシステム：

 　　任意のフォーマット形式を選択してください。

- アロケーションユニットサイズ：

　　アロケーションユニットサイズはファイル管理の最小単位です。小さく指定すると
　　HDDの記憶領域の無駄を少なくすることができますが、ファイルの読み書きの速度
　　が落ちます。逆に大きく指定するとファイルの読み書きの速度が落ちることは防げ
　　ますが、HDDの記憶領域の無駄が多くなり、結果として利用できるデータ容量が
　　少なくなってしまいます。
　　何らかの理由が無ければ既定値で良いと思います。

- ボリュームラベル：

　　任意の名前をつけてください。

- クイックフォーマットか通常フォーマットか：

　　クイックフォーマットと通常フォーマットの違いはディスクチェックををするか
　　しないかの違いです。後々、HDD関係のトラブルを少なくしたい方は通常フォーマ
　　ットが良いと思いますが、フォーマットに数時間かかるらしいです。
　　(私自身は通常フォーマットの経験が無いので、他の方の経験談です)
　　クイックフォーマットと通常フォーマットの詳細は以下のサイトを参考にしてみて
　　ください。 
　　「[クイックフォーマットと通常のフォーマットは何が違う？](http://itpro.nikkeibp.co.jp/pc/article/NPC/20060329/233687/?rt=nocnt)」

**9. 「完了」を選択**

![NAS9](https://cl.ly/2n3m2e203p1W/NAS9.png)

以下の画面のように新しいディスク(ボリューム)が作成されていればHDDのフォーマットは完了です。

![NAS10](https://cl.ly/1Z0b1R1C3I3f/NAS10.png)


#Raspberry Piの電力設定
Raspberry PiのUSBポートに供給される電力はデフォルトで0.6Aに設定されているようで、バスパワー方式の外付けHDDでは電力不足で挙動が不安定になるというようなことを見かけました。
ですので、USBポートに供給する電力を0.6Aから1.2Aにアップする設定方法を見てゆきたいと思います。
なお、私が使用している外付けHDDはセルフパワー方式なので今回の設定は不要ですが、バスパワー方式の外付けHDDを使用する方もいるかもしれないので、参考として書いています。
また、Rasperry Piの電源自体が1.2A以上に対応していない場合に今回の設定を行ったとしても、USBポートに供給される電力は、その電源以上にはならないので注意してください。
外付けHDDのセルフパワー方式とバスパワー方式の違いがわからない方は以下のサイトを参照してみてください。

- [バスパワーとセルフパワー](http://www.pc-master.jp/words/buspower-selfpower.html)

それでは設定方法を見てゆきましょう。
設定はRaspberry Piのターミナルで操作をしてゆきます。

**1. 以下のコマンドを実行**

```:Terminal
$ sudo vi /boot/config.txt
```
viでconfig.txtを開きます。viの操作は以下のサイトを参考にしてみてください。

- [【初心者でもわかりやすい】Linuxのviの使い方をゼロから！](https://eng-entrance.com/category/linux/linux-vi)

**2. config.txtに以下の設定を追記**

```:config.txt
max_usb_current=1
```

**3. 設定を反映させるために再起動**

```:Terminal
$ sudo reboot
```

設定は以上です。

#Raspberry PiのexFAT導入設定
Raspberry Piではパッケージを導入しないとexFAT形式のファイルを扱えないので、そのためのパッケージのインストールを行います。
Raspberry Piのターミナルでの操作です。

**1. 以下のコマンドを実行**

```:Terminal
$ sudo apt-get install exfat-fuse exfat-utils
```

"exfat-fuse"と"exfat-utils"をインストールします。
"exfat-fuse"と"exfat-utils"の詳細については以下を参照してください。

- [exfat-fuse](https://packages.debian.org/ja/jessie/exfat-fuse)
- [exfat-utils](https://packages.debian.org/ja/jessie/exfat-utils)

**2. 設定を反映させるために再起動**

```:Terminal
$ sudo reboot
```

設定は以上です。

また、この投稿を参照している方でフォーマット形式のNTFSを選択している方も一定数いるかと思い、NTFSの場合は"ntfs-3g"をインストールすれば良いようです。
間違っていたらごめんなさい。詳細は以下のサイトを参照してみてください。

- [RaspberryPi 3 にUSBの外付けHDD（NTFSフォーマット）を接続する](http://min117.hatenablog.com/entry/2017/02/21/125825)
- [ntfs-3g](https://packages.debian.org/ja/jessie/ntfs-3g)

#自動マウント設定
マウントは外部接続した装置を認識させる操作です。
マウントは手動でコマンドを打つことで行えますが、今回はRaspberry Piを再起動するたび自動でマウントを行ってくれるよう設定したいと思います。

それでは設定方法を見てゆきましょう。
設定はRaspberry Piのターミナルで操作をしてゆきます。

**1. 外付けHDDのUUIDの確認**

```:Terminal
$ sudo blkid
/dev/sda1: LABEL="NASHDD" UUID="XXXX-XXXX" TYPE="exfat" PARTUUID="XXXXXXXX-01"
```
blkdはブロックデバイスの属性を見つけて表示するコマンドです。LABEL(フォーマットの時に指定した名前)を頼りに外付けHDDを見つけてUUIDを控えておいてください。

**2. viでfstabを開く**

```:Terminal
$ sudo vi /etc/fstab
```

**3. fstabに以下の設定を追記**

```:fstab
UUID="XXXX-XXXX"        /mnt/hdd/nashdd    exfat-fuse      async,auto,dev,exec,gid=65534,rw,uid=65534,umask=007    0       0
```
それぞれの設定内容は以下のサイトを参照していただくと、おおよそ理解できるかと思います。


- [マウント](http://itpro.nikkeibp.co.jp/article/Keyword/20070207/261214/?rt=nocnt)
- [fstab](https://wiki.archlinuxjp.org/index.php/Fstab)
- [fstabの設定](https://kaede.jp/2012/11/04135739.html)
- [/etc/fstabのマウントオプション](https://open-groove.net/lpic/linux-fstab-mount-option/)
- [Umask](https://wiki.archlinuxjp.org/index.php/Umask)

**3.1. 補足1(asyncとsync)**

asyncとsyncオプションの違いはデータ転送が非同期か同期かの違いです。
非同期とはHDDに書き込みを行った時にメモリのキャッシュ機能を使うことによって、都度、書き込みが終わるまで待たされることが無い、同期はその逆でリアルタイムで書き込み処理が行われてその処理が終わるまで待たされるということのようです。
それだけを書くとasyncで良さそうですが、外付けHDDに関しては大容量のデータを書き込もうとするとasyncの非同期処理で逆に遅くなったり、非同期処理ということは想定外の電源トラブルが起きた時などにデータが失われる可能性があるとも考えられるようです。
ですので、asyncとsyncの設定は運用方法によって、どちらが良いか変わってくるかもしれません。
以下のサイトを参考にしてみてください。

- [Difference between 'sync' and 'async' mount options](https://unix.stackexchange.com/questions/146620/difference-between-sync-and-async-mount-options)
- [USBハードディスクをLinuxで使うときの注意点](http://www.tabimoba.net/entry/20120628/1340858085#.Wbbl-bJJbIV)

**3.2. 補足2(65534)**

gidで指定している65534は"nogroup"を意味し、uidの65534は"nobody"を意味します。実際に以下のコマンドで65534の存在を確認できます。

```:Terminal
$ cat /etc/group
```
```:Terminal
$ cat /etc/passwd
```

**4. 設定を反映させるために再起動**

```:Terminal
$ sudo reboot
```

**5. マウントの確認**

```:Terminal
$ sudo df
```

ディスクの使用量を確認するコマンドです。以下のように表示されていればマウントされています。

```
/dev/sda1       1953514496   19968 1953494528    1% /mnt/hdd/nashdd
```
設定は以上です。

#Sambaのインストール
>Sambaとは、Windows以外のOSでWindowsネットワークの諸機能を利用できるようにするソフトウェア。主にUNIX系OSで動作するコンピュータをWindowsネットワーク上のサーバやクライアントとして利用するために用いられるもので、GPL(GNU Public License)に基づいてオープンソースソフトウェアとして公開されている。
[IT用語辞典-Samba より](http://e-words.jp/w/Samba.html)

この説明だとMacからのみNASにアクセスできれば問題ないという方には必要なさそう、あるいは別ソフトを使えば良さそうですが…
ごめんなさい、私自身サーバーやMacに関する知識についてド素人で、それらしい情報も見つけられずです。
その辺について詳しい方がいたらご教示ください。
とりあえず、今回はWindowsからもアクセスできるNASを構築したいということで、Sambaをインストールしてゆきたいと思います。

それでは設定方法を見てゆきましょう。
設定はRaspberry Piのターミナルで操作をしてゆきます。

**1. Sambaのインストール**

```:Terminal
$ sudo apt-get install samba
```

途中で、このぐらいの容量を使うがインストールして良いかどうかを"y/n"で聞かれるので"y"を入力してEnter。

**2. 以下のコマンドでSambaの設定ファイルを開く**

```:Terminal
$ sudo vim /etc/samba/smb.conf
```

**3. 設定ファイルに以下の設定を追記**

```:smb.conf
[pi]
   comment = NAS
   path= /mnt/hdd/nashdd
   read only = no
   guest ok = yes
   force user = XX
   unix extensions = no
```

設定の概要は最初に挙げた「[RaspberryPi2でMacとWindows両対応のNASを構築する](http://qiita.com/rkonno/items/54b2e4b8770c8b0b2bcd)」を参照して頂くと良いと思います。

**3.1. 補足(unix extensions)**
"unix extensions"はyesにするとWindowsには認識できない機能として問題が生じる可能性があるので、noにしておいた方が良いらしいです。
以下サイト参考です。

- [unix extensions = no](http://d.hatena.ne.jp/hon_ya/20110619/1308578781)

**4. 設定を反映させるために再起動**

```:Terminal
$ sudo reboot
```

設定は以上です。

#NASにアクセス
ここまでの設定でNASが完成しました。
最後にWindowsからNASにアクセスしてみましょう。

**コンピューターを開く→\\\\(Raspberry Piのローカルip)**
![NAS11](https://cl.ly/182G3f2F3F3e/NAS11.png)

NASに安定してアクセスするためにはRaspberry Piに固定のローカルipを割り当てる必要があります。
その方法は以前に投稿した以下の記事で述べていますので、参考にしてみてください。

- [Raspberry Pi3のLAN外からのSSH接続設定方法](http://qiita.com/3no3_tw/items/4b5975a9f3087edf4e20)

以上、お疲れ様でした。