OllamaのモデルファイルをNFSで複数サーバーに共有する方法|共有ストレージでダウンロード1回・ディスク節約のクラスター構成手順

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > ローカルLLM > OllamaのモデルファイルをNFSで複数サーバーに共有する方法|共有ストレージでダウンロード1回・ディスク節約のクラスター構成手順
「Ollamaサーバーを3台に増やしたら、70GBのモデルを3回ダウンロードする羽目になってディスクが足りない」
「新しいモデルを追加するたびに全台にpullし直すのが手間で、チームのサーバー台数が増えるほど管理コストが上がっている」
そんな課題を抱えるLinuxサーバー管理者は多いはずです。この記事では、NFS(Network File System)を使ってOllamaのモデルファイルを1か所に集約し、複数のOllamaサーバーで共有する構成手順を解説します。モデルのダウンロードは1回・保管はNFSサーバー1台だけで済み、クラスター全体のストレージ効率が大幅に改善します。Ubuntu Server上でのNFSサーバー構築からOllamaへのパス設定、systemdの依存関係設定まで一通り説明します。

この記事のポイント

・OLLAMA_MODELS環境変数でモデルパスを変更すれば、NFS上のモデルをそのまま使える
・NFSサーバー側の設定は /etc/exports へのエントリ追加とnfs-kernel-serverの起動だけ
・systemdのAfter=とRequires=でNFSマウントをOllama起動前に保証し、起動順のトラブルを防ぐ
・モデル追加作業を「書き込み許可サーバー1台」に集中させるポリシーで整合性を保つ


OllamaのモデルファイルをNFSで複数サーバーに共有する方法|共有ストレージでダウンロード1回・ディスク節約のクラスター構成手順

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

NFSでOllamaモデルを共有する仕組みと利点

OllamaはデフォルトでモデルファイルをOSごとに決まったディレクトリ(Linux: `~/.ollama/models` または `/usr/share/ollama/.ollama/models`)に保存します。このパスは環境変数 `OLLAMA_MODELS` で任意の場所に変更できます。

NFS共有の仕組みはシンプルです。NFSサーバーがモデルディレクトリをエクスポートし、各OllamaサーバーがそのディレクトリをNFSマウントで読み込む。あとは `OLLAMA_MODELS` をNFSマウントポイントに向けるだけです。Ollama自体はモデルがローカルにあるかNFSにあるかを意識しません。

利点は3つあります。1つ目はストレージ効率です。70Bモデルのq4量子化(`llama3.3:70b-instruct-q4_0`)は約40GBを超えます。これを10台のサーバーで個別に持てば400GB以上消費しますが、NFS共有なら1か所40GBで済みます。2つ目は運用効率です。`ollama pull` をNFSサーバー側で1回実行すれば、全クライアントで即座に利用可能になります。3つ目は一貫性です。全サーバーが同じモデルファイルを参照するため、バージョンの食い違いが発生しません。

Ollamaの基盤環境がまだ整っていない場合は、先にUbuntu ServerでローカルLLMを構築する完全ガイドでOllamaをインストールしてから本記事に進んでください。

前提環境の確認とネットワーク要件

1. サーバー構成を確認する

本手順では以下の構成を前提とします。 NFSサーバー: Ollamaモデルを保管する専用(または兼用)サーバー。IPアドレス例: 192.168.1.10
Ollamaサーバー(クライアント): NFSをマウントしてOllamaを実行するサーバー群。IPアドレス例: 192.168.1.21、192.168.1.22

NFSサーバーはOllamaを動かす必要はありません。ファイルサーバーとして機能するだけなので、スペックが低いサーバーやNASを流用できます。モデルの読み込みはOllamaクライアント側が行います。

2. ネットワーク帯域を確認する

NFS経由のモデル読み込みにはネットワーク帯域が影響します。典型的なケースでは1Gbpsの内部ネットワークであれば実用的な速度で動作します。モデルのロード(Ollamaが最初にモデルをメモリに読み込む)は数秒から数十秒かかりますが、一度ロードが完了すれば推論はサーバーのRAM/VRAMで実行されるため、NFS帯域は推論速度には影響しません。

# ネットワーク帯域の確認(iperf3が必要) # NFSサーバー側でサーバーモードで起動 $ iperf3 -s # Ollamaクライアント側でテスト実行 $ iperf3 -c 192.168.1.10 Connecting to host 192.168.1.10, port 5201 ... [ ID] Interval Transfer Bitrate [ 5] 0.00-10.00 sec 1.10 GBytes 944 Mbits/sec sender [ 5] 0.00-10.00 sec 1.09 GBytes 937 Mbits/sec receiver

1Gbps近くの帯域が確認できれば十分です。100Mbps以下の場合、モデルロードに数分かかることがあります。

NFSサーバーを構築してモデルディレクトリをエクスポートする

1. nfs-kernel-serverをインストールする

# NFSサーバーにパッケージをインストール $ sudo apt update && sudo apt install -y nfs-kernel-server $ sudo systemctl status nfs-server * nfs-server.service - NFS server and services Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled) Active: active (running)

`active (running)` が表示されれば起動完了です。

2. モデル保管ディレクトリを作成する

NFSでエクスポートするディレクトリを作成し、適切な所有者を設定します。

# モデル保管ディレクトリを作成 $ sudo mkdir -p /srv/ollama/models $ sudo chown nobody:nogroup /srv/ollama/models $ sudo chmod 755 /srv/ollama/models $ ls -la /srv/ollama/ total 12 drwxr-xr-x 3 root root 4096 Oct 11 07:00 . drwxr-xr-x 3 root root 4096 Oct 11 07:00 .. drwxr-xr-x 2 nobody nogroup 4096 Oct 11 07:00 models

`/srv/ollama/models` の所有者を `nobody:nogroup` にしているのは、NFSクライアントからの書き込みを `no_root_squash` なしで制御するためです。モデルの書き込みを特定サーバーに限定する場合は後述のエクスポートオプションで制御します。

3. /etc/exportsにエクスポート設定を追加する

`/etc/exports` にNFSクライアントのIP範囲とオプションを記述します。

# /etc/exports の末尾に追記(sudo で編集) /srv/ollama/models 192.168.1.0/24(rw,sync,no_subtree_check,all_squash,anonuid=65534,anongid=65534) # 設定を反映する $ sudo exportfs -ra $ sudo exportfs -v /srv/ollama/models 192.168.1.0/24(sync,wdelay,hide,no_subtree_check,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,all_squash)

各オプションの意味を説明します。`sync` はデータをディスクに書き込んでから応答するオプションで、NFS越しの書き込み中断によるデータ破損を防ぎます。`no_subtree_check` はパフォーマンス向上のために推奨される設定です。`all_squash` は全ユーザーを `anonuid=65534`(nobody)に変換します。モデルファイルの書き込みをNFSサーバー直接(または指定クライアントのみ)に限定したい場合は、書き込み許可サーバーのIPに対してのみ `rw` を付け、他のクライアントには `ro` を設定します。

4. ファイアウォールにNFSを許可する

# ufw を使用している場合 $ sudo ufw allow from 192.168.1.0/24 to any port nfs $ sudo ufw status Status: active To Action From -- ------ ---- 2049/tcp ALLOW 192.168.1.0/24

NFS v4はTCPポート2049のみを使用します。古いNFS v3では追加ポートが必要ですが、Ubuntu 22.04以降のデフォルト構成ではv4が使われます。

OllamaクライアントサーバーでNFSマウントを設定する

以降の手順は、Ollamaが稼働する全クライアントサーバーで実施します。

1. nfs-commonをインストールする

# クライアントサーバーにNFSクライアントパッケージをインストール $ sudo apt update && sudo apt install -y nfs-common $ sudo showmount -e 192.168.1.10 Export list for 192.168.1.10: /srv/ollama/models 192.168.1.0/24

`showmount -e` でNFSサーバーのエクスポート一覧が表示されれば、クライアントからNFSサーバーへの到達性が確認できています。

2. マウントポイントを作成して手動マウントを確認する

# マウントポイントを作成 $ sudo mkdir -p /mnt/ollama-models # 手動マウントで到達確認 $ sudo mount -t nfs 192.168.1.10:/srv/ollama/models /mnt/ollama-models $ df -h | grep ollama 192.168.1.10:/srv/ollama/models 500G 320G 180G 64% /mnt/ollama-models $ ls /mnt/ollama-models blobs manifests

`df -h` でNFSの空き容量が確認でき、`ls` でOllamaのモデルディレクトリ構成(blobs/manifests)が見えれば成功です。手動マウントを確認したらいったん解除します。

# 確認後に手動マウントを解除 $ sudo umount /mnt/ollama-models

3. /etc/fstabに永続マウントを設定する

`/etc/fstab` に追記して再起動後もマウントが維持されるようにします。

# /etc/fstab の末尾に追記(sudo で編集) 192.168.1.10:/srv/ollama/models /mnt/ollama-models nfs defaults,_netdev,nofail,timeo=30,retrans=3 0 0 # fstabの設定を適用してマウントを確認 $ sudo mount -a $ df -h | grep ollama 192.168.1.10:/srv/ollama/models 500G 320G 180G 64% /mnt/ollama-models

`_netdev` はネットワークが利用可能になってからマウントするオプションです。これがないと起動時にNFSサーバーに到達できずマウントが失敗します。`nofail` はマウント失敗時もサーバーを起動させ続けるオプションです。`timeo=30,retrans=3` はNFSサーバーが一時的に応答しない場合のリトライ設定です。

OllamaのモデルパスをNFSマウント先に向ける

1. systemdのoverride.confでOLLAMA_MODELSを設定する

Ollamaをsystemdサービスとして動かしている場合、`OLLAMA_MODELS` 環境変数はoverride.confに設定します。

# override.confを作成(または編集) $ sudo mkdir -p /etc/systemd/system/ollama.service.d $ sudo tee /etc/systemd/system/ollama.service.d/override.conf << 'EOF' [Service] Environment="OLLAMA_MODELS=/mnt/ollama-models" EOF # デーモンを再読み込みしてOllamaを再起動 $ sudo systemctl daemon-reload $ sudo systemctl restart ollama $ sudo systemctl status ollama * ollama.service - Ollama Service Active: active (running) $ ollama list NAME ID SIZE MODIFIED llama3.3:8b-instruct-q4_0 e8e4eb21ab0c 4.9 GB 3 days ago mistral:7b-instruct-q4_0 2ae6f6dd7a3d 4.1 GB 5 days ago

`ollama list` でNFSサーバーのモデルが表示されれば成功です。NFSサーバー上でモデルを `ollama pull` すれば、全クライアントで即座に `ollama list` に表示されます。

モデルの種類と量子化タグの選び方についてはローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイントで詳しく解説しています。NFS共有するモデルを選定する際に参照してください。

systemdでNFSマウントをOllama起動前に保証する

1. After=とRequires=の依存関係を設定する

`/etc/fstab` の `_netdev` だけでは、OllamaサービスがNFSマウントの完了を待たずに起動してしまうことがあります。systemdのユニットファイルに依存関係を明示します。

# override.confに起動順序の依存関係を追加(既存のEnvironment行と合わせて書く) $ sudo tee /etc/systemd/system/ollama.service.d/override.conf << 'EOF' [Unit] After=network-online.target mnt-ollama\x2dmodels.mount Requires=mnt-ollama\x2dmodels.mount [Service] Environment="OLLAMA_MODELS=/mnt/ollama-models" EOF $ sudo systemctl daemon-reload $ sudo systemctl restart ollama

`mnt-ollama\x2dmodels.mount` はsystemdがfstabのNFSエントリから自動生成するマウントユニットです。`\x2d` はハイフン `-` のsystemdエスケープです。`systemctl list-units --type=mount | grep ollama` で実際のユニット名を確認できます。`After=` はOllamaがマウント完了後に起動することを保証し、`Requires=` はマウントが失敗したときOllamaも起動しないことを保証します。

社内でのローカルLLM活用の判断軸については社内でChatGPTが使えないときの代替手段も参照してください。NFS共有のような中央集権型インフラが情シスのコスト削減に貢献する観点が整理されています。

読み取り専用と読み書きの使い分け

モデルの追加・削除(`ollama pull` / `ollama rm`)はファイルの書き込みを伴います。全サーバーに `rw` を付けると、複数台が同時にモデルをダウンロードしようとした場合にファイルの整合性が壊れる危険があります。典型的なケースでは「書き込み許可は1台のみ」という運用ポリシーを取ります。

`/etc/exports` を以下のように分けることで制御できます。管理用サーバー(192.168.1.21)だけが `rw`、残りのOllamaサーバーは `ro`(読み取り専用)に設定します。

# /etc/exports — 管理サーバーだけrw、他はro /srv/ollama/models 192.168.1.21(rw,sync,no_subtree_check,all_squash,anonuid=65534,anongid=65534) /srv/ollama/models 192.168.1.22(ro,sync,no_subtree_check,all_squash,anonuid=65534,anongid=65534) /srv/ollama/models 192.168.1.23(ro,sync,no_subtree_check,all_squash,anonuid=65534,anongid=65534) $ sudo exportfs -ra && sudo exportfs -v

`ro` のクライアントは `ollama pull` を実行しようとするとエラーになり、モデル追加の誤操作を防げます。モデルを管理サーバーで追加したあとは、roクライアントで `ollama list` を実行するだけで即座に一覧に反映されます。

よくあるトラブルと対処法

**【マウント失敗: access denied / permission denied】**
NFSサーバー側の `/etc/exports` にクライアントIPが含まれていない可能性があります。`sudo exportfs -v` でエクスポート一覧を確認し、クライアントIPまたはサブネットが含まれているか確認します。IPアドレスをサブネットではなく個別指定している場合、`/24` のCIDR表記と個別IP表記を混在させないようにしてください。

**【Ollamaがモデルを認識しない(ollama listが空)】**
`OLLAMA_MODELS` の設定が反映されていない可能性があります。`sudo systemctl cat ollama` で実際にロードされている環境変数を確認します。`OLLAMA_MODELS` が表示されない場合、`sudo systemctl daemon-reload && sudo systemctl restart ollama` を実行してください。

**【サーバー再起動後にOllamaが起動しない(NFSマウントが間に合わない)】**
`After=mnt-ollama\x2dmodels.mount` が設定されていないか、マウントユニット名が間違っている可能性があります。`sudo systemctl list-units --type=mount | grep ollama` で正確なユニット名を取得し、override.confに反映します。

**【推論が極端に遅い(NFS越しの読み込みが遅い)】**
モデルのロード(NFS→メモリ)はネットワーク速度に依存します。一度ロードされた後の推論はRAMやGPU内で完結するため遅くなりません。ロード自体が遅い場合は `rsize=1048576,wsize=1048576` をfstabのマウントオプションに追加してNFSの読み取りサイズを大きくすることで改善することがあります。

**【モデルファイルが壊れる(不完全なダウンロード)】**
複数のサーバーが同時に同じモデルを `ollama pull` しようとすると、NFSの書き込みが競合してファイルが破損することがあります。「モデル追加は管理サーバー1台のみ」のポリシーで防止してください。破損したモデルは `ollama rm モデル名` で削除し、管理サーバーで `ollama pull` で取り直します。

まとめ

本記事で設定したOllamaのNFSモデル共有構成を整理します。
項目 コマンド・設定 目的
NFSサーバーインストール sudo apt install -y nfs-kernel-server モデル配布元の構築
エクスポート設定 /etc/exports に rw/ro オプション付きで追記 書き込み制御とクライアント範囲指定
エクスポート反映 sudo exportfs -ra exports変更の即時反映
クライアントインストール sudo apt install -y nfs-common OllamaサーバーへのNFSクライアント追加
永続マウント設定 /etc/fstab に _netdev,nofail オプション付きで追記 再起動後もマウントを維持
Ollamaモデルパス変更 override.conf に Environment="OLLAMA_MODELS=/mnt/ollama-models" を追加 OllamaにNFSモデルを認識させる
起動順序の保証 After=とRequires=にNFSマウントユニットを追加 NFSマウント前のOllama起動を防止
この構成が整うと、`ollama pull` を管理サーバーで1回実行するだけでクラスター全体にモデルが配布されます。70GBを超える大規模モデルも保管は1か所に集約でき、ディスク消費の増大を抑えられます。Ansibleによる複数台への一括デプロイと組み合わせると、NFS設定もPlaybook化してクラスターの管理コストをさらに下げられます。

NFS共有を含むOllamaクラスター構築を2日間のハンズオンで体験する

複数サーバーへのOllamaデプロイ、NFSによるモデル共有、LiteLLMプロキシによるチームAPI管理まで、実際のクラスター構成をゼロから組み立てる実習が含まれています。実機GPU環境で手を動かしながら習得したい方向けに、「ローカルAIマスターセミナー」を開催しています。
少人数(最大8名)ZOOMハンズオン形式で実施しています。

>> ローカルAIマスターセミナーの詳細を確認する
ローカルLLMの構築・運用に関する関連記事もあわせて参考にしてください。

・Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド
・社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢
・ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。