RaspberryPiでNAS(ファイルサーバー)構築
ラズパイにSambaをインストールしてNAS化します。
はじめに
NASを構築する理由
ただの外付けHDDの場合、別のPCで使うときに抜き挿しが面倒くさかったのでNAS化した。スマホからでも気軽にアクセスできるので快適です。
そもそもSambaってなんぞ
Sambaは、「Linux上でWindowsのネットワーク機能を実現するソフトウェア」のことです。RaspbianもLinuxです。Linuxでファイルサーバーをしたい場合、大体Sambaが使われますね。
ファイルシステムの選定
普段あまり気にしないファイルシステムですが、OSが違うと扱えなかったり色々と制限があるんですよね。NASが正常に動作しなくなった場合を考えて、どのOSからでも読み書きできるものを選びたいところ。
'FAT32'はどのOSでも認識されますが、4GBを超えるファイルは扱えません。'NTFS'はWindowsで標準で使われているものですがLinuxとMacは非対応。といった具合にファイルシステムによって様々です。
今回は'exFAT'を使用します。MicroSoftが開発したFATの後継規格ですね。4GBを超えるファイルに対応し、WindowsやMac、Linuxで扱えます。
環境
- ラズパイ
- HW: Raspberry Pi 3 Model b
- OS: Raspbian Stretch 9.9
- ストレージ
- パソコン
外付けHDDの準備
当たり前ですが、NAS化するためのストレージを用意する必要があります。
パーティションの作成
必要があればパーティションを切っておきましょう。全領域をexFATにしたくない場合など。私はHDDの容量が500GBしかないので、丸々NAS用としてexFATでフォーマットしてます。
パーティションの作り方はOSによってやり方が違うのでOSに合わせて調べて下さい。
フォーマット
先程書いたように今回ファイルシステムは'exFAT'を使うので、exFAT形式でフォーマットする必要があります。
フォーマットもOSによってやり方が違うのでOSに合わせて調べて下さい。
ラズパイに外付けHDDを接続(マウント)
ここではexFAT形式のマウント方法、ラズパイ起動時に自動でマウントする方法を順追って設定していきます。
USBポートに挿す
当たり前ですが、ラズパイのUSBポートに外付けHDDを繋ぎます。色々やってると繋ぎ忘れあるよねw
exFATをマウントできるようにする
RaspbianでexFAT形式をマウントするためには'exfat-fuse'と'exfat-utils'をインストールする必要があります。これらがないとexFAT形式はマウントできないのでインストールします。
~$ sudo apt-get -y install exfat-fuse exfat-utils
30秒程で終わります。
手動でマウントしてみる
上記で必要なものはインストールしたので、正常にマウントできるか試してみます。
デバイス名(パス)の確認
~$ sudo fdisk -l
~省略~
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
こんな感じで表示されます。赤くしたのがデバイス名(パス)、容量等を見て目的のデバイスか判断します。環境によって変わるので必ず確認すること。
マウント
マウント先のディレクトリが存在しないとエラーするので先に作っておきます。
~$ sudo mkdir -p /mnt/hdd/naspi
外付けHDDを「/mnt/hdd/naspi」下にマウントします。
~$ sudo mount /dev/sda /mnt/hdd/naspi
FUSE exfat 1.2.5
正常にマウントされたはずですが、確認します。
~$ df -h
~省略~
/dev/sda 466G 244G 223G 53% /mnt/hdd/naspi ←これ
正常にマウントされていることが確認できました。
起動時に自動でマウントするように設定
ラズパイを起動するたびにコマンドを打ってマウントするのも面倒なので自動にマウントするように設定します。
「/etc/fstab」ファイルを編集することで可能ですが、デバイス名(パス)は変動するのでUUIDを用いて設定します。UUIDはデバイスで固定された値なのでデバイスが変わらない限り変動しません(変えることも可)。
外付けHDDのUUIDを調べる
「blkid」コマンドで確認できます。
~$ sudo blkid
/dev/mmcblk0p1: LABEL="boot" UUID="16D2-035F" TYPE="vfat" PARTUUID="eff4f6a1-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="d065e631-6b9d-48c0-a8fe-e663b42828e0" TYPE="ext4" PARTUUID="eff4f6a1-02"
/dev/mmcblk0: PTUUID="eff4f6a1" PTTYPE="dos"
/dev/sda: UUID="7B59-A1EC" TYPE="exfat" PTTYPE="dos" ←この行
先程調べたデバイス名(パス)の書かれた行にある「UUID="7B59-A1EC"」が目的のものです。
/etc/fstabの書式に整形
書式は以下。スペースで区切りで、スペースの数は任意。
マウントするデバイス マウント先のパス ファイルシステム マウント時のオプション dump pass
※詳しいことはfstab - ArchWikiを参照。
今回の場合は以下になる。
UUID="7B59-A1EC" /mnt/hdd/naspi exfat-fuse async,auto,dev,exec,gid=65534,rw,uid=65534,umask=000 0 0
/etc/fstabに書き込む
echoをリダイレクトして追記してますが、通常はテキストエディタを使って編集してください。
~$ sudo sh -c "echo '# for Samba' >> /etc/fstab"
~$ sudo sh -c "echo 'UUID="7B59-A1EC" /mnt/hdd/naspi exfat-fuse async,auto,dev,exec,gid=65534,rw,uid=65534,umask=000 0 0' >> /etc/fstab"
再起動後、自動でマウントされているか確認
再起動します。
~$ sudo reboot
再起動が終わったらマウントされているか確認します。
~$ df -h
~省略~
/dev/sda 466G 244G 223G 53% /mnt/hdd/naspi
外付けHDDが確認できればオッケーです。
NAS化
外付けHDDがラズパイでマウントできたので、Sambaを入れてサーバー化します。
Sambaのインストール
まず'Samba'をインストールします。
~$ sudo apt-get -y install samba
1〜2分程で終わります。
Sambaの設定
「/etc/samba/smb.conf」ファイルを編集します。
今回書く内容
[nas-pi] # 共有名 comment = NAS by RaspberryPi3 path = /mnt/hdd/naspi read only = no guest ok = no force user = kamesamba unix extensions = no
各パラメーターの意味
- [ ]: 共有名
- comment: 共有フォルダのコメント
- path: 共有するディレクトリのパス
- read only: 書き込みを許可しない
- guest ok: ゲストユーザーでの接続を許可
- force user: 指定したユーザーとして操作
- unix extensions: Windowsからアクセスする際にはnoにする必要があったような……
実際に書き込む
echoをリダイレクトしてファイルの末尾に追記していきますが、テキストエディタで編集することを推奨。
ゲストユーザーでのアクセスはできないようにしています。ファイル操作は「kamesamba(後ほど作る)」が行うように指定。
~$ sudo sh -c "echo '[nas-pi]' >> /etc/samba/smb.conf"
~$ sudo sh -c "echo ' comment = NAS by RaspberryPi3' >> /etc/samba/smb.conf"
~$ sudo sh -c "echo ' path = /mnt/hdd/naspi' >> /etc/samba/smb.conf"
~$ sudo sh -c "echo ' read only = no' >> /etc/samba/smb.conf"
~$ sudo sh -c "echo ' guest ok = no' >> /etc/samba/smb.conf"
~$ sudo sh -c "echo ' force user = kamesamba' >> /etc/samba/smb.conf"
~$ sudo sh -c "echo ' unix extensions = no' >> /etc/samba/smb.conf"
Samba用ユーザーの作成
Samba用のユーザーを作ります。ここではユーザー名「kamesamba」。パスワードも設定しています。
~$ sudo useradd -s /bin/false kamesamba
~$ sudo smbpasswd -a kamesamba
New SMB password: ←任意のパスワードを入力
Retype new SMB password: ←もう一度入力
Added user kamesamba.
設定を反映
設定を反映させるためSambaを再起動します。
~$ sudo /etc/init.d/samba restart
[ ok ] Restarting nmbd (via systemctl): nmbd.service.
[ ok ] Restarting smbd (via systemctl): smbd.service.
これでSambaの設定は完了です。問題がなければファイルサーバーとしてアクセス可能になっています。
NASにアクセスしてみる
OSによって操作方法が違うため全ては紹介できない。私の手元にはLinuxのPCしかないので、ここではLinuxでアクセスしてみます。
LinuxでNASをマウント
必要パッケージのインストール
マウントするために必要なパッケージをインストールします
~$ sudo apt-get -y intall cifs-utils
NASのマウント
今回ラズパイのIPアドレスは'192.168.0.101'、共有名は'nas-pi'、マウント先のパスは'/mnt/hdd'
書式は以下
sudo mount -t cifs -o user=<ログインするユーザー名> //<ラズパイのIPアドレス>/<共有名> <マウント先のパス>
Sambaの設定でゲストでの接続を不可に設定しているため、ユーザーに'kamesamba'を指定しないとログインできません。指定していない場合sudoでmountコマンドを実行しているのでユーザーが'root'となりゲストと判断されます。
以上を踏まえて、マウントします。
~$ sudo mount -t cifs -o user=kamesamba //192.168.0.101/nas-pi /mnt/hdd
Password for kamesamba@//192.168.0.101/nas-pi: ************ ←kamesambaで設定したパスワードを入力
マウントされたか確認します。
~$ df -h
~省略~
//192.168.0.101/nas-pi 466G 244G 223G 53% /mnt/hdd
こんな感じになってればオッケーです。Sambaも正常に動いてることが確認できました。
おわりに
あくまで私の設定メモ。手順は同じになると思いますが、設定内容は人それぞれですので参考までに。