はじめに
前の記事「Raspberry Piでスーパーコンピュータをつくろう!」のマウントでハマる
の時には、NASないしは、USBポート付きのルータを使って、ハードウエア的に解決しようとしていました。
しかし、NASは高価で重い。
せっかく、ラズパイで持ち運び可能なスパコンを作ろうとしているのに、これじゃ意味が無い。
USBポート付きのルータで、USB接続のHDDをNAS化するのは、
安価で評判の良いルータが見つからなかった。
そこで、ラズパイでファイルサーバを作ろうと、思い直しました。
環境
- Raspberry Pi 4B
- OS:2020-02-13-raspbian-buster-full.zip Raspbian よりダウンロード
- FAT32でフォーマットされたUSBメモリ
- 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
--- 下記を追記
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
--- 最終行に追記
[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」を追加して、再起動したら直りました。
###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できない
によると、
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
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]
Raspberry Pi で samba な共有フォルダを起動時にマウント
の通りにしました。
ただ、「/etc/rc.loacl」が自動実行されなくなったので、
以下のファイルを作って、サービス化しました。
#!/bin/bash
sleep 10
sudo mount /mnt/fs92_01
[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クラスタ超入門
Raspberry Pi 4 でSamba 4.11を使ってファイルサーバー&TimeMachine
RaspberryPiでFAT32の外付けハードディスクをマウント
Sambaファイルサーバーの構築
raspberry pi : sambaのインストール
vfatパーティションが文字化け
chown の参考サイト
Q: sudoなのにOperation not permitted
ユーザの情報を確認するidコマンドの説明【Linuxコマンド集】
インデックス » Ubuntuに関する質問 » chownできない
Samba のマウント
Raspberry PiにNASをマウントする。[Raspberry Pi][Linux]
Raspberry Pi で samba な共有フォルダを起動時にマウント