背景
手軽に使えるNASが欲しい。
外付けHDDが余っていたので、RaspberryPi2でNAS(ファイルサーバ)を構築しました。「NASってどんなもの?」という感じで具体的にイメージが湧かないため「実際に構築することでNASについて知ろう!」という目的もあります。今回は個人的にオウチで利用するかんたんなNASとなっているため、RAIDを構成したり、信頼性・データの冗長性の確保などは考慮していません。
MacからもWindowsからも読み書きできる制限のないNAS。
現在の作業環境はデスクトップにWindows、持ち運びにMacbook Airなので、WindowsとMacに両対応し、どの端末からも読み書きが可能な不自由なく利用できることを意識したNASを構築しました。
※ また、万が一NASが正常に動作しなくなった場合にMAC・Windowsどちらからでもデータの読み書きを行えるようにしておきます。
実行環境
- Raspberry Pi2 Model B - Raspbian Jessie8.0
- 外付けHDD(ストレージ)
- MacbookAir(SSH・作業用) - OS X El Capitan 10.11.1
- Windowsマシン - Windows10
- Samba(ファイルサーバー) - Version 4.1.17-Debian
やってみよう!
HDDを準備しよう
最適なフォーマット形式を考える
WindowsでデフォルトのNTFS
フォーマット形式は、Macでは読み取り専用で書き込みができません。一方、MacでデフォルトのHFS+
フォーマット形式は、Windowsでは読み込むことさえ出来ません。
FAT32
という両プラットフォームで読み書き可能な互換性の高いフォーマット形式があります。しかし、欠点があり1ファイルにつき最大4GBまでしか書き込めず、Windowsではボリューム全体として最大32GBまでの領域しかフォーマットできないという制限があります。
そこでFAT32の後継として登場したのが、 exFAT
(Extended FAT)形式。主な特徴は以下のとおりです。
- ドライブとファイルの最大容量制限がない(と考えていいほど大きい)
- WindowsとMacに両対応
- 以下の環境は未対応
- Windows - VistaSP1未満
- Mac - OS X10.6.5未満
- NTFSが備えるファイルの暗号化機能やボリュームの圧縮/拡張機能などを持たず、シンプルに読み書きするのみ
どのフォーマット形式を使うか
- MacとWindowsなどOSが混在している環境
- OSが比較的新しい環境
- 大きいファイルを扱える(容量制限がない)NASのほうが安心
以上の3点からexFAT
形式でフォーマットすることにします。
フォーマットを行う
exFAT
形式でのフォーマットはWindows、Macどちらでも可能です。ここでは、Macで行うことにします。
- ディスクユーティリティを開く
-
Finder
>アプリケーション
>ユーティリティ
>ディスクユーティリティ
-
- 外付けHDDをMacに繋ぐ
- 左サイドに表示される該当する
HDD
を選択 - 中央上部の
消去タブ
を選択 - フォーマットとして
exFAT
を選択 - 任意のHDD名を入力(ここでは
RaspberryPi
とした) - 方式は
GUIDパーティションマップ
を選択 -
消去
を選択 - Macから外付けHDDを取り外す
以上でフォーマットは完了です。
マウント - 外付けHDDをマウントしよう
はじめに、マウントの意味を確認します。
マウントとは、コンピュータに接続した周辺機器や外部記憶装置(あるいは、装置に挿入されたディスクなどの記録メディア)をOSに認識させ、利用可能な状態にすること。
マウントとは|mount : IT用語辞典
ここからはRaspberryPi2のターミナルでの作業です。
Jessie(RaspberryPi2)でexFATを使えるようにする
下準備としてJessieでexFAT形式を扱うためにexfat-fuse
とexfat-utils
をインストールする。
$ sudo apt-get install exfat-fuse exfat-utils
該当HDDのUUIDを調べる
RaspberryPiにHDDをつなげてから、blkid
で該当HDDのUUID(デバイスの一意な識別子)を調べて、控える。
$ sudo blkid
/dev/sda1: LABEL="EFI" UUID="67E3-17ED" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="f0a75650-cf5d-4718-8af1-dc7b66a3f895"
/dev/sda2: LABEL="RaspberryPi" UUID="5662-CA45" TYPE="exfat" PARTLABEL="RaspberryPi" PARTUUID="8e245eff-3662-4cb7-8a3b-637ac7f6ac66"
先ほどフォーマットする際に指定したHDD名がLABELとして示されています。
この場合だと、LABEL="RaspberryPi"
が該当HDDで、UUID="5662-CA45"
だと分かります。
起動時に自動でマウントしてくれるように設定
手動でmount
コマンドでマウントすることも可能ですが、fstab
に設定を指定すれば起動時に自動でマウントしてくれます。
設定ファイルは/etc/fstab
です。(ここではvim
で編集しますが、nano
などを使っても大丈夫です)
$ sudo vim /etc/fstab
proc /proc proc defaults 0 0
/dev/mmcblk0p6 /boot vfat defaults 0 2
/dev/mmcblk0p7 / ext4 defaults,noatime 0 1
UUID="5662-CA45" /mnt/hdd/raspberrypi exfat-fuse async,auto,dev,exec,gid=65534,rw,uid=65534,umask=007 0 0
例にならって記述すれば問題ありません。ここで、先ほど控えたUUID
を用いています。/dev/sda2
のようなデバイス指定方法も可能ですが、何かのタイミングで/dev/sdb2
のように変更されてしまった場合、正しいデバイスでマウントされないため、デバイスを一意に特定できるUUID
を指定する必要があります。
指定の概要は以下のとおりです。
- 1列目 - デバイス指定
- 2列目 - マウントポイント
- 3列目 - ファイルシステム
- 4列目 - マウント時のオプション
ここで重要な点は、UnixにおけるexFAT
の扱いです。
exFAT
は、Windowsのファイルシステムなので、そもそもUnixでのオーナーや、アクセス権(パーミッション)の概念がファイルシステム上に存在しない。また、exFAT形式のストレージをマウントした後にchmod
コマンドなどでパーミッション指定することはできない。そのため、Unixでマウントする際にはマウント時のfstab
などの設定ファイルでオプションを適切に指定する必要がある。
オプションの中身の説明は以下のサイトにて詳しく説明されています。
設定を書き込み保存したら、再起動する。
$ sudo reboot
再起動が完了したら、該当HDDがマウントされているかを確認。
$ sudo df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
/dev/sda2 976556032 534016 976022016 1% /mnt/hdd/raspberrypi
無事、マウントできているのが確認できます。
Samba - ファイルサーバーをインストールしよう
まずSambaとは、「Linux上でWindowsサーバー相当の機能を実現するソフトウェア」のことです。これを導入することによってNASを実現します。
$ sudo apt-get install samba
以上のコマンドでSambaをインストールします。
途中のDo you want to continue [Y/n]?
は、y
で進みます。
Sambaを設定する
設定ファイルは/etc/samba/smb.conf
です。
$ sudo vim /etc/samba/smb.conf
末尾に以下のものを追記します。
[pi]
comment = RaspberryPi2によるNAS
path= /mnt/hdd/raspberrypi
read only = no
guest ok = yes
force user = pi
unix extensions = no
設定プロパティの意味としては、
・[任意の共有名]
・comment:任意のコメント
・path :先ほど設定した外付けHDDのマウントポイントを設定
・read only:Noで「読み込みだけでなく、書き込みも可能」とする
・guest ok:Yesで「クライアントからの接続は、ゲスト接続」
・force user:サーバー側では、ファイル操作を「pi」 で行う
といった感じです。
Sambaを再起動する
設定を保存したら、Sambaを再起動する。
$ sudo service samba restart
うまくいけば、この時点でファイルサーバーが立ち上がります。
NASにアクセスしよう
(ホスト名を設定していない人向け)ホスト名を設定しよう
NASにアクセスする前に、毎度IPアドレスでアクセスするのではなく、Avahiを使ってホスト名を設定し、ホスト名のみでアクセスできるように設定します。
Avahiを設定することで動的に変更される192.168.0.0
というようなIPアドレスではなく、raspi2.local
といったホスト名のみでRaspberryPiにアクセスすることが可能になります。NASにもこのホスト名でアクセスすることが出来るため、ここで設定しておくと後々楽だと思います。
Avahiのインストール
$ sudo apt-get install avahi-daemon
続行しますか?[Y/n]?
については y
で進めて、インストールを完了します。
ホスト名の変更
ホスト名を変更するために /etc/hostname
を開く。
sudo vim /etc/hostname
raspberrypi
このraspberrypi
を任意のhostnameに変更します。ここではraspi2
と変更しました。
次に/etc/hosts
を変更する。
sudo vim /etc/hosts
/etc/hosts
の末尾の
127.0.1.1 raspberrypi
を先ほど/etc/hostname
で記述した任意のホスト名(ここではraspi2
)に変更し保存。
インストールが完了した後、exit
コマンドでログアウトしたあと、MacのTerminalから
ssh ユーザ名@[任意のhost名].local
でRaspberryPiへアクセスが可能になります。
MacでNASにアクセスする
-
finder
を開く -
メニューの
移動
>サーバーへ接続...
-
サーバーアドレス:
smb://サーバのホスト名、もしくは ip アドレス
- 例)
smb://hoge
,smb://10.0.0.2
...
-
(必要であればユーザ名やパスワードを入力)
以上の手順でアクセスが可能。
WindowsでNASにアクセスする
-
ファイル名を指定して実行
を起動(ショートカット:[Windows] + r) -
¥¥[サーバのIP]or[ホスト名]
を入力して実行 - (必要であればユーザ名やパスワードを入力)
以上の手順でアクセスが可能。
所感
転がっていた外付けHDDと、RaspberryPi2のみでお手軽なMac,Windows両対応のNASを構築することが出来て、満足。とりあえず、音楽ファイルを置きました。
まとめ
- 環境に応じてストレージのフォーマット形式を考えよう
- HDDをRaspberyyPiでマウントする方法
- Sambaをインストール,設定する方法
- Avahiでホスト名を設定するとすごく楽になる話
- MacとWindowsからNASにアクセスしてみる