ラズベリーパイ4でFAT32のUSBメモリをファイルサーバー化

# はじめに
前の記事[「Raspberry Piでスーパーコンピュータをつくろう！」のマウントでハマる](https://qiita.com/hoshinom78/items/7b628d18ce5c29f465ac)
の時には、NASないしは、USBポート付きのルータを使って、ハードウエア的に解決しようとしていました。

しかし、NASは高価で重い。
せっかく、ラズパイで持ち運び可能なスパコンを作ろうとしているのに、これじゃ意味が無い。

USBポート付きのルータで、USB接続のHDDをNAS化するのは、
安価で評判の良いルータが見つからなかった。

そこで、ラズパイでファイルサーバを作ろうと、思い直しました。

# 環境
1. Raspberry Pi 4B
2. OS：2020-02-13-raspbian-buster-full.zip Raspbian よりダウンロード
3. FAT32でフォーマットされたUSBメモリ
4. Windows 10


## FAT32 の理由
ファイルサーバの電源が入っていない時でも、
Windows に USBメモリを刺して、直接ファイルを読めるようにするため。
**ext4 だと Windows が標準対応していないため**

# 構築手順
## 外付けUSBメモリの自動マウント
### USBメモリのデバイス名を取得

```
sudo fdisk -l
```

SDカードとUSBメモリが同じ32GBで紛らわしかったため、df で確認

```
df
```

### UUIDを確認

```
blkid [デバイス名]
```

### fstabにマウントポイントを追加しマウント
ここでは、マウントポイントを"/media/fs92_01"とします。

```
sudo mkdir /media/fs92_01
sudo chown [sambaユーザー]:[グループ] /media/fs92_01/

sudo vi /etc/fstab
```
```/etc/fstab 
--- 下記を追記
UUID=[1.2で確認したUUID]  /media/fs92_01  vfat  defaults  0  0
```
```
sudo mount -a
ls -l /media/fs92_01/
```
Windowsで作った日本語ディレクトリ名も文字化けせずに表示されました。

## ファイルサーバー環境構築
### Sambaをインストール

```
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install samba
```

途中、
「・・・前略・・・
DHCP から WINS 設定を使うよう smb.conf を変更しますか?」

という選択画面が表示され、 <いいえ> で答えました。

### Sambaの設定ファイル（.conf）に追記
```
sudo cp -a /etc/samba/smb.conf /etc/samba/smb.conf.org
sudo vi /etc/samba/smb.conf
```
```/etc/samba/smb.conf
--- 最終行に追記
[fs92_01]
comment = fs92_01
path = /media/fs92_01
public = yes
read only = no
browsable = yes
force user = pi
```

### confファイルのチェック
```
testparm
```
「Loaded services file OK.」と出たので、OK。

### Sambaサービスの再起動
```
sudo systemctl restart smbd
```

### Windows からアクセスして動作確認
エクスプローラーで、ファイルサーバのIPアドレスを入力して、
「fs92_01」ディレクトリが見えることを確認しました。

### ファイルサーバを再起動して再確認
```
sudo reboot
```
エクスプローラーで、「fs92_01」ディレクトリの中を再確認した所、
日本語ディレクトリが、英数字8桁になってしまいました。。。

ファイルサーバをシャットダウンして、
USBメモリをWindowsに刺して、確認した所、
日本語ディレクトリは、漢字・ひらがな・カタカナで、表示されました。

という事は、再起動によって消えてしまった
（＝ファイル上でなく、メモリ上にしかなかった） Samba の設定がある、と考えられます。

# 日本語ディレクトリ名が英数字8桁になる問題に対応

ファイルサーバに、USBメモリを刺しなおして、ディレクトリ名を確認します。

## ssh で日本語ディレクトリ名を確認
ssh でファイルサーバに入り、日本語ディレクトリ名を確認すると、
「?????????????????」と、文字化けしています。

## VNC で日本語ディレクトリ名を確認
VNC でファイルサーバに入り、日本語ディレクトリ名を確認すると、
こちらも文字化けしています。

というか、VNC では「/media/fs92_01」ディレクトリは、見えません。
別の名前（31 GB ボリューム）で、マウントされています。
**勘違いでした。
ファイルマネージャでディレクトリのプロパティを確認した所、
ファイルはちゃんと「fs92_01」になっていました。
名前が「31 GB ボリューム」となっているので、そちらが優先して表示されているものと思われます。**

## fstab でUTF-8と指定
「/etc/fstab」のオプションに「iocharset=utf8」を追加して、再起動したら直りました。

```/etc/fstab
###UUID=239F-41D5   /media/fs92_01  vfat  defaults  0  0
UUID=239F-41D5   /media/fs92_01  vfat  defaults,iocharset=utf8  0  0
```


**つまり、Sambaでなく、マウントの設定の問題でした。**

# 書き込み権限付与 **2020-03-29 追記**
Windows でファイル・ディレクトリを追加しようとしたら、
「この操作を実行するアクセス許可が必要です」となって、追加できませんでした。

## chmod コマンド
```
sudo chmod -R 777 /media/fs92_01/
```
しましたが、変わりませんでした。

というか、ルートユーザーの持ち物に戻っていました。

```
drwxr-xr-x  7 root root 16384  1月  1  1970 fs92_01
```

## chown コマンド
```
sudo chown -R pi:pi /media/fs92_01/
```
したら、「chown: '/media/fs92_01/ほげほげ' の所有者を変更中: 許可されていない操作です」と、なってしまいました。

## id コマンド
chown コマンドは、ユーザ・グループを数字のIDで指定する必要がある。
との事で、id コマンドで、IDを調べて、再度 chown 

```
id pi
sudo chown 1000:1000 /media/fs92_01
```
しても、変わらない。。。

## Samba を止めてみる
```
sudo systemctl stop smbd
sudo chown -R pi:pi /media/fs92_01/
sudo chown 1000:1000 /media/fs92_01
```
しても、変わらない。。。

## アンマウントしてみる
```
sudo umount -a
```
したら、空のディレクトリが残り、rootユーザでは、なくなりました。

```
drwxr-xr-x  2 pi   pi   4096  3月 29 16:08 fs92_01
```
もしかしたら、マウントポイントとして作ったディレクトリが邪魔になっている？

## ディレクトリ削除して、マウントしなおしてみる
```
sudo rmdir /media/fs92_01
sudo mount -a
```
やっぱり、マウントポイント必要らしい。

```
mount: /media/fs92_01: mount point does not exist.
```

## ディレクトリ再作成して、rootユーザ所有のまま、マウントしなおしてみる
```
sudo mkdir /media/fs92_01
ls -l /media/
```

```
drwxr-xr-x  2 root root 4096  3月 29 19:38 fs92_01
```
```
sudo mount -a
ls -l
```
```
drwxr-xr-x  7 root root 16384  1月  1  1970 fs92_01
```
```
sudo chown -R pi:pi /media/fs92_01/
```
```
chown: '/media/fs92_01/' の所有者を変更中: 許可されていない操作です
```
```
sudo chown -R 1000:1000 /media/fs92_01/
```
```
chown: '/media/fs92_01/' の所有者を変更中: 許可されていない操作です
```
しても、変わらない。

## /etc/fstab ファイルで uid, gid を指定 **（解決）**
[インデックス » Ubuntuに関する質問 » chownできない](https://forums.ubuntulinux.jp/viewtopic.php?id=9122)
によると、
VFAT のファイルシステムで、chown コマンドは使えません
とのこと。

例) 変更したいユーザー user1 の uid が 100、user1 が所属しているグループの gid が 101 で
    fstab の該当行が /dev/sda1 /mnt/usbm1 vfat default 0 0 の場合

        → /dev/sda1 /mnt/usbm1 vfat uid=100,gid=101 0 0
とのこと。

```
sudo vi /etc/fstab
```
```/etc/fstab
UUID=ほげほげ   /media/fs92_01  vfat  uid=1000,gid=1000,iocharset=utf8  0
```
```
sudo umount /media/fs92_01
sudo mount /media/fs92_01
ls -l /media/
```
```
drwxr-xr-x  7 pi   pi   16384  1月  1  1970 fs92_01
```

出来ました！


# おわりに
長くなったので、最重要のマスタとスレーブのラズベリーパイから、
ファイルサーバの「fs92_01」ディレクトリをマウントする手順については、
別記事にします。

## マスタとスレーブで、ファイルサーバの「fs92_01」ディレクトリをマウント **2020-03-29 追記**
別記事にするほどでは、ありませんでした
[Raspberry PiにNASをマウントする。[Raspberry Pi][Linux]](https://qiita.com/wbh/items/90288f44b62a36d24f0a)
[Raspberry Pi で samba な共有フォルダを起動時にマウント](http://tomokatsu.hatenablog.com/entry/2016/05/20/053658)
の通りにしました。

ただ、「/etc/rc.loacl」が自動実行されなくなったので、
以下のファイルを作って、サービス化しました。

```/home/pi/mount-fs-sleep.sh
#!/bin/bash
sleep 10
sudo mount /mnt/fs92_01
```
```/etc/systemd/system/mount-fs-sleep.service
[Unit]
Description= fs92_01 mount 

[Service]
ExecStart=/home/pi/mount-fs-sleep.sh
Restart=always
Type=simple

[Install]
WantedBy=multi-user.target
```
```
sudo systemctl enable mount-fs-sleep.service
```

# 参考文献・サイト
[自作PCクラスタ超入門](https://www.morikita.co.jp/books/book/3232)
[Raspberry Pi 4 でSamba 4.11を使ってファイルサーバー&TimeMachine](https://qiita.com/Atsuking/items/5345147b3bf6fc4d3f8e)
[RaspberryPiでFAT32の外付けハードディスクをマウント](https://qiita.com/hiroshi8800/items/ef5c38755d30a782c533)
[Sambaファイルサーバーの構築](https://raspida.com/rpi-samba-build)
[raspberry pi : sambaのインストール](https://qazsedcftf.blogspot.com/2019/12/raspberry-pi-samba.html)
[vfatパーティションが文字化け](https://nixeneko.hatenadiary.org/entry/20081122/1227345071)

## chown の参考サイト
[Q: sudoなのにOperation not permitted](https://discussionsjapan.apple.com/thread/10063059)
[ユーザの情報を確認するidコマンドの説明【Linuxコマンド集】](https://eng-entrance.com/linux-command-id)
[インデックス » Ubuntuに関する質問 » chownできない](https://forums.ubuntulinux.jp/viewtopic.php?id=9122)

# Samba のマウント
[Raspberry PiにNASをマウントする。[Raspberry Pi][Linux]](https://qiita.com/wbh/items/90288f44b62a36d24f0a)
[Raspberry Pi で samba な共有フォルダを起動時にマウント](http://tomokatsu.hatenablog.com/entry/2016/05/20/053658)