4
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

はじめに

前の記事「Raspberry Piでスーパーコンピュータをつくろう!」のマウントでハマる
の時には、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
--- 下記を追記
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」を追加して、再起動したら直りました。

###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」が自動実行されなくなったので、
以下のファイルを作って、サービス化しました。

/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クラスタ超入門
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 な共有フォルダを起動時にマウント

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
4
Help us understand the problem. What are the problem?