問題の概要
Windows 10からWindows 11にアップグレード後、VagrantでNFSを使用したファイル共有が動作しなくなる問題に遭遇しました。
この記事では、その症状、原因、そして解決方法について詳しく説明します。
環境
- OS: Windows 11(Windows 10からアップグレード)
- Vagrant: vagrant-winnfsd 1.4.0プラグイン使用
- VM: CentOS 6.9(bento/centos-6.9)
- 仮想化: VirtualBox
症状
1. 高いLoad Average
$ uptime
18:45:49 up 7 min, 0 users, load average: 11.91, 9.52, 5.06
2. httpdプロセスがD状態(ディスクI/O待ち)でハング
$ ps aux | grep ' D '
apache 3841 0.0 0.3 494516 11916 ? D 17:48 0:00 /usr/sbin/httpd
apache 3842 0.0 0.3 494516 11916 ? D 17:48 0:00 /usr/sbin/httpd
apache 3843 0.0 0.3 494516 11900 ? D 17:48 0:00 /usr/sbin/httpd
# ... 多数のhttpdプロセスがD状態
3. dmesgでNFS接続エラー
$ dmesg | tail
nfs: server 192.168.33.1 not responding, still trying
nfs: server 192.168.33.1 not responding, still trying
4. NFSマウントへのアクセスがタイムアウト
$ ls /vagrant/
# コマンドがハングして応答なし
原因
Windows 11では、セキュリティが強化されており、Windows Defenderがwinnfsd.exe
(VagrantのNFSサーバー)をブロックしていることが原因でした。
解決方法
Windows Defenderの除外設定
最小限の設定で問題を解決できました:
- Windows セキュリティを開く(Windowsキー + 「セキュリティ」で検索)
- ウイルスと脅威の防止をクリック
- ウイルスと脅威の防止の設定の下の設定の管理をクリック
- 除外セクションまでスクロールして除外の追加または削除をクリック
- 除外の追加 → プロセスを選択
- プロセス名として
winnfsd.exe
を入力して追加
確認方法
除外設定後、Vagrantを再起動して確認:
# Vagrantを再起動
$ vagrant reload
# VM内でNFSマウントを確認
$ vagrant ssh
$ mount | grep nfs
192.168.33.1:/C/Users/[username]/src/project-folder on /vagrant type nfs (rw,vers=3,udp,vers=3,udp,nolock,addr=192.168.33.1)
# Load Averageが正常値に戻ったことを確認
$ uptime
18:45:49 up 7 min, 0 users, load average: 0.25, 0.16, 0.09
その他の考慮事項
代替案:rsyncへの切り替え
Windows Defenderの設定変更が難しい環境では、Vagrantfileを修正してNFSからrsyncに切り替える方法もあります:
# NFSからrsyncに変更
config.vm.synced_folder ".", "/vagrant", type: "rsync"
まとめ
Windows 11へのアップグレード後、セキュリティ強化によってvagrant-winnfsdがブロックされる問題は、Windows Defenderの除外設定にwinnfsd.exe
を追加するだけで解決できました。
この簡単な設定変更により、Windows 10と同様にVagrant + NFSの開発環境を継続して使用できます。
コメント