ラズパイでネットワーク上のドライブ(NASやWindowsの共有フォルダなど)をマウントする方法は、主に2つの方法があります。ここでは、最も一般的なCIFS/SMB(Windows共有フォルダ/NAS)と、Linux間でよく使われるNFSについて、手順を追って説明します。
前提:NAS IPアドレス:192.168.2.5
方法1:CIFS/SMBを利用する (Windows共有や一般的なNAS向け)
これは、WindowsのPCや、多くの市販NASで標準的に使われている方法です。
ステップ1:必要なツールをインストールする
まず、CIFSを扱うためのツールをラズパイにインストールします。ターミナルを開いて、以下のコマンドを実行してください。
sudo apt update
sudo apt install cifs-utils
ステップ2:マウントポイントを作成する
マウントポイントとは、ネットワークドライブをラズパイのファイルシステム上のどこに表示させるかを決めるための「出入り口」となる空のディレクトリです。
sudo mkdir /mnt/nas
/mnt/nas
という名前のディレクトリを作成しました。名前は任意で変更可能です。
ステップ3:手動でマウントしてみる
まずはお試しで、コマンドを使って手動でマウントしてみましょう。
【パスワードを直接入力するシンプルな方法】
sudo mount -t cifs -o username=ユーザー名,password=パスワード <サーバーのIPアドレス/共有フォルダ名> /mnt/nas
ユーザー名
/パスワード
: NASやWindows PCのログイン情報に置き換えます。サーバーのIPアドレス
: NASなどのIPアドレス(例:192.168.1.10
)に置き換えます。共有フォルダ名
: 共有しているフォルダ名(例:share
やpublic
)に置き換えます。
【例】
sudo mount -t cifs -o username=guest,password=pa55w0rd //192.168.2.5/data /mnt/nas
このコマンドが成功すれば、ls /mnt/nas
を実行すると、ネットワークドライブの中身が見えるようになります。
ステップ4:起動時に自動でマウントする (fstabの設定)
毎回手動でマウントするのは大変なので、ラズパイの起動時に自動でマウントするように設定します。これには /etc/fstab
というファイルを編集します。
- 認証情報ファイルを作成する (推奨) コマンドに直接パスワードを書くのはセキュリティ上好ましくないため、
別のファイルに保存します。sudo nano /etc/samba/credentials
開いたエディタに以下のように記述して保存(Ctrl+X
,Y
,Enter
)します。username=あなたのユーザー名
password=あなたのパスワード
次に、このファイルの権限を所有者のみが読み取れるように変更します。sudo chmod 600 /etc/samba/credentials
- /etc/fstabを編集する
sudo nano /etc/fstab
ファイルの末尾に、以下の一行を追加します。uid=pi,gid=pi
を付けることで、pi
ユーザーが書き込みできるようになります。//サーバーのIPアドレス/共有フォルダ名 /mnt/nas cifs credentials=/etc/samba/credentials,uid=pi,gid=pi 0 0
- 設定をテストする 再起動する前に、設定が正しいかテストします。
sudo mount -a
エラーが出なければ、設定は成功です。
次回からラズパイを起動すると自動でマウントされます。
トラブル:マウントしてもファイルが見えない
原因として最も可能性が高いのは、NAS上の共有フォルダの指定方法が間違っていることです。
mount
コマンドで指定するパスは、NAS内部のフルパス (/mnt/array1/Data
) ではなく、**ネットワークに公開されている「共有名」**を指定する必要があります。
いくつか確認と解決のためのステップをご提案します。
1. 共有名を確認する
まず、NASの設定画面で/mnt/array1/Data
というフォルダが、ネットワーク上で何という**「共有名」**で公開されているかを確認してください。
NASの管理画面(ブラウザで開く設定ページ)にログインし、「ファイル共有」「共有フォルダ」「SMB設定」といったメニューを探します。多くの場合、data
のような名前で共有されているはずです。
2. smbclient
コマンドで共有名を確認する (おすすめ)
ラズパイから直接NASに問い合わせて、公開されている共有フォルダの一覧を取得する方法です。これが一番確実です。
ターミナルで以下のコマンドを実行してください。
sudo apt install smbclient # もしインストールしていなければ
smbclient -L //192.168.2.5 -U <ログインユーザー名>
-L
はリスト表示、-U
はユーザー名指定のオプションです。 実行すると、ユーザ名のパスワードを聞かれますので入力してください。
成功すると、以下のようにSharenameという項目に共有名の一覧が表示されます。
Sharename Type Comment
--------- ---- -------
Data Disk My Data Share
public Disk
IPC$ IPC Remote IPC
この例では、Data
が共有名であることがわかります。
3. 正しいコマンドで再実行する
正しい共有名がわかったら、それを使ってmount
コマンドを再実行します。 例えば、共有名がData
だった場合、コマンドは以下のようになります。
Bash
sudo mount -t cifs -o username=ネットワークドライブログインユーザ名,password=ネットワークドライブログインパスワード //192.168.2.5/Data /mnt/nas
変更点:
\\
を//
に変更しました(Linuxではこちらが一般的です)。- パスをNAS内部のフルパスから共有名
Data
に変更しました。
このコマンドを実行後、ls /mnt/nas
を実行して、フォルダの中身が表示されるか確認してみてください。
トラブル:マウント先が権限不足でコピーができない
マウントが成功した後に非常によく起こる問題です。
原因はほぼ間違いなく、「ラズパイ側のユーザー」と「マウントされたフォルダの所有者」が一致していないためです。
何が起きているか?
sudo mount ...
コマンドを使ってマウントすると、デフォルトではマウントされたフォルダ (/mnt/nas
) の所有者が root
ユーザーになります。
そのため、普段使っている一般ユーザー(おそらく pi
ユーザー)が、root
ユーザーの持ち物である /mnt/nas
にファイルを書き込もうとすると、「あなたは所有者ではないので書き込めません」とOSに拒否されてしまいます。これが「権限がない」エラーの正体です。
解決策
マウントする際に、「このフォルダは pi
ユーザーのものです」とラズパイに教えてあげるオプションを追加することで解決できます。
ステップ1:一度アンマウントする
まず、現在のマウントを一度解除します。
sudo umount /mnt/nas
ステップ2:所有者を指定して再度マウントする
次に、マウントコマンドに uid
(ユーザーID) と gid
(グループID) のオプションを追加します。ラズパイのデフォルトユーザーである pi
のIDは通常 1000
です。
sudo mount -t cifs -o username=dmcuser,password=dmcuser,uid=1000,gid=1000 //192.168.2.5/DPUData /mnt/nas
【コマンドのポイント】
-o
の中にuid=1000,gid=1000
を追加しました。- これにより、
/mnt/nas
ディレクトリとその中身が、ラズパイ上のpi
ユーザー(ID:1000)によって所有されているように見せかけることができます。
このコマンドでマウントした後、もう一度ファイルのコピーを試してみてください。今度は問題なく成功するはずです。
補足: fstab を使う場合
もし将来的に /etc/fstab
で自動マウントを設定する場合も、同様にこのオプションを追記してください。
//192.168.2.5/Data /mnt/nas cifs credentials=/etc/samba/credentials,uid=1000,gid=1000 0 0
もし解決しない場合
万が一、上記の方法でも解決しない場合は、NAS側でログインユーザーに「書き込み権限」が与えられていない可能性があります。その際はNASの管理画面で、共有フォルダのアクセス権設定を見直してみてください。
トラブル:明示的にユーザー名を指定できますか
uid
やgid
オプションは数値のIDを必要としますが、id
コマンドを使えばユーザー名からその数値IDを自動で取得できます。
ユーザー名を指定してマウントする方法
$(id -u ユーザー名)
という書き方を使います。これは、()
内のコマンドを実行し、その結果(この場合はユーザーIDの数値)をその場に埋め込む、というLinuxの便利な機能です。
pi
ユーザーを指定する場合
Bash
sudo mount -t cifs -o username=dmcuser,password=dmcuser,uid=$(id -u pi),gid=$(id -g pi) //192.168.2.5/Data /mnt/nas
$(id -u pi)
:pi
ユーザーのUID(通常は1000
)に自動で置き換わります。$(id -g pi)
:pi
ユーザーのGID(通常は1000
)に自動で置き換わります。
この方法を使えば、「piユーザーのIDって何番だっけ?」と調べる手間が省けて、より直感的で間違いが少なくなります。
現在ログインしているユーザーを指定する場合
さらに便利な方法として、現在ターミナルを操作しているユーザー(あなた自身)を指定することもできます。
Bash
sudo mount -t cifs -o username=<ユーザー名>,password=<パスワード>,uid=$(id -u),gid=$(id -g) //192.168.2.5/Data /mnt/nas
$(id -u)
:pi
を指定しなくても、現在のユーザーのUIDを取得します。$(id -g)
: 現在のユーザーのGIDを取得します。
スクリプトなどを作成する際に、特定のユーザー名に依存しないため、こちらのほうが汎用性が高くおすすめです。👍
⚠️ 注意点: /etc/fstab
での設定
この $(...)
を使った自動取得方法は、ターミナルで手動でコマンドを実行する場合にのみ有効です。
起動時に読み込まれる /etc/fstab
ファイルの中では、この書き方は機能しません。
/etc/fstab
に記述する場合は、これまで通り、id -u pi
を実行して出てきた数値(1000
など)を直接書き込む必要があります。
コメント